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.
