On Friday, August 19, 2016 at 9:45:12 AM UTC-7, Bill Page wrote:
>
> On the contrary after reading the code for ExpressionNice carefully it
> is clear that it does not do post-processing as such
class ExpressionNice(Expression):
....
def _repr_(self):
....
d = self._parent._repr_element_(self)
....
d = d.replace(o, res)
....
return d
It's manipulating strings. Unless this code is only used on very simple
expressions, people will start to find it's making false string
replacements at some point. Anyway, we've found the proper way of doing
this (thanks for digging that up out of Pynac!) and I'm sure that even if
ExpressionNice is still felt to be needed, the authors will prefer to
generate their representations in the same way.
> My main question is whether we should try to replicate what is done by
> ExpressionNice and thereby render it obsolete or should we try to
> reach some other compromise?
>
Well, as is pointed out in the ExpressionNice documentation already, it
produces some representations that just don't express the meaning of the
underlying expression, so we definitely don't want to replicate that.
Personally, I'm comfortable with the basic representation choices made in
https://trac.sagemath.org/ticket/21286 . I'd be hesitant to go any further.
Using leibnitz notation in general requires temporary variables, e.g.
D[0,1](f)(x+y,x-y) = diff(f(t1,t2),t1,t2) |_[t1=x+y,t2=x-y]
I don't think the RHS is more readable than the LHS after the small hurdle
of understanding what D[0,1] means.
This leaves general printing style. The latex side of things here is
simple. D[0,1](f)(x,y) should just be typeset as
\frac{\partial^2}{\partial x\partial y} f(x,y)
(we can do \partial x\partial x -> (\partial x)^2 or more ambiguously
\partial x^2 )
If the function is univariate we could replace \partial with "d".
I'd be a little hesitant to use this notation in "repr" because the use of
"d" as a variable is not so far fetched and would lead to a horrible
representation
repr( diff(f(d1,d2),d1,d2) ) = "(d^2/dd1 dd2)f(d1,d2)"
and in general it leads to an uncomfortable number of parentheses in
unfortunate places. So I'd probably gravitate towards producing "parsable"
representations, i.e., just
diff(f(d1,d2),d1,d2)
perhaps not elegant, but certainly understandable and unsurprising, since
it's what the user probably typed in.
[we could check the symbol names for the presence of "d"s, but that would
probably lead to code that's trying to be too smart for its own good. It
would still leave us with an uncomfortable number of parentheses, since the
operator (written as a fraction) would need parentheses to be delimited
properly]
First and second derivatives of univariate functions could easily be
printed as f'(x) and f''(x) [or perhaps f"(x) ]. It does make it more
tricky to cut/paste these into programming environments, though, because
the quotes might need quoting.
I think this covers the most important cases. Comments welcome on what
styles peope would prefer.
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.