On Thursday, February 22, 2018 at 3:31:46 PM UTC, Erik Bray wrote:
>
> On Thu, Feb 22, 2018 at 11:44 AM, J. Javan <[email protected] 
> <javascript:>> wrote: 
> > Dear Erik, 
> > 
> > I highly appreciate you for taking the time and helping people. 
> > Basically, we have some mathematical problems in a GUI application 
> > implemented in Qt-C++ which sage is capable of computing them. This is 
> why 
> > we decided to integrate sage in our app. 
> > 
> > However, As you mentioned it is a very complex or even impossible task 
> to 
> > integrate sage into a windows application since sage is a software suit 
> > rather than a python library. 
> > 
> > After googling some, I found another project called SageMathCell which 
> > provides REST interface to a sage server. I guess this is the best of 
> way 
> > achieving what we are looking for. Unless I'm very much mistaken, with 
> > SageMathCell we can run all sage scripts with peace of mind. 
>
> I probably wouldn't--depending on what your application does it would 
> only slow things down to be passing data between two executables over 
> the HTTP stack.  This may be a relatively easy way but there are 
> betters. 
>
> If your application already depends fully on Sage (which, granted, is 
> a big dependency), then why not build your application in the Sage + 
> Cygwin environment?  There's no reason you couldn't do that, and would 
> allow you to incorporate the Python interpreter directly into your 
> application.  Additional, perhaps the C++ component of your 
> application can be refactored into a library, and the GUI component 
> can use PyQT or a similar library, which would simplify building (so 
> long as you have no trouble getting PyQT built against Sage's Python). 
> (Or maybe the C++ component can go away entirely if it's only for the 
> GUI--either way). 
>

Cantor (https://github.com/KDE/cantor) is a KDE frontend to computer 
algebra systems, including Sagemath.
So this looks similar to what you're after, no?


> Beyond that, without seeing your code it's hard to comment much, but I 
> wouldn't overcomplicate things.  Again, if Sage is a hard dependency 
> of your project then you might as well build the project fully in 
> Sage's runtime environment. 
>
>
>
> > As mentioned in this tutorial one should URL encode the sage script and 
> POST 
> > it to 
> > http://{IP address of your SageMathCell server}:8888/service. 
> > 
> > This perfectly works however I cannot it get to work for some scripts. 
> > 
> > For instance calling the service with below code works: 
> > 
> > QNetworkRequest request; 
> > 
> > request.setUrl(QUrl("http://192.168.224.130:8888/service";)); 
> > 
> > request.setHeader(QNetworkRequest::ContentTypeHeader, 
> > "application/x-www-form-urlencoded"); 
> > 
> > arrReqBody = "code=print(1+1)"; // This is the sage script which is put 
> in 
> > HTTP body request 
> > 
> > arrReqBody = request.url().toPercentEncoding(arrReqBody, "=()[].:,"); 
> > 
> > QNetworkAccessManager *netMgr = new QNetworkAccessManager(); 
> > 
> > QObject::connect(netMgr, SIGNAL(finished(QNetworkReply*)), this, 
> > SLOT(sageReply(QNetworkReply*))); 
> > 
> > netMgr->post(request, arrReqBody); 
> > 
> > Which returns the result in stdout as shown below: 
> > "{\"execute_reply\": {\"status\": \"ok\", \"execution_count\": 1, 
> > \"user_expressions\": {}, \"payload\": []}, \"success\": true, 
> \"stdout\": 
> > \"2\\n\"}" 
> > 
> > On the other hand, changing sage script to below does not work. 
> > 
> > arrReqBody = 
> > 
> "code='Y=Polyhedron(vertices=[(0,0,0,0,0,0,0,0),(0,0,0,1,0,1,0,1),(0,0,0,1,0,1,1,1),(0,0,0,1,1,1,0,1)])";
>  
>
> > 
> > arrReqBody += "for v in Y.inequality_generator():print v'"; 
> > 
> > 
> > Above HTTP body returns below which states that the script has been 
> > successfully ran but I've no idea why stdout is missing. 
> > 
> > "{\"execute_reply\": {\"status\": \"ok\", \"execution_count\": 1, 
> > \"user_expressions\": {}, \"payload\": []}, \"success\": true}" 
>
> It looks like you have some extra quoting here.  You have 
>
>    arrReqBody="code='...'" 
>
> So the 'code' in this case is just a string literal '...' that happens 
> to contain the actual code you want.  AFAICT there's no reason for 
> those extra single-quotes.  Just as guess though. 
>
> Best, 
> E 
>
>
> > My best guess is that there is something wrong about the encoding 
> however no 
> > luck until now. 
> > I would appreciate it if someone could lend me a hand on this. 
> > 
> > Thanks, 
> > Javan 
> > 
> > 
> > 
> > On Wednesday, January 31, 2018 at 5:30:16 PM UTC+3:30, Erik Bray wrote: 
> >> 
> >> On Tue, Jan 30, 2018 at 2:35 PM, J. Javan <[email protected]> wrote: 
> >> > I can see that you have successfully linked against sage. 
> >> > I also have a Qt GUI application which needs to do some mathematics 
> in 
> >> > the 
> >> > background. 
> >> > This application is targeted for windows platforms. I have installed 
> >> > sage 
> >> > from this link. 
> >> > Could you please guide me on how to link my app with sage? 
> >> > 
> >> > I'm running your code as below 
> >> > 
> >> > #include <Python.h> 
> >> > 
> >> > 
> >> > int main(int argc, char *argv[]) 
> >> > 
> >> > { 
> >> > 
> >> > 
> >> >     int retVal = 0; 
> >> > 
> >> >     Py_Initialize(); 
> >> > 
> >> >     PySys_SetArgv(argc, (wchar_t**) argv); 
> >> > 
> >> >     printf("1+1:\n"); 
> >> > 
> >> >     PyRun_SimpleString("print (1+1)"); 
> >> > 
> >> >     printf("Load sage \n"); 
> >> > 
> >> >     retVal = PyRun_SimpleString("from sage.all import *"); 
> >> > 
> >> >     printf("Factor 2310:\n"); 
> >> > 
> >> >     PyRun_SimpleString("print factor(2310)"); 
> >> > 
> >> >     Py_Finalize(); 
> >> > 
> >> >     return 0; 
> >> > 
> >> > } 
> >> > 
> >> > 
> >> > And this gives me the following output: 
> >> > 
> >> > 1+1: 
> >> > 2 
> >> > Load sage 
> >> > Traceback (most recent call last): 
> >> >   File "<string>", line 1, in <module> 
> >> > ModuleNotFoundError: No module named 'sage' 
> >> > Factor 2310: 
> >> >   File "<string>", line 1 
> >> >     print factor(2310) 
> >> >                ^ 
> >> > SyntaxError: invalid syntax 
> >> > Press <RETURN> to close this window... 
> >> > 
> >> > The output is clearly stating that sage cannot be found. 
> >> > This is because I have linked to my locally compiled python static 
> >> > libraries(Actually I have downloaded python source code and linked 
> >> > against 
> >> > it.) which are not aware of sage. 
> >> > 
> >> > Also I tried to link against python provided in sage installation but 
> I 
> >> > can't find any "python.lib" in it. 
> >> > I have also set an environment variable $SAGE_LOCAL pointing to 
> >> > "C:\Program 
> >> > Files\SageMath 8.1\runtime\opt\sagemath-8.1\local" but no luck. 
> >> > 
> >> > Environment: 
> >> > Qt_v5.9 
> >> > Windows 7 
> >> > Python_v3.6.4 
> >> > Sage_v8.1 
> >> 
> >> Hi, 
> >> 
> >> I saw this mail forwarded to sage-devel, but it appears to be missing 
> >> quite a lot of context.  What, specifically, is it that you're trying 
> >> to do? 
> >> 
> >> To be clear, Sage for Windows is not just a Python module.  It's an 
> >> entire software suite, including its own Python interpreter.  All of 
> >> it is complied with Cygwin.  You won't be able to "import sage" from 
> >> different Python. 
> >> 
> >> If you're trying to build an application that uses Sage internally 
> >> somehow you have two choices really--build the entire software inside 
> >> Sage's environment (you can do this, for example, from the Sage Shell 
> >> which is really a Cygwin shell in the Sage environment).  That is, 
> >> build all your software in Cygwin, linking with the Python in Sage, 
> >> etc.  This can be tricky unless you know what you're doing with Sage's 
> >> development environment. 
> >> 
> >> Your other alternative is that you can always call Sage's Python from 
> >> outside Sage (but again, you'll still have to set a few environment 
> >> variables at a minimum), and depending on how Python is integrated 
> >> into your software this could mean anything from running the Python 
> >> interpreter as a subprocess and communicating with it, to dynamically 
> >> linking with the libpython DLL in Sage and running C Python code like 
> >> in your example above.  Though to be honest I'm not exactly sure if 
> >> it's possible to link a Cygwin DLL into a non-Cygwin executable. But I 
> >> think maybe it's possible.... 
> >> 
> >> Please let me know more about what you're trying to do though and I 
> >> can probably be of more help. 
> >> 
> >> Best, 
> >> E 
> >> 
> >> 
> >> > On Wednesday, September 14, 2011 at 4:15:58 AM UTC+4:30, Michael 
> >> > Rubinstein 
> >> > wrote: 
> >> >> 
> >> >> Thanks! That worked for me too, though I'm not sure how you decided 
> on 
> >> >> the specific 
> >> >> choices of libraries to link to. 
> >> >> 
> >> >> Mike 
> >> >> 
> >> >> On Sep 13, 6:39 pm, Willem Jan Palenstijn <[email protected]> wrote: 
> >> >> > On Tue, Sep 13, 2011 at 08:46:05AM -0700, Michael Rubinstein 
> wrote: 
> >> >> > 
> >> >> > > I tried adding PySys_SetArgv(argc, argv); after Py_Initialize(); 
> >> >> > > It gets me further but then gives a strange error message: 
> >> >> > 
> >> >> > > Loading the Sage library... 
> >> >> > 
> >> >> > > ------------------------------------------------------------ 
> >> >> > > Unhandled SIGSEGV: A segmentation fault occurred in Sage. 
> >> >> > > This probably occurred because a *compiled* component 
> >> >> > > of Sage has a bug in it (typically accessing invalid memory) 
> >> >> > > or is not properly wrapped with _sig_on, _sig_off. 
> >> >> > > You might want to run Sage under gdb with 'sage -gdb' to debug 
> >> >> > > this. 
> >> >> > > Sage will now terminate (sorry). 
> >> >> > > ------------------------------------------------------------ 
> >> >> > 
> >> >> > I've just tried it here with your embed.c + PySys_SetArgv(argc, 
> >> >> > argv), 
> >> >> > and it 
> >> >> > works for me when I link against libpython2.6 dynamically: 
> >> >> > 
> >> >> > $ gcc -I$SAGE_LOCAL/include/python2.6 embed.c -lpython2.6  -lm 
> -lutil 
> >> >> > -lpthread -ldl -o embed 
> >> >> > $ ./embed 
> >> >> > 1+1: 
> >> >> > 2 
> >> >> > Load sage 
> >> >> > Factor 2310: 
> >> >> > 2 * 3 * 5 * 7 * 11 
> >> >> > $ 
> >> >> > 
> >> >> > This is 64 bit linux with sage 4.7.1rc1. 
> >> >> > 
> >> >> > -Willem Jan 
> >> > 
> >> > -- 
> >> > You received this message because you are subscribed to the Google 
> >> > Groups 
> >> > "sage-devel" group. 
> >> > To unsubscribe from this group and stop receiving emails from it, 
> send 
> >> > an 
> >> > email to [email protected]. 
> >> > To post to this group, send email to [email protected]. 
> >> > Visit this group at https://groups.google.com/group/sage-devel. 
> >> > For more options, visit https://groups.google.com/d/optout. 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sage-devel" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to [email protected] <javascript:>. 
> > To post to this group, send email to [email protected] 
> <javascript:>. 
> > Visit this group at https://groups.google.com/group/sage-devel. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to