Hi,

I ran across the following behavior in sage-3.4.1 and sage-4.0 (I don't
have 4.0.1 yet), and I find it fairly disturbing.

    sage: d = {'a': 1}         # Create some object
    sage: d
    {'a': 1}
    sage: type(d) = type({})   # Attempt to check the type but
                               #  foolishly use = instead of ==

    TypeError: cannot coerce type '<type 'type'>' into a
    SymbolicExpression.        # An error is expected

    sage: d                    # But now my data is gone!
    d
    sage: type(d)              # Replaced by a symbolic variable
    <class 'sage.calculus.calculus.SymbolicVariable'>

This is not 'dictionary' specific; the same problem of data loss occurs
with any object at all.

    sage: type(Integer) = type(2)  # Admittedly a silly thing to do...
    TypeError: ...
    sage: 1
    DeprecationWarning: Substitution using function-call syntax and
    unnamed arguments is deprecated and will be removed from a future
    release of Sage; you can use named arguments instead, like
    EXPR(x=..., y=...)


My feeling is that coercion is being a little too aggressive here.  I
understand that coercion sees the '=' and tries its best to make sense
out of the expression, but I would hope that when it fails, nothing in
the expression would be changed.

Best,
Jason Bandlow


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to