Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#1827 closed defect (fixed)

[fixed, awaits confirmation] plot3d/transform.pyx test failure

Reported by: gfurnish Owned by: failure
Priority: critical Milestone: sage-2.10
Component: doctest coverage Keywords:
Cc: Merged in:
Authors: Reviewers:
Report Upstream: Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by mabshoff)

Failure on make check

sage -t  devel/sage-main/sage/plot/plot3d/transform.pyx     [?1034h**********************************************************************
File "transform.pyx", line 213:
    sage: m
Expected:
    [                                                                                                                                        (x^2*z^2 - (cos(theta)*x^2 - cos(theta))*z^2)/z^2                                                                                                          (-sqrt(-z^2 - x^2 + 1)*(cos(theta)*x*abs(z) - x*abs(z)) - sin(theta)*z^2)/abs(z)                                                                                                (-cos(theta)*x*z^2*abs(z) + x*z^2*abs(z) + sin(theta)*z^2*sqrt(-z^2 - x^2 + 1))/(z*abs(z))]
    [                                                                                                            (sin(theta)*z^2*abs(z) - sqrt(-z^2 - x^2 + 1)*(cos(theta)*x*z^2 - x*z^2))/z^2                                              ((-(x^2 + cos(theta) - 1)*z^2 - x^4 + 2*x^2 - 1)*abs(z) - (-cos(theta)*x^2*z^2 - cos(theta)*x^4 + cos(theta)*x^2)*abs(z))/((x^2 - 1)*abs(z)) (-sqrt(-z^2 - x^2 + 1)*(cos(theta)*x^2*z^2*abs(z) + (-x^2 - cos(theta) + 1)*z^2*abs(z)) + sin(theta)*x*z^4 - z^2*(sin(theta)*x*z^2 + sin(theta)*x^3 - sin(theta)*x))/((x^2 - 1)*z*abs(z))]
    [                                                                                                               (-sin(theta)*z*sqrt(-z^2 - x^2 + 1)*abs(z) - cos(theta)*x*z^3 + x*z^3)/z^2                                               (-sqrt(-z^2 - x^2 + 1)*(cos(theta)*x^2*z*abs(z) + (-x^2 - cos(theta) + 1)*z*abs(z)) - (sin(theta)*x - sin(theta)*x^3)*z)/((x^2 - 1)*abs(z))                                                                        (((x^2 + cos(theta) - 1)*z^2 + cos(theta)*x^2 - cos(theta))*abs(z) - cos(theta)*x^2*z^2*abs(z))/((x^2 - 1)*abs(z))]
Got:
    [                                                                                                                                                                                                              sage17*cos(theta)*sqrt(1 - x^2) + sage13*sage76                                                                                                                                                                               (sqrt(-z^2 - x^2 + 1)*(sage76*abs(z) - cos(theta)*x*z) - sin(theta)*z*abs(z))/z                                                                                                                                                                               (sin(theta)*sqrt(-z^2 - x^2 + 1)*abs(z) + sage76*z*abs(z) - cos(theta)*x*z^2)/z]
    [                                                                                                                 (sqrt(1 - x^2)*sqrt(-z^2 - x^2 + 1)*(sage17*cos(theta)*x*abs(z) + sage13*sage80*z) - sage17*sin(theta)*sqrt(1 - x^2)*z^2)/((x^2 - 1)*abs(z))                                          (-sqrt(1 - x^2)*((-cos(theta)*x^2*z^2 - cos(theta)*x^4 + cos(theta)*x^2)*abs(z) + cos(theta)*z^2*abs(z)) - ((sage80 - sage80*x^2)*z^2 - sage80*x^4 + 2*sage80*x^2 - sage80)*abs(z))/(sqrt(1 - x^2)*(x^2 - 1)*abs(z)) (-sqrt(-z^2 - x^2 + 1)*(sqrt(1 - x^2)*(cos(theta)*x^2*z^2*abs(z) - cos(theta)*z^2*abs(z)) + (sage80*x^2 - sage80)*z^2*abs(z)) - sqrt(1 - x^2)*(z^2*(sin(theta)*x*z^2 + sin(theta)*x^3 - sin(theta)*x) - sin(theta)*x*z^4))/(sqrt(1 - x^2)*(x^2 - 1)*z*abs(z))]
    [                                                                                                               (sqrt(1 - x^2)*(sage17*cos(theta)*x*z*abs(z) + sage13*sage80*z^2) + sage17*sin(theta)*sqrt(1 - x^2)*z*sqrt(-z^2 - x^2 + 1))/((x^2 - 1)*abs(z))                                                   (-sqrt(-z^2 - x^2 + 1)*(sqrt(1 - x^2)*(cos(theta)*x^2*z*abs(z) - cos(theta)*z*abs(z)) + (sage80*x^2 - sage80)*z*abs(z)) - sqrt(1 - x^2)*(sin(theta)*x - sin(theta)*x^3)*z)/(sqrt(1 - x^2)*(x^2 - 1)*abs(z))                                                                                       (sqrt(1 - x^2)*((cos(theta)*z^2 + cos(theta)*x^2 - cos(theta))*abs(z) - cos(theta)*x^2*z^2*abs(z)) + (sage80 - sage80*x^2)*z^2*abs(z))/(sqrt(1 - x^2)*(x^2 - 1)*abs(z))]
**********************************************************************

System is 64 bit gentoo, gcc 4.2.2

Attachments (1)

trac-1827.patch (6.0 KB) - added by was 14 years ago.
this should completely fix the problem. But I've only tested it on one 32-bit linux system. it needs more testing

Download all attachments as: .zip

Change History (7)

comment:1 Changed 14 years ago by mabshoff

  • Component changed from graphics to doctest
  • Description modified (diff)
  • Milestone changed from sage-2.10.1 to sage-2.10
  • Owner changed from was to failure
  • Priority changed from major to critical

Changed 14 years ago by was

this should completely fix the problem. But I've only tested it on one 32-bit linux system. it needs more testing

comment:2 Changed 14 years ago by mabshoff

  • Summary changed from plot3d/transform.pyx test failure to [fixed, awaits confirmation] plot3d/transform.pyx test failure

comment:3 Changed 14 years ago by robertwb

For _an_element_impl, it should return a very generic element. If it returns zero, then it may mess up the coercion model!

comment:4 Changed 14 years ago by mabshoff

Hi Robert,

can you provide a doctest that exposes the issue you describe?

Cheers,

Michael

comment:5 Changed 14 years ago by was

  • Resolution set to fixed
  • Status changed from new to closed

comment:6 Changed 14 years ago by robertwb

OK, I take this back.

It used to be that some multiplication code was written as

def _lmul_(self, other):
    if not other:
        return other
    ...

This would succeed when other was ANY type with bool(other) == False, and an_element was used to construct other to pass in and try it out (in the action detection code) which would cause it to succeed and this "valid" action would get cached (resulting in a error or segfault when a non-zero other was passed.

It now forces other to be an element of self.parent().base_ring(), which solves this problem.

Note: See TracTickets for help on using tickets.