Math::...Custom(3pm)

πŸ’– Math::Symbolic::Custom β€” it's giving aggregate class for tree tests and transformations πŸ’–

okay bestie, this is Math::...Custom(3pm) from the User Contributed Perl Documentation, and honestly? it's a whole vibe. let's get into it πŸ¦‹


✨ SYNOPSIS ✨

no cap, here's how you actually do the thing:

  # Extending the class:
  package Math::Symbolic::Custom::MyTransformations;
  use Math::Symbolic::Custom::Base;
  BEGIN {*import = \&Math::Symbolic::Custom::Base::aggregate_import}

  our $Aggregate_Export = [qw/apply_transformation1 .../];
  sub apply_transformation1 {
     # ...
  }
  # ...

  # Using the custom class:
  use Math::Symbolic;
  use Math::Symbolic::Custom::MyTransformations;

  # later...
  $tree->apply_transformation1();
  $tree->mod_transformation2();
  die unless $tree->is_type1();
  die unless $tree->test_condition1();
  die if $tree->contains_something1();
  print $tree->to_latex();

look at her go πŸ˜­πŸ’…


πŸ”₯ DESCRIPTION πŸ”₯

okay so. Math::Symbolic::Custom is the aggregate class β€” the group chat, if you will β€” for every custom modification, transformation, testing and output extension for Math::Symbolic trees. she collects them all, she holds them all, she's the main character fr fr.

some default transformations and tests are already implemented in the Math::Symbolic::Custom::DefaultMods and Math::Symbolic::Custom::DefaultTests packages, and the default output routines live in Math::Symbolic::Custom::DefaultDumpers β€” and guess what bestie, those get automatically loaded by the Math::Symbolic::Custom class. no manual labor required, slay ✨

also, Math::Symbolic::Custom imports all constants from Math::Symbolic::ExportConstants. iconic behaviour honestly.

🌸 EXPORT 🌸

None by default. nope, nothing, nada. you gotta ask for it, bestie πŸŽ€


πŸ¦‹ EXTENDING THE MODULE πŸ¦‹

want to make this whole thing even more powerful? obsessed. to extend the functionality of Math::Symbolic, you have to go through the following steps (also peep the synopsis up in this document, it's there for you):

  • Choose an appropriate namespace in the Math::Symbolic::Custom::* hierarchy β€” or, if you desparately wish (their word, not mine), somewhere else. your call, but the hierarchy is lowkey the move.
  • Create a new module (probably using h2xs -AX MODULENAME) and drop the following lines of code in it:
    # To make sure we're cooperating with Math::Symbolic's idea of
    # method delegation.
    use Math::Symbolic::Custom::Base;
    BEGIN {*import = \&Math::Symbolic::Custom::Base::aggregate_import}

    our $Aggregate_Export = [
      # Put the list of method names to be exported.
    /];
  • Think well about the naming of your exported methods. answer these questions, bestie, for real:
    • Does the name start with 'is_', 'test_', 'mod_', 'apply_', 'contains_', or 'to_'? If not, find a suitable name that does. πŸ‘‘
    • Does the name clash with any of the methods exported by Math::Symbolic::Custom::DefaultTests, Math::Symbolic::Custom::DefaultMods, or Math::Symbolic::Custom::DefaultDumpers? If so, please consider choosing a different name. no one wants that kind of drama πŸ™ˆ
    • Does the name map to the idea behind the method prefix ('is_', ...)? Only methods starting with one of the prefixes listed above can be delegated. Any others will never be called. πŸ’€ The idea behind delegating methods with several prefixes is to provide for a reasonable choice for naming methods.
      • 'is_' and 'contains_' are meant to be used for accurate tests like "is_constant".
      • 'test_' is meant for all tests that either make use of heuristics or can't be fitted into either 'is_' or 'contains_'.
      • The prefixes 'mod_' and 'apply_' are meant for use with methods that modify the Math::Symbolic tree.
      • Finally, the prefix 'to_' is meant to be used with conversion and output methods like 'to_latex' or 'to_string'. (Though as of version 0.122, to_string is implemented in the core Math::Symbolic modules. just so you know πŸ’…)
  • Make sure you document exactly what your methods do. Do they modify the Math::Symbolic tree in-place, or do they clone using the new() constructor and return a copy? Make sure you mention the behaviour in the docs. your future self will thank you 🫢
  • Consider packaging your extensions as a CPAN distribution to help others in their development with Math::Symbolic. If you think the extensions are generic enough to be a worthwhile addition to the core distribution, try sending your extensions to the Math::Symbolic developers mailing list instead. sharing is caring, bestie 🌈
  • Load your extension module after loading the Math::Symbolic module. order matters, periodt.
  • Start using your custom enhancements as methods to the Math::Symbolic trees (any term types). go off ✨
  • Send bug reports and feedback to the Math::Symbolic support mailing list. πŸ›

πŸ’œ AUTHOR πŸ’œ

Please send feedback, bug reports, and support requests to the Math::Symbolic support mailing list: math-symbolic-support at lists dot sourceforge dot net. Please consider letting us know how you use Math::Symbolic. Thank you. 🫢

If you're interested in helping with the development or extending the module's functionality, please contact the developers' mailing list: math-symbolic-develop at lists dot sourceforge dot net.

List of contributors β€” the icons, the legends, the main characters:

  Steffen MΓΌller, symbolic-module at steffen-mueller dot net
  Stray Toaster, mwk at users dot sourceforge dot net
  Oliver EbenhΓΆh

🌈 SEE ALSO 🌈

New versions of this module can be found on http://steffen-mueller.net or CPAN. The module development takes place on Sourceforge at http://sourceforge.net/projects/math-symbolic/

  • Math::Symbolic::Custom::Base
  • Math::Symbolic::Custom::DefaultTests
  • Math::Symbolic::Custom::DefaultMods
  • Math::Symbolic::Custom::DefaultDumpers
  • Math::Symbolic

and of course the big one herself: Math::Symbolic πŸ‘‘


k that's the whole page bestie, no notes, she ate πŸ’…βœ¨ This one's running on <pink>perl v5.40.0</pink> and was last touched on <pink>2024-09-16</pink> β€” love that for her. bye bestie, go write some transformations πŸ¦‹πŸ’–

πŸ“¦ where this page comes from