VPlants Lpy documentation

Module description

Overview

L-systems were conceived as a mathematical framework for modeling growth of plants. L-Py is a simulation software that mixes L-systems construction with the Python high-level modeling language. In addition to this software module, an integrated visual development environment has been developed that facilitates the creation of plant models. In particular, easy to use optimization tools have been integrated. Thanks to Python and its modular approach, this framework makes it possible to integrate a variety of tools defined in different modeling context, in particular tools from the OpenAlea platform. Additionally, it can be integrated as a simple growth simulation module into more complex computational pipelines.

Documentation

  • A PDF version of VPlants.Lpy documentation is available.

See also

More documentation can be found on the openalea wiki.

Authors

Authors: Frédéric Boudon

License

VPlants.Lpy is released under a Cecill-C License.

Note

Cecill-C license is a LGPL compatible license.

ChangeLog

July 24th 2009: version 1.4.0 (rev 6689):

  • Introduce Lsystem::Debugger
  • Introduce first ui of a Lsystem Debugger.
  • fix bug with animation when resuming (avoid reloading text)

July 17th 2009: version 1.3.0 (rev 6635):

  • Introduce static rules
  • introduce structures PatternModule and PatternString
  • add parametric production (to avoid use of python list)
  • add optimization level option
  • add not named variable to avoid useless arg value retrieval
  • add heuristic to find static rule and not named variable
  • add RuleMap to avoid useless test
  • Introduce compilation with Cython
  • Introduce compilation with python -OO
  • add possibility to store arg into a vector instead of creating a python list when retrieving arg.
  • enable switching order of simulation in tab
  • fix bug with first view computation in animation
  • fix bug with query module value assignment
  • allow lazy copy of parameters
  • add examples/tutorial/models
  • Regular Expression in strict predecessor
  • introduce or module to alternative matching
  • add possibility to retrieve directly module
  • add possibility to name parameters of module and access them as member of the module
  • make particular test for matching with module any (or *)
  • improve iterator
  • check index when accessing module parameter. Throw exception if required.
  • allow produce None to produce empty string
  • fix bug with selection
  • fix bug updateNamespace function of LsysContext.
  • fix bug with PyQt/Qt4.5

May 30th 2009: version 1.2.0 (rev 6470):

  • Introduce option early return when no matching
  • raise error/warning when detecting # smb
  • fix bug with alias
  • Introduce filtering on parameter value
  • Introduce Repeated Expression
  • getVarNb function added
  • Introduce Category of Module
  • Introduce Tropism
  • Introduce SetContour of GeneralizedCylinder
  • Introduce production of new(name) and produce of A(*arg)
  • Introduce GetIterator on some part of the structure

March 17th 2009: version 1.1.0 (rev 6096):

  • Compatibility with PlantGL : RefCountPtr/pgl_hash_map/…
  • Compatibility with OpenAlea : update nodes
  • Introduce MatchingEngine
  • add StringMatchingMethod
  • Introduce multiscale matching with MScaleAxialTree and MLevelAxialTree
  • use template method for matching
  • Introduce ModuleVTable to add property to module class
  • Introduce scale property
  • simplify some wrapping code
  • fix bug with context activation

October 8th 2008: version 1.0.0 (rev 5581):

  • small bug fix mainly on MacOSX
  • improve packaging

September 11th 2008: version 1.0.0 release candidate 3 (rev 5529):

  • split tool bar into 2.
  • add Save All feature.
  • fix small bug with Lsystem initialisation.
  • fix bug with text encoding and SyntaxHighlighter.
  • fix bug with path on compile_ui rc generation.
  • fix bug with SyntaxError. Treat them as special case.
  • add arguments to EndEach.
  • correct bugs with str and repr on AxialTree.
  • make saveImage re definable.
  • simplify plot redefinition api. A plotter object can be pass.

September 4th 2008: version 1.0.0 release candidate 2 (rev 5469):

  • fix bug with signal valueChanged() of material editor.
  • fix bug with import of local python file.
  • compatibility with py2exe.

August 13th 2008: version 1.0.0 release candidate 1 (rev 5408):

  • fix small text encoding bugs.
  • release candidate version.

August 12th 2008: version 0.20.2 (rev 5401):

  • introduce LpyParsing namespace.
  • introduce set of function and member of LpyParsing to check format version compatibility and support.
  • format version test in parsing.
  • simple test of gui.
  • gui stream redirection improvement.
  • change variable tree to lstring into python shell of gui.
  • update documentation.
  • add documentation.getWikiSpecification.

