- Timestamp:
- Sep 15, 2006, 11:27:44 AM (18 years ago)
- Branches:
- (u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
- Children:
- 8d1ad78ac082c58a90181498f0f20747571dcb62
- Parents:
- 21e48b4cf85109274682f479ef676117ed623121
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/python/interpreter_support.cc
r21e48b re88c64 1 //$Id: interpreter_support.cc,v 1.2 1 2006-06-21 06:27:11 brickenExp $1 //$Id: interpreter_support.cc,v 1.22 2006-09-15 09:27:44 Singular Exp $ 2 2 3 3 #include <sstream> … … 32 32 matrix matrixFromArray(const array& f){ 33 33 object o=f.attr("shape"); 34 34 35 35 object o1=o[0]; 36 36 37 37 object o2=o[1]; 38 38 int l1=extract<int>(o1); 39 39 40 40 41 41 int l2=extract<int>(o2); 42 42 matrix m=mpNew(l1,l2); … … 66 66 omFreeBin(args, sleftv_bin); 67 67 } 68 68 69 69 } 70 70 leftv pop_front(){ … … 104 104 void appendint(int p){ 105 105 leftv v=initArg(); 106 v->data=(void*) p;106 v->data=(void*)((long)p); 107 107 v->rtyp=INT_CMD; 108 108 internal_append(v); … … 126 126 v->rtyp=MATRIX_CMD; 127 127 internal_append(v); 128 128 129 129 } 130 130 void appendString(const char* s){ … … 144 144 lists dumpToLists(){ 145 145 int n=length(); 146 146 147 147 lists res=(lists)omAlloc0Bin(slists_bin); 148 148 res->Init(n); … … 155 155 } 156 156 return res; 157 157 158 158 } 159 159 void appendPrelist(arg_list& l){ … … 182 182 leftv last=args; 183 183 while(last->next!=NULL){ 184 184 last=last->next; 185 185 } 186 186 last->next=v; … … 188 188 args=v; 189 189 } 190 190 191 191 }; 192 192 … … 210 210 } 211 211 void writePoly(const Poly& p){ 212 212 213 213 if (id->typ==POLY_CMD){ 214 214 p_Delete(&id->data.p, currRing); 215 215 id->data.p=p.as_poly(); 216 216 } 217 217 218 218 } 219 219 void writeIdeal(const Ideal& p){ 220 220 if (id->typ==IDEAL_CMD){ 221 221 id_Delete(&id->data.uideal, currRing); 222 222 223 223 id->data.uideal=p.as_ideal(); 224 224 } … … 227 227 if (id->typ==MODUL_CMD){ 228 228 id_Delete(&id->data.uideal, currRing); 229 229 230 230 id->data.uideal=p.as_module(); 231 231 } … … 237 237 } 238 238 void writeNumber(const Number& p){ 239 239 240 240 if (id->typ==NUMBER_CMD){ 241 241 n_Delete(&id->data.n, currRing); … … 244 244 } 245 245 void writeVector(const Vector& p){ 246 246 247 247 if (id->typ==VECTOR_CMD){ 248 248 p_Delete(&id->data.p, currRing); … … 295 295 using boost::python::object; 296 296 using boost::python::list; 297 297 298 298 list l; 299 300 299 300 301 301 for(int i=1;i<=MATROWS(m);i++){ 302 302 list row; … … 311 311 //FIXME: should call this only once 312 312 array::set_module_and_type("Numeric", 313 314 315 313 "ArrayType" 314 ); 315 316 316 return array(l); 317 317 } … … 320 320 using boost::python::list; 321 321 list res; 322 322 323 323 for(int i=0;i<=l->nr;i++){ 324 324 leftv lv=&l->m[i]; … … 333 333 switch (v->rtyp){ 334 334 case INT_CMD: 335 return object((int) v->data);335 return object((int)((long)v->data)); 336 336 case POLY_CMD: 337 338 337 return object(Poly((poly) v->data, currRing)); 339 338 case STRING_CMD: 340 339 return str((const char*) v->data); 341 340 case VECTOR_CMD: 342 343 341 return object( Vector((poly) v->data, currRing)); 344 342 case IDEAL_CMD: … … 347 345 return object(Module((ideal) v->data, currRing)); 348 346 case NUMBER_CMD: 349 350 347 return object(Number((number) v->data, currRing)); 351 348 case MATRIX_CMD: 352 { 353 return buildPythonMatrix((matrix) v->data,currRing); 354 } 349 return buildPythonMatrix((matrix) v->data,currRing); 355 350 case LIST_CMD: 356 351 return buildPythonList((lists) v->data, currRing); … … 359 354 case INTVEC_CMD: 360 355 return object(Intvec(*(intvec*) v->data)); 356 361 357 default: 362 363 358 return object(); 364 359 } 365 360 } 366 boost::python::object buildPyObjectFromIdhdl(const idhdl_wrap& id){ 361 boost::python::object buildPyObjectFromIdhdl(const idhdl_wrap& id) 362 { 367 363 using boost::python::object; 368 364 369 365 switch (id.id->typ){ 370 366 case STRING_CMD: … … 374 370 return object((int)id.id->data.i); 375 371 case POLY_CMD: 376 372 377 373 return object(Poly((poly) id.id->data.p, currRing)); 378 374 case VECTOR_CMD: 379 375 380 376 return object( Vector((poly) id.id->data.p, currRing)); 381 377 case IDEAL_CMD: … … 388 384 return object(Module((ideal) id.id->data.uideal, currRing)); 389 385 case NUMBER_CMD: 390 386 391 387 return object(Number((number) id.id->data.n, currRing)); 392 388 case MATRIX_CMD: … … 401 397 return object(Intvec(*(intvec*) id.id->data.iv)); 402 398 default: 403 return object(); 399 return object(); 404 400 //Py_INCREF(Py_None); 405 401 //return Py_None; … … 409 405 boost::python::object call_interpreter_method(const idhdl_wrap& proc, const arg_list& args){ 410 406 //idhdl oldPackHDL=currPackHdl; 411 407 412 408 //package oldPack=currPack; 413 409 //currPack=proc.id->data.pinf->pack; … … 423 419 424 420 return buildPyObjectFromLeftv(&iiRETURNEXPR[voice]); 425 421 426 422 //return res; 427 423 } 428 424 boost::python::object call_builtin_method_general(const char* name, arg_list& l){ 429 425 430 426 431 427 int cmd_n=-1; … … 435 431 // return Py_None; 436 432 if (cmd_n<0){ 437 433 438 434 439 435 return object(); 440 436 441 437 } else { 442 438 … … 450 446 case 2: 451 447 { 452 453 454 455 456 457 448 leftv arg1=l.pop_front(); 449 leftv arg2=l.pop_front(); 450 iiExprArith2(res,arg1,cmd_n,arg2,TRUE); 451 free_leftv(arg1); 452 free_leftv(arg2); 453 break; 458 454 } 459 455 case 3: 460 456 { 461 462 463 464 465 466 467 468 469 470 457 leftv arg1=l.pop_front(); 458 leftv arg2=l.pop_front(); 459 leftv arg3=l.pop_front(); 460 461 462 iiExprArith3(res,cmd_n,arg1,arg2,arg3); 463 free_leftv(arg1); 464 free_leftv(arg2); 465 free_leftv(arg3); 466 break; 471 467 } 472 468 default: … … 485 481 using boost::python::str; 486 482 //ring r=p.getRing(); 487 483 488 484 489 485 std::basic_stringstream<char> s; … … 530 526 def("transfer_to_python",buildPyObjectFromIdhdl); 531 527 def("is_builtin", is_builtin); 532 533 } 534 535 528 529 } 530 531
Note: See TracChangeset
for help on using the changeset viewer.