Ptolemy II 7.0.1 Release Notes

Ptolemy II is a set of Java packages supporting heterogeneous, concurrent modeling and design. Its kernel package supports clustered hierarchical graphs, which are collections of entities and relations between those entities. Its actor package extends the kernel so that entities have functionality and can communicate via the relations. Its domains extend the actor package by imposing models of computation on the interaction between entities. Examples of models of computation include discrete-event systems, dataflow, process networks, synchronous/reactive systems, and communicating sequential processes.

Ptolemy II includes a number of support packages, such as
data, providing a type system, data encapsulation and an expression parser,
plot, providing visual display of data,
math, providing matrix and vector math and signal processing functions, and
graph, providing graph-theoretic manipulations.

The three volumes of the Ptolemy II Design Document describes the Ptolemy II design and the implementation of the Java classes.

The "Using Vergil" describes how to use Vergil.

Complete List of Domains in Ptolemy II

Platforms

The core of Ptolemy II 7.0.1 is 100% Java, so it should work on any platform that has JDK 1.5 or later.

We developed Ptolemy II 7.0.1 under Solaris 10 and Windows XP and with JDK1.5.0.0_14

Ptolemy II 5.0 will not compile under Java 1.3 because we use the java.lang.URI class, which is present only in Java 1.4 and later. JDK 1.5 or later is required so that these packages can use generics: backtrack, ptalon and others.

