331 | | |
332 | | cdef class ring_wrapper_Py(object): |
333 | | r""" |
334 | | Python object wrapping the ring pointer. |
335 | | |
336 | | This is useful to store ring pointers in Python containers. |
337 | | |
338 | | You must not construct instances of this class yourself, use |
339 | | :func:`wrap_ring` instead. |
340 | | |
341 | | EXAMPLES:: |
342 | | |
343 | | sage: from sage.libs.singular.ring import ring_wrapper_Py |
344 | | sage: ring_wrapper_Py |
345 | | <type 'sage.libs.singular.ring.ring_wrapper_Py'> |
346 | | """ |
347 | | |
348 | | cdef ring* _ring |
349 | | |
350 | | def __cinit__(self): |
351 | | """ |
352 | | The Cython constructor. |
353 | | |
354 | | EXAMPLES:: |
355 | | |
356 | | sage: from sage.libs.singular.ring import ring_wrapper_Py |
357 | | sage: t = ring_wrapper_Py(); t |
358 | | The ring pointer 0x0 |
359 | | sage: TestSuite(t).run() |
360 | | """ |
361 | | self._ring = NULL |
362 | | |
363 | | def __hash__(self): |
364 | | """ |
365 | | Return a hash value so that instances can be used as dictionary keys. |
366 | | |
367 | | OUTPUT: |
368 | | |
369 | | Integer. |
370 | | |
371 | | EXAMPLES:: |
372 | | |
373 | | sage: from sage.libs.singular.ring import ring_wrapper_Py |
374 | | sage: t = ring_wrapper_Py() |
375 | | sage: t.__hash__() |
376 | | 0 |
377 | | """ |
378 | | return <long>(self._ring) |
379 | | |
380 | | def __repr__(self): |
381 | | """ |
382 | | Return a string representation. |
383 | | |
384 | | OUTPUT: |
385 | | |
386 | | String. |
387 | | |
388 | | EXAMPLES:: |
389 | | |
390 | | sage: from sage.libs.singular.ring import ring_wrapper_Py |
391 | | sage: t = ring_wrapper_Py() |
392 | | sage: t |
393 | | The ring pointer 0x0 |
394 | | sage: t.__repr__() |
395 | | 'The ring pointer 0x0' |
396 | | """ |
397 | | return 'The ring pointer '+hex(self.__hash__()) |
398 | | |
399 | | def __cmp__(ring_wrapper_Py left, ring_wrapper_Py right): |
400 | | """ |
401 | | Compare ``left`` and ``right`` so that instances can be used as dictionary keys. |
402 | | |
403 | | INPUT: |
404 | | |
405 | | - ``right`` -- a :class:`ring_wrapper_Py` |
406 | | |
407 | | OUTPUT: |
408 | | |
409 | | -1, 0, or +1 depending on whether ``left`` and ``right`` are |
410 | | less than, equal, or greather than. |
411 | | |
412 | | EXAMPLES:: |
413 | | |
414 | | sage: from sage.libs.singular.ring import ring_wrapper_Py |
415 | | sage: t = ring_wrapper_Py() |
416 | | sage: t.__cmp__(t) |
417 | | 0 |
418 | | """ |
419 | | if left._ring < right._ring: |
420 | | return -1 |
421 | | if left._ring > right._ring: |
422 | | return +1 |
423 | | return 0 |
424 | | |
425 | | |
426 | | cdef wrap_ring(ring* R): |
427 | | """ |
428 | | Wrap a C ring pointer into a Python object. |
429 | | |
430 | | INPUT: |
431 | | |
432 | | - ``R`` -- a singular ring (a C datastructure). |
433 | | |
434 | | OUTPUT: |
435 | | |
436 | | A Python object :class:`ring_wrapper_Py` wrapping the C pointer. |
437 | | """ |
438 | | cdef ring_wrapper_Py W = ring_wrapper_Py() |
439 | | W._ring = R |
440 | | return W |
441 | | |
442 | | |