August 11th 2008: version 0.20.1 (rev 5397):

  • now load initialisation code before lpy code in Lsystem.set. Add a test for this.
  • fix bugs with add/remove tab and comment in code editor. add icons to the buttons.
  • add possibility to enable/disable view of tab in code editor.
  • add option to see text below button of tool bar.
  • add automatic test of examples of share/.

August 8th 2008: version 0.20.0 (rev 5394):

  • text editor improvement: * add text zooming capability. * font and size selection. * tab space replacement and tab size control.
  • file monitoring.
  • tool bar style selection.
  • preference dialog.

August 7th 2008: version 0.19.2 (rev 5390):

  • automatic reload of last opened document.
  • add new rule to syntax highlighting: * function names are in magenta. * strings are in grey. * tabs and spaces of the begining of a line are marked in different greys to prevent mixing. * operators and delimiters are in dark blue. * number are in red.
  • make smaller border in the gui.
  • fix bug with closing application and saving documents.
  • set simulation in modified state when changing options.

August 6th 2008: version 0.19.1 (rev 5388):

  • add module undeclaration and query module declaration features.
  • fix bug with parsing and comments.
  • improve lines correspondence in lpy translation.
  • syntax error highlight in editor.
  • fix bug with project code mess up when several project are opened in Gui.

August 5th 2008: version 0.19.0 (rev 5385):

  • change GUI interface to have dock widgets and multiple documents editing.
  • remove modules G and g.
  • remove None module from doc.

July 28th 2008: version 0.18.1 (rev 5351):

  • replace PYLSYS prefix by LPY.
  • remove StringInterpreter class.
  • add documentation to predefined modules.

July 24th 2008: version 0.18.0 (rev 5338):

  • Rename project as lpy. Change file and dir names accordingly.
  • fix bug with produce *
  • separate matching from application in LsysRule (now has match and applyTo functions).
  • fix bug with LsysOption.isToDefault.
  • clean examples of share/.

July 21th 2008: version 0.17.2 (rev 5278):

  • Fix bug with GlobalContext. Add a __local_namespace to contain LsysRule code.
  • Add memory tracker (TRACKER_ENABLED to activate) with memory report on stderr at the end.
  • LsysRule : * change interface to avoid exception raise inside constructor. * function set from python automatically call compile by default.
  • create predefined modules into a separate cpp file.
  • Update code files header.

July 18th 2008: version 0.17.1 (rev 5269):

  • remove intermediate structure for turtle interpretation. Each predefined modules has a custom ModuleClass class.

July 10th 2008: version 0.17.0 (rev 5224):

  • add turtle interpretation as a function of each module class. for now, use intermediate structure.
  • fix bug with module matching mode.
  • add lineno to rules for error display.
  • improve parsing.
  • add simple tests on geometry of interpretation.

July 7th 2008: version 0.16.0 (rev 5200):

  • fix bugs:

    • in argument parsing of query module.
    • with *args variable name in LsysRule generated code.
    • with use of * module: first arg is always matched module name.
    • with left matching of rule in backward mode.
  • remove LsysContext from stack when deleted.

  • Lsystem object:

    • possibility to enabled or disabled (makeCurrent or done) its context.
    • print declared modules when print.
  • report query module and axialtree parsing code in lpy_parser.

  • ModuleClass are augmented with an active state. Allow to use always the same ModuleClass in different namespaces.

  • matching tests are a lot augmented.

July 2nd 2008: version 0.15.1 (rev 5178):

  • use declared module in rule predecessors.

July 2nd 2008: version 0.15.0 (rev 5171):

  • add module declaration:
    • introduce ModuleClass and ModuleClassTable.
    • look for longest name when parsing Lstring.
    • LsysContext has their own moduleclass namespace.
  • add sceneInterpretation in Lsystem to get homomorphism resulting Scene.
  • process line starting by # as comment line in production blocks of lpy code.

June 17th 2008: version 0.14.1 (rev 5119):

  • Fix bug with space in Lsystem string.
  • Fix bug with window specific end line in Lsystem code.
  • Fix bug with nproduce in Lsystem rules.
  • Add tests normalized with nosetests convention.
  • Fix bugs with LsysOption template and gcc
  • Redefined len cpp function in lsysrule.cpp now compatible with all boost.python version.