Ptolemy II has been compiled and run under IBM JDK 1.6.0. There are the following limitations under IBM JDK 1.6.0

  • The Copernicus code generator does not work.
  • Caltrop does not work.
  • The IBM JDK seems to return directory contents in a different order than the Sun JDK. Thus actor.lib.io.DirectoryListing might return elements in a different order.
  • Contents:

    Ptolemy II 7.0.1 Highlights

    SDF Code Generation

    The SDF Template based C code generator (Codegen) generates code for hierarchical Synchronous Dataflow (SDF), Finite State Machine (FSM) and Heterochronous Dataflow Domain (HDF) models.

    Codegen has the following new features:

    Code Generator Documentation

    References

    Codegen Demonstrations

    Some of the code generation demos might not work under Web Start because Web Start uses a JRE, not a JDK.

    Primary Codegen Developers: Gang Zhou, Man-kit Leung.

    Codegen Contributors: Christopher Brooks, Teale Fristoe, Edward A. Lee, Ye Zhou

     

    Ptalon

    Actor-oriented design is a common design strategy in embedded system design, where actors are concurrent components which communicate through ports by sending signals to one another. Such systems are frequently modeled with block diagrams, where the blocks represent systems and lines or arrows between blocks represent signals. Examples include Simulink, LabView, and VHDL/Verilog.

    A common problem in such environments is managing complexity, particularly when the designs become large. Most actor-oriented design environments allow hierarchy, or systems (blocks) which are composed of other systems (blocks). To take this a step further, we are developing the Ptalon programming language, which allows users to parameterize components with other components.

    We have developed a preliminary interpreter for the Ptalon language in the context of Ptolemy II, a general-purpose design environment for actor-oriented systems. We have also developed a mathematical framework for such languages, to help aid our understanding . We are currently investigating the resource management issues inherent in supporting large block-diagram models.

    References

    Ptalon Demonstrations

    Backtracking

    A backtracking facility enables the system to restore its old state. It has many applications in practice, and is especially important to high-performance distributed computation.

    In developing this sub-project, we highlight the following (increasing) list of criteria:

    Primary Developer: Thomas Huining Feng

    Backtracking Demonstrations

    The Continuous domain

    The Continuous Domain is a redesign of the Continuous Time (CT) domain with a rigorous semantics documented in the following papers:

    The continuous domain models systems with continuous dynamics, including for example analog circuits and mechanical systems, but also cleanly supports discrete events, modal behaviors, and signals that mix continuous-time behaviors with discrete events. Models for continuous dynamics are equivalent to linear or nonlinear integral equations. A sophisticated numerical solver for these equations is integrated with the director. The clean semantics of the Continuous domain enables its integration in hierarchical heterogeneous models that use the Synchronous/Reactive (SR) and Discrete Event (DE) domains. Arbitrary hierarchical mixtures of these domains are supported, although if SR is at the top level, then the period parameter of the director must be used so that time advances. Domain interactions are documented in the following paper:

    Primary Developers: Haiyang Zheng, Edward A. Lee

     

    Graph Transformation

    The graph transformation facility provides a framework for the analysis and transformation of actor models using graph transformation techniques.

    The design of large-scale models poses a number of challenges. As the size of the models increases to thousands of actors or hundreds of thousands of actors, analysis and consistent modification on the models become extremely hard. Furthermore, to maximize component reuse, a systematic approach is needed for the specification and maintenance of common patterns in the models and the transformation of those patterns.

    The model transformation framework to be developed in this project aims to support the flexible specification of patterns and replacements by means of rules in graph grammar. An intuitive graphical user interface will be built. For novice users, a set of common transformations will be included in a library to facilitate their common tasks.

    The transformations are models in their own right. They can be embedded in larger models hierarchically. Heterogeneous models of computation can be used to control the application of individual "atomic" transformations. This makes it easy to create sophisticated transformations by composing simple ones in a manageable and disciplined way. The sophisticated transformations will also take advantage of the concurrency inherent in those models of computation.

    Model transformation can be applied as an optimization of modal models. These are hierarchical state machines with refinements in their states, which are sub-models to be executed when those states are active. The current implementation includes the complete description of each refinement in the model description, even though refinements of the states in a state machine tend to have large commonality. With the transformation technique, only one refinement needs to be stored completely. The others are obtained by transformations performed on the stored refinement. This eliminates redundancy and eases the job of modifying multiple refinements consistently.

    Other applications of the model transformation technique include recognizing common design patterns in the models in a static analysis, replacing exiting design patterns with more efficient ones, and reusing design patterns by incorporating them into new models.

    References

    Graph Transformation Demonstrations

    The Graph Transformation facility requires WebStart or a full installation, it will not work in an applet

    Primary Graph Transformation Developer: Thomas Huining Feng

    New demonstrations

    Continuous Time (CT)

    Discrete Event (DE)

    Process Network (PN)

    Synchronous Dataflow (SDF)

    Synchronous/Reactive (SR)

    User Interface Demonstrations

    Other Key New Capabilities

    ArrayType changes surrounding length

    The ArrayType class now represents the length of arrays. New methods were added:
    boolean hasKnownLength()
    int length()
    
    The length() method throws a RuntimeException if invoked on an ArrayType with hasKnownLength() == false.

    Existing ArrayType instances (creating using the ArrayType(Type) constructor have unknown length. A new constructor ArrayType(Type, int) creates array types with a known length. Generally speaking, array types with known length are incomparable with array types with different lengths, and can be converted to an array type with unknown length and compatible element type. Scalars are convertible to array types with length 1. Getting the code to do this right was significantly more complex than inferring sizes of Fix-point types because:

    1. The FixType modifications were easily factored since any FixType with a known length is less than the single FixType with an unknown length. ArrayType could not be factored this way because of the more complex type relations.
    2. FixType doesn't have a contained type variable.
    ArrayTypes now have a type construction functions: arrayType(int) and arrayType(int, 4) represent the types that you might expect.

    Unfortunately, this means that there is a signficant backward-compatibility issue Previously, if you wanted to force an arbitrary integer array type, you used {int}, which is really an array with one element. This now has the type arrayType(int, 1), which is more specific than you probably want.

    The existing models have been updated using the new description of an array type with an unknown length.

    Note that arrayType(int) returns an instance of the special class UnsizedArrayToken, whose only purpose is to have an unknown array size. Regular array tokens always have a known length.

    Note also that arrayType(unknown) is no longer the GLB of all of the arrayTypes. The GLB is now represented by BaseType.ARRAY_BOTTOM (which is not an instance of ArrayType). This required moving farther along the path of decoupling type constraints on array element types from the type objects themselves. TypeableElementTypeTerm can now refer to the element type of a typeable which may never esolve to a valid array type (resulting in an unsatisifed inequality term).

    Primary Developer of ArrayType changes: Stephen Neuendorffer

    New and Enhanced Actor Libraries
  • New Continuous Time (CT) actors:
  • New Synchronous Dataflow (SDF) actors:

    Additional Features

    New Code Generation Actors

    Bug fixes

    Backward Compatibility

    Most models developed under Ptolemy II 1.0.1, 2.0.1, 3.0.2, 4.0.1, 5.0.2 or HyVisual 2.2-beta, 3.0, 4.0.1, 5.0.1, 6.0.2 should run under Ptolemy II 7.0.1

    The MoMLParser includes a list of backward compatibility filters that make certain changes on models when read, handling such issues as actors being moved or renamed and parameter names being changed. The filters themselves are defined in ptolemy.moml.filter. If you have developed your own actors under earlier versions of Ptolemy II by writing your own Java files, you should recompile all your java code with the new release. In theory, copying the .class files should work, but recompiling is safer.

    Features that were new in previous Ptolemy II releases

    Features that were new in previous Ptolemy II releases

    Limitations

    Version 7.0.1 has the following limitations:

    Release Limitations

    Limitations in the Class Mechanism

    The class mechanism is highly preliminary and is likely to change in future releases. There are several known problems:

    Limitations in the Actor Libraries

    Limitations in the PN Domain

    The PN domain documents that it locally handles mutations. However, this is currently not true in the implementation. For the basic PN model, this doesn't really matter, since mutations happen pretty much the same as they would otherwise. (i.e. they are non-deterministic in when they execute) However, for timed PN models, there is actually some expressiveness lost, since timed PN models can locally execute mutations deterministically.

    Embedding a PN typed composite actor inside a non-process top level such as DE does not work. In fact embedding a process domain inside a non-process domain is likely to have problems. Profess Lee wrote:

    Yes, it looks as if the code is designed so that process domains (PN, CSP) can only be used within process domains. I'm not sure to what extent this is a limitation of the process domains vs. a semantic problem. What would PN mean within DE? Since PN has no well-defined notion of a "firing", how would you assign time stamps to the outputs of a PN actor? By default in DE, the time stamps of the outputs of an actor match those of the inputs that triggered the firing. There is no such notion in PN.

    Limitations in the User Interface

    Below are some of the limitations of Vergil, the Ptolemy II Graphical User Interface.

    Limitations in JNI

  • The Interface to C actors using the Java Native Interface is not available via the Windows Installer (or Web Start). To use the JNI/Ptolemy II interface, you must download Ptolemy II as source files and compile.
  • The JNI user interface was removed between Ptolemy II 4.0 and Ptolemy II 7.0 because the UI stopped working.
  • Code Generation Limitations

    Code Generation limitations are covered on the Code Generation page.

    Missing Domains

    For limitations discovered after the release, see the Ptolemy II 7.0.1 website

    Last Updated: $Date: 2008/04/05 00:02:46 $