Opened 9 years ago

Last modified 6 years ago

# Issue with NumPy, SciPy, cvxopt

Reported by: Owned by: kheyfboris jason, jkantor major sage-6.4 numerical N/A

### Description

When You type in numbers into Sage, the pre-processor converts them to a base ring, which is unknown to NumPy?, SciPy? and cvxopt. The best solution to this is to redefine the types:

```RealNumber=float
Integer=int
```

But this solution only works in interpreter - since in a script - all numbers got converted to _sage_consts despite the claim of:

```RealNumber=float
Integer=int
```

So the following sage script:

```#!/usr/bin/sage

RealNumber=float
Integer=int

from cvxopt.base import matrix as m
from cvxopt import solvers

c = m([-4., -5.])
G = m([[2., 1., -1., 0.], [1., 2., 0., -1.]])
h = m([3., 3., 0., 0.])

sol = solvers.lp(c,G,h)
print sol['x']

```

is converted to the following python script

```# This file was *autogenerated* from the file ./1.sage.
from sage.all_cmdline import *   # import sage library
_sage_const_4p = RealNumber('4.'); _sage_const_1p = RealNumber('1.'); _sage_const_0p = RealNumber('0.'); _sage_const_3p = RealNumber('3.'); _sage_const_2p = RealNumber('2.'); _sage_const_5p = RealNumber('5.')#!/usr/bin/sage

RealNumber=float
Integer=int

from cvxopt.base import matrix as m
from cvxopt import solvers

c = m([-_sage_const_4p , -_sage_const_5p ])
G = m([[_sage_const_2p , _sage_const_1p , -_sage_const_1p , _sage_const_0p ], [_sage_const_1p , _sage_const_2p , _sage_const_0p , -_sage_const_1p ]])
h = m([_sage_const_3p , _sage_const_3p , _sage_const_0p , _sage_const_0p ])

sol = solvers.lp(c,G,h)
print sol['x']

```

which gives error:

```Traceback (most recent call last):
File "./1.py", line 11, in <module>
c = m([-_sage_const_4p , -_sage_const_5p ])
TypeError: invalid type in list

```

### comment:1 Changed 9 years ago by kheyfboris

So the solution:

```RealNumber = float; Integer = int
```

for `NumPy`/`SciPy` type issues (see here) doesn't work in a script executed by `sage`. But it does in a script executed by `sage -python`. But in a script executed by `sage -python` – none of sage is working: for example `^` does not stand for exponentiation any more. So this solution is no good for scripts.

### comment:2 Changed 8 years ago by jdemeyer

• Milestone changed from sage-5.11 to sage-5.12

### comment:3 Changed 7 years ago by vbraun_spam

• Milestone changed from sage-6.1 to sage-6.2

### comment:4 Changed 7 years ago by vbraun_spam

• Milestone changed from sage-6.2 to sage-6.3

### comment:5 Changed 7 years ago by vbraun_spam

• Milestone changed from sage-6.3 to sage-6.4

### comment:6 Changed 6 years ago by kcrisman

Ah, this must be the thing that causes Brian to have problems too.

### comment:7 Changed 6 years ago by kcrisman

Note that for some reason this is actually in the FAQ. I don't know if that is good or bad.

Note: See TracTickets for help on using tickets.