June 12th 2008: version 0.14.0 (rev 5086):

  • Define LsysOptions class and mechanism to simply add an option, its possible value and corresponding slots.
  • Add an LsysOptions to LsysContext.
  • Graphic edition of the options of LsysContext.
  • Avoid copying of LsysRule when iterating in Lsystem.
  • Add function getIterationNb.
  • Add control on module matching : Simple, with * module or with also *args parameters.

June 4th 2008: version 0.13.1 (rev 4996):

  • fix bug with animate number of iterations.
  • fix bugs with multi-threading and visual shell. Introduce for this sources for new Shell classes copied from visualea and modified them thus that text writing is protected from concurrent access.

May 30th 2008: version 0.13.0 (rev 4983):

  • Lsystem interface update:

    • function run disappear.

    • function iterate has an extra argument starting iteration number.

    • function interpret is available and take as arg a Turtle.

    • function plot do an interpret and a plot of the resulting pgl scene.

    • Fix bug with homomorphism.

    • Interpretation before iteration :

      • can be avoid with an extra arg to iterate.
      • done with interpret.
  • LsysRule.apply is now const. python code should be compile before. Else an exception is raised.

  • LsysContext updated:

    • readAxiom disappear.
  • parsing :

    • Related functions regrouped into a new file named lpy_``parser``.
    • l2py function renamed lstring2py.
  • StringInterpreter has now possibility to change of Turtle.

  • GUI:

    • First call of Step produces now the axiom.

May 23th 2008: version 0.12.2 (rev 4924):

  • change error for homomorphism rule with context as warning
  • add possibility to give a function to retrieve selection (similarly to plot)

May 22th 2008: version 0.12.1 (rev 4920):

  • add recursive application of rules for homomorphism and turtle interpretation.
  • add selection and insertion by a X module
  • correct bug in parsing with line starting by ‘e’

May 21th 2008: version 0.12.0 (rev 4919):

  • StringMatching structure to keep id matching after rule application

May 15th 2008: version 0.11.0 (rev 4902):

  • add groups of rules in lsystems.
  • small bug fix in post_install script

May 15th 2008: version 0.10.1 (rev 4895):

  • prevent multiple access of lsystem even from same thread. Resolve warning from //April 29th 2008//.

May 15th 2008: version 0.10.0 (rev 4893):

  • animation_timestep is a property of context that can be changed during animation and is taken into account.
  • animation_timestep is now saved into lpy file.
  • add the module @g in string interpreter to plot custom plantgl geometric symbol.
  • add the module _ in string interpreter to change width. Will replace module # in the future.
  • add a parameter to endBracket and beginBracket of AxialTree to define if current pos is [ and ] respectively if search should start before or after.
  • fix matching bug for A[B[C]D]D with A > [B]D.

May 14th 2008: version 0.9.0 (rev 4892):

  • process lpy file into one py file to have exact correspondence of lines for exceptions.
  • axiom, maximum depths and derivation length are now converted as python variables which are imported after.
  • introduce nproduce statement.
  • error are improved to allow syntax error, warning and syntax warning- when parsing lpy file, explicit exceptions for lpy special command error.
  • code editor highlight line in case of error at execution.
  • filename, decompositionMaxDepth and homomorphismMaxDepth are now properties of a Lsystem.

May 13th 2008: version 0.8.0 (rev 4889):

  • Merge kernel and gui. Gui is now a submodule of kernel.

May 13th 2008: develop version 0.5.2 of Gui (rev 4885):

  • add case sensitivity and whole word options into find feature
  • add replace and replaceAll feature
  • add automatic tabulation when enter is pressed (take into account if previous line ends by a semicolon)
  • tabulation is done with LsysCodeEditor.indentation which can be set to '\t' or ' '*n

April 29th 2008: develop version:

  • A mutex now protect access to Lsystem object from multiple thread. Add isRunning function to test whether it currently perform any action. Warning: It does not prevent multiple access from same thread (to allow embedded call of protected action e.g. run calling iterate, …).

April 29th 2008: develop version:

  • Create default lsystem execution context containing __builtins__ and openalea.pylsystems.* . Accessible from LsysContext.defaultContext(). Have _main_ context accessible using LsysContext.globalContext().

April 29th 2008: release version:

  • Now version is controlled by the hexadecimal number __version__ in pylsystem.__version__. Some variables such as LPY_VERSION_[STR|MAJOR|MINOR] are created. Similar things for LPYGUI_VERSION_*. This number is directly imported into setup.py to create egg. The rev is added in the *_VERSION_STR. Warning: the __version__ file has to be committed to obtain the last revision version value.