On Wed, Aug 27, 2014 at 8:10 AM, Alan Bromborsky <[email protected]> wrote:
> I looked at the TableForm class in sympy/printing/tabelform.py and have > several questions relating to _latex(self,printer). > > 1. In order to handle text and latex printing in a unified manner is > _sympystr(self, p) the text equivalent of _latex(self,printer) > . > Yes http://docs.sympy.org/latest/modules/printing.html#sympy.printing.str.StrPrinter.printmethod > > 2. I wish to have both a latex and string printer for my Dop (differential > operator) class. Currently I have custom printers GaPrinter for > text and GaLatexPrinter for latex. Members of my Dop class is > Dop_latex_str(self) which generates the latex string for a Dop and > Dop_str(self) which generates the text string for a Dop. In the > GaLatexPrinter class I have the member > > def _print_Dop(self, expr): > return expr.Dop_latex_str() > > and in the GaPrinter class the member > > def _print_Dop(self, expr): > return expr.Dop_str() > > Should I redefine Dop_latex_str(self) as _latex(self,printer) and > Dop_str(self) as _sympystr(self, printer)? > There are two ways to do it. You have a custom printer, and define methods on the class, or you define special methods on your class itself. There are advantages and disadvantages to each way, depending on how you modularize your code. There's no need to do both, though. For example, if you want to change the way a class that you don't control prints, you should create a custom printer class. If you want to customize the way your own object prints with an existing printer without editing that printer, you should use the method on your class. > > 3. If I define _latex(self,printer) and _sympystr(self, printer) do I > need _print_Dop(self, expr) in the GaLatexPrinter and GaPrinter classes? > No. In fact, the methods on the classes will take precedence over the methods on the printer ( http://docs.sympy.org/latest/modules/printing.html#module-sympy.printing.printer ). > > 4. Are the only members I need in the custom printer classes the ones that > are overriding the ones in the default printer classes such as > _print_Derivative(self, expr) and _print_Function(self, expr)? > If you don't want to change a method you don't need to override it. Aaron Meurer > > > On 08/26/2014 08:21 PM, Jason Moore wrote: > > Yes, one way to have latex printing is to add _latex method. Then maybe > it would be worth add this line to _can_print_latex: > > > https://github.com/sympy/sympy/blob/master/sympy/interactive/printing.py#L105 > > Then anything with the _latex printing method will print. > > > Jason > moorepants.info > +01 530-601-9791 > > > On Tue, Aug 26, 2014 at 8:20 PM, Alan Bromborsky <[email protected]> > wrote: > >> Are you saying if my class is Dop I should have >> >> class Dop(object): >> >> def _latex(self,GaLatexPrinter): >> etc. >> >> where GaLatexPrinter is my custom latex printer that has member >> _print_Dop. >> >> >> >> On 08/26/2014 08:09 PM, Aaron Meurer wrote: >> >> You can define methods on the class, depending on what printer you want >> to override. For the LaTeX printer, it's _latex. The signature should be >> _latex(self, printer), and it should use printer to recursively print any >> subexpressions. See >> http://docs.sympy.org/latest/modules/printing.html#module-sympy.printing.latex >> (the printmethod attribute), and search the SymPy codebase for some >> examples. >> >> Aaron Meurer >> >> >> On Tue, Aug 26, 2014 at 7:07 PM, Alan Bromborsky <[email protected]> >> wrote: >> >>> Can you suggest how I could override the function without modifying >>> interactive/printing.py? >>> >>> >>> On 08/26/2014 07:38 PM, Jason Moore wrote: >>> >>> Maybe you need to override this function: >>> >>> >>> https://github.com/sympy/sympy/blob/master/sympy/interactive/printing.py#L90 >>> >>> Notice how some odd classes that don't fit the sympy standards have >>> special cases. Try adding your class to that list and see if it works. >>> >>> >>> Jason >>> moorepants.info >>> +01 530-601-9791 >>> >>> >>> On Tue, Aug 26, 2014 at 6:57 PM, Alan Bromborsky <[email protected]> >>> wrote: >>> >>>> I am trying to print a list of instances of a custom class. The input >>>> is - >>>> >>>> print (o3d.grad, o3d.grad) >>>> >>>> the output is (custom latex printer) >>>> >>>> [image: $$ (e_{x} \frac{\partial}{\partial x} + e_{y} >>>> \frac{\partial}{\partial y} + e_{z} \frac{\partial}{\partial z}, e_{x} >>>> \frac{\partial}{\partial x} + e_{y} \frac{\partial}{\partial y} + e_{z} >>>> \frac{\partial}{\partial z}) $$] >>>> >>>> however in ipyrhon notebook I input >>>> >>>> (o3d.grad, o3d.grad) >>>> >>>> I get out >>>> >>>> (e_{x} \frac{\partial}{\partial x} + e_{y} \frac{\partial}{\partial y} + >>>> e_{z} \frac{\partial}{\partial z}, >>>> e_{x} \frac{\partial}{\partial x} + e_{y} \frac{\partial}{\partial y} + >>>> e_{z} \frac{\partial}{\partial z}) >>>> >>>> Also the standard latex tuple and list printer is not using \left ( >>>> \right and \left [ \right ) to enclose >>>> the tuple or list. How can I write a custom latex tuple and list >>>> printer that will also work in ipython notebook. >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "sympy" 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 http://groups.google.com/group/sympy. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/sympy/53FD10D1.6080309%40verizon.net >>>> <https://groups.google.com/d/msgid/sympy/53FD10D1.6080309%40verizon.net?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" 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 http://groups.google.com/group/sympy. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/CAP7f1AgriAFv0KoeL1ePt0n%3DEEjvpHYE6_2CtwoiX7%2B7%3Dp7hbg%40mail.gmail.com >>> <https://groups.google.com/d/msgid/sympy/CAP7f1AgriAFv0KoeL1ePt0n%3DEEjvpHYE6_2CtwoiX7%2B7%3Dp7hbg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" 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 http://groups.google.com/group/sympy. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/53FD212F.6090802%40verizon.net >>> <https://groups.google.com/d/msgid/sympy/53FD212F.6090802%40verizon.net?utm_medium=email&utm_source=footer>. >>> >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" 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 http://groups.google.com/group/sympy. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sympy/CAKgW%3D6KkuzhJY-s5AGkjJ0DyXk6F3XC4QNkKwMNcpO66ecic0A%40mail.gmail.com >> <https://groups.google.com/d/msgid/sympy/CAKgW%3D6KkuzhJY-s5AGkjJ0DyXk6F3XC4QNkKwMNcpO66ecic0A%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sympy" 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 http://groups.google.com/group/sympy. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sympy/53FD244E.7050900%40verizon.net >> <https://groups.google.com/d/msgid/sympy/53FD244E.7050900%40verizon.net?utm_medium=email&utm_source=footer>. >> >> >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "sympy" 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 http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/CAP7f1AjYExHn0B_D6Rw_1y4cS%3DkhVf9Lkv2U8D-_4t0r8Wf%2Bdw%40mail.gmail.com > <https://groups.google.com/d/msgid/sympy/CAP7f1AjYExHn0B_D6Rw_1y4cS%3DkhVf9Lkv2U8D-_4t0r8Wf%2Bdw%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "sympy" 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 http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/53FDD8D0.7000107%40verizon.net > <https://groups.google.com/d/msgid/sympy/53FDD8D0.7000107%40verizon.net?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" 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 http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6K9Sx2cLEyDxYJ%2BzRaoThtNpN0nNbx-7e-V-DKKv5mh3A%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
