Ask Your Question

Jonathan's profile - activity

2018-02-28 00:31:25 +0200 received badge  Student (source)
2018-02-26 12:22:45 +0200 commented answer Type error in matrix of differential forms

Thank you, it would be good to add this in the documentation of CoordinatePatch, etc. Also, the manifold implementation does not seem to support an algebra of differential forms (only a module) and seems a bit slower, but maybe I can get by using just exterior algebras over the symbolic ring...

2018-02-26 12:11:12 +0200 received badge  Scholar (source)
2018-02-22 13:56:02 +0200 asked a question Type error in matrix of differential forms

I'm having problems tracing the exact problem in my code: I have matrices of differential forms and at some point I get type errors.

Consider the following example:

class Test:
    def __init__(self):
        self.z = var('z')
        self.U = CoordinatePatch([self.z])
        self.D = DifferentialForms(self.U)
        self.d = self.D.gens()
        self.M = Matrix(self.D,2)

        print self.M
        self.M[0,0] = self.d[0]
        print self.M

        print (self.M.base_ring() is self.D)

The first instance works without error, from the second onward I get a type error:

┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 7.5.1, Release Date: 2017-01-15                   │
│ Type "notebook()" for the browser-based notebook interface.        │
│ Type "help()" for help.                                            │
└────────────────────────────────────────────────────────────────────┘
sage: load('bugtest.sage')
sage: Test()
[0 0]
[0 0]
[dz  0]
[ 0  0]
True
<__main__.Test instance at 0x1edc7cbd8>
sage: Test()
[0 0]
[0 0]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-d1e5fd9e553c> in <module>()
----> 1 Test()

<string> in __init__(self)

/Applications/sage-7.5.1/src/sage/matrix/matrix0.pyx in sage.matrix.matrix0.Matrix.__repr__ (/Applications/sage-7.5.1/src/build/cythonized/sage/matrix/matrix0.c:11464)()
   1664         """
   1665         if self._nrows < max_rows and self._ncols < max_cols:
-> 1666             return self.str()
   1667         if self.is_sparse():
   1668             s = 'sparse'

/Applications/sage-7.5.1/src/sage/matrix/matrix0.pyx in sage.matrix.matrix0.Matrix.str (/Applications/sage-7.5.1/src/build/cythonized/sage/matrix/matrix0.c:13504)()
   1876                 rep = rep_mapping.get(x)
   1877             else:
-> 1878                 rep = repr(x)
   1879             S.append(rep)
   1880 

/Applications/sage-7.5.1/src/sage/structure/sage_object.pyx in sage.structure.sage_object.SageObject.__repr__ (/Applications/sage-7.5.1/src/build/cythonized/sage/structure/sage_object.c:2691)()
    190             return str(type(self))
    191         else:
--> 192             result = repr_func()
    193             if isinstance(result, unicode):
    194                 # Py3 compatibility: allow _repr_ to return unicode

/Applications/sage-7.5.1/local/lib/python2.7/site-packages/sage/tensor/differential_form_element.pyc in _repr_(self)
   1006         format = DifferentialFormFormatter(self.parent().base_space())
   1007         output = [format.repr(comp, fun) \
-> 1008                       for (comp, fun) in self._components.items()]
   1009         return ' + '.join(output)
   1010 

/Applications/sage-7.5.1/local/lib/python2.7/site-packages/sage/tensor/differential_form_element.pyc in repr(self, comp, fun)
    161             [('d%r' % self._space.coordinate(c)) for c in comp])
    162 
--> 163         if fun == 1 and len(comp) > 0:
    164             # We have a non-trivial form whose component function is 1,
    165             # so we just return the formatted form part and ignore the 1.

/Applications/sage-7.5.1/src/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression.__nonzero__ (/Applications/sage-7.5.1/src/build/cythonized/sage/symbolic/expression.cpp:17020)()
   2574                 return self.operator()(self.lhs().pyobject(), self.rhs().pyobject())
   2575 
-> 2576             pynac_result = decide_relational(self._gobj)
   2577             if pynac_result == relational_undecidable:
   2578                 raise ValueError('undecidable relation: ' + repr(self))

/Applications/sage-7.5.1/src/sage/structure/element.pyx in sage.structure.element.Element.__add__ (/Applications/sage-7.5.1/src/build/cythonized/sage/structure/element.c:11198)()
   1234         # Left and right are Sage elements => use coercion model
   1235         if BOTH_ARE_ELEMENT(cl):
-> 1236             return coercion_model.bin_op(left, right, add)
   1237 
   1238         try:

/Applications/sage-7.5.1/src/sage/structure/coerce.pyx in sage.structure.coerce.CoercionModel_cache_maps.bin_op (/Applications/sage-7.5.1/src/build/cythonized/sage/structure/coerce.c:10496)()
   1105         # We should really include the underlying error.
   1106         # This causes so much headache.
-> 1107         raise bin_op_exception(op, x, y)
   1108 
   1109     cpdef canonical_coercion(self, x, y):

TypeError: unsupported operand parent(s) for '+': 'Algebra of differential forms in the variables z' and 'Integer Ring'

Maybe the symbolic variable is not "safe" inside a class?