On Sun, Jun 29, 2008 at 2:16 PM, Kirill Smelkov
<[EMAIL PROTECTED]> wrote:
>
> All,
>
> On Sat, Jun 28, 2008 at 12:49:44PM +0200, Ondrej Certik wrote:
>> Sorry for top posting, writing from a cell phone. I think we need to
>> implement all printing ways we mentioned in this thread, probably in
>> the Printer class just like pretty printing or latex. Then we will
>> just call one in Basic.__str__ and another in Basic.__repr__ and
>> remove all other str and repr methods. We can of course discuss which
>> one to call from where, but then we'll be just discussing a change of
>> exactly one line of code.  As to other things, I agree with Fredrik.
>> Fredrik, will you come to euroscipy or scipy2008, so that we can fix
>> this together? It be awesome. :) All students here, please apply for
>> sponsorship to scipy2008, so that enthought has some good students to
>> choose from and that we can hack on sympy at Caltech.:) Ondrej
>>
>> On 6/27/08, Kirill Smelkov <[EMAIL PROTECTED]> wrote:
>> >
>> > On Fri, Jun 27, 2008 at 11:16:18PM +0200, Fredrik Johansson wrote:
>> >>
>> >> On Fri, Jun 27, 2008 at 10:56 PM, Kirill Smelkov
>> >> <[EMAIL PROTECTED]> wrote:
>> >>
>> >> > I quote http://docs.python.org/ref/customization.html#l2h-183
>> >> >
>> >> > __repr__(self):
>> >> >
>> >> >  Called by the repr() built-in function and by string conversions
>> >> > (reverse
>> >> >  quotes) to compute the ``official'' string representation of an object.
>> >> > If at
>> >> >  all possible, this should look like a valid Python expression that
>> >> > could be
>> >> >  used to recreate an object with the same value (given an appropriate
>> >> >  environment). If this is not possible, a string of the form "<...some
>> >> > useful
>> >> >  description...>" should be returned. The return value must be a string
>> >> > object.
>> >> >  If a class defines __repr__() but not __str__(), then __repr__() is
>> >> > also used
>> >> >  when an ``informal'' string representation of instances of that class
>> >> > is
>> >> >  required.
>> >>
>> >> Note "given an appropriate environment". The appropriate environment
>> >> is use within SymPy so I think it is actually sufficient if
>> >> sympify(repr(x)) == x holds, sympify taking the role of eval. It is
>> >> fine in my opinion if repr displays rationals as 2/3, etc.
>> >>
>> >> >  This is typically used for debugging, so it is important that the
>> >> >  representation is information-rich and unambiguous.
>> >> >
>> >> >
>> >> > So, say about Symbol('x') -> 'x' -- symbols could be Dummy, Temporary,
>> >> > they
>> >> > could have non-default assumption, etc.
>> >>
>> >> Yes, and this is something I have pointed out before. It is very
>> >> problematic that expressions can have "hidden" properties, that don't
>> >> show up in the output of either repr() or str(). My suggested solution
>> >> is to remove assumptions from expressions and get rid of
>> >> Dummy/Temporary/Wild, just having symbols.
>> >
>> > Why woudn't str(expr) serve for this?
>> >
>> > Guys, you are just forcing someone to invent another pairs of methods
>> > for which repr/__repr__ were originally invented for.
>> >
>> > If repr is not that informative there will be some point in time, where
>> > this information would be needed, and one (probably me) will have to
>> > write say debug/__debug__, but why can't we have this sort of output
>> > right from repr? What are cons of this? My point is that there is
>> > str(expr) and also we can always use sympy.interactive and ipython.
>
> Ok, after a bit of thinking, and good idea from Fredrik about
> "appropriate context" in repr description, here is what I propose:
>
> pprint(expr) -- nice looking 2D pretty-printed formula
>
> str(expr)    -- if possible nice loocking 1D formula, and
>
>                sympify(str(expr)) == expr      invariant holds
>
>
> repr(expr)   -- internal representation of expr with class names and
>                other details, and
>
>                eval(repr(expr))   == expr      invariant holds
>
>
> Sounds reasonable?

Sounds ok to me. But as I said, all printing ways should be really
easy to access and also very easy to switch, ideally just one line of
code in Basic.__repr__().

Ondrej

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sympy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to