[kepler-users] Python execution within the Kepler Python actor...
Christopher Brooks
cxh at eecs.berkeley.edu
Tue Nov 8 20:55:37 PST 2011
Hi Marc,
I updated
https://kepler-project.org/developers/reference/python-and-kepler#how-jython-finds-imports
to describe how to use Jython's import keyword to load a Jython module
to define the contents of an actor.
I modified PythonScript so that it now has a parameter that names the
class or module to be read, this parameter must match the name of the
import.
outreach/workflows/demos/Python/PythonImport.xml is a model that imports
PtPythonSquare, which is found at ptolemy/src/lib/Lib/PtPythonSquare.py
I set up Eclipse to use PyDev, but setting a breakpoint in
PtPythonSquare does not work. I believe it is because the Kepler is
started with a Java main() and not as a Jython script.
I won't have time to look into PyDev further for awhile, there are other
tasks on my plate.
Below is the relevant portion of
https://kepler-project.org/developers/reference/python-and-kepler#how-jython-finds-imports
>
> See Chapter 8: Modules and Packages for Code Reuse
> <http://jythonpodcast.hostjava.net/jythonbook/en/1.0/ModulesPackages.html>
> for details, but basically, the Python sys.path variable stores the
> search path.
>
> See Re: Using swing from the Python Actor; skeleton in syspath?
> <https://lists.eecs.berkeley.edu/sympa/arc/ptolemy-hackers/2011-03/msg00011.html>
> for a Ptolemy model that prints the contents of the sys.path variable
> and discussion about a bug. In November, 2011, that model was checked
> in to the Ptolemy II tree as
> ptolemy/actor/lib/python/test/PythonSysPath.xml.
>
> In my default Ptolemy setup, sys.path was:
>
> /Users/cxh/ptII/vendors/jython/Lib,/Users/cxh/ptII/vendors/jython/jython.jar/Lib,__classpath__,/Users/cxh/ptII/vendors/jython/Lib
>
> In November, 2011, the Kepler devel tree was updated with
> outreach/workflows/demos/Python/PythonImport.xml. That model reads a
> Jython module in ptolemy/src/lib/Lib/PtPythonSquare.py
>
> 1. Start a development version of Kepler, and open
> outreach/workflows/demos/Python/PythonImport.xml
>
> Right click on the PythonScript actor, select Configure and note that
> jythonClassName is set to "PtPythonSquare"
>
> 2. The Jython model to be run is at
> ptolemy/src/lib/Lib/PtPythonSquare.py. Note that
> you may need to create the Lib/ directory. Note that the first lib
> directory starts with a lower case el and the second starts with an
> uppercase el. Jython uses the Jython sys.path variable to find modules.
>
> To get the value of sys.path, either:
> Right click on the PythonScript actor, select "Listen to Actor"
> run the model and look at the value printed on stdout
> OR
> Run the model at $PTII/ptolemy/actor/lib/python/test/PythonSysPath.xml
>
> The contents of PtPythonSquare.py should be:
>
> class Main :
> def fire(self) :
> token = self.input.get(0)
> self.output.broadcast(token.multiply(token))
> return
>
>
> 3. Run the model, note that the output is the square of the input.
>
> 4. Edit PtPythonSquare.py and change
> multiply(token)
> to
> add(token)
>
> 5. Run the model again, note that the output is the twice the input..
>
> Note that the python.home Java property controls what the location of
> the Python home directory. In Ptolemy, try:
>
> java -classpath $PTII:${PTII}/lib/jython.jar -Dpython.home=/tmp/bar ptolemy.vergil.VergilApplication PythonSysPath.xml
_Christopher
On 11/7/11 9:07 AM, Christopher Brooks wrote:
> Hi Marc,
> About updating from Jython 2.2 to 2.5.1, there is
> http://bugs.jython.org/issue1814. My comment to that bug was:
>> BTW - For Kepler/Ptolemy, I changed calls like:
>>
>> new PyJavaInstance(attribute)
>> to
>> PyJavaType.wrapJavaObject(attribute)
>>
>> I have no idea if this is correct, but the Ptolemy tests passed.
>> Adding something to the Jython Wiki would be great.
>
> As it stands, the PythonScript actor can import Jython code from a
> separate file by having the user edit the text widget in the actor.
> It would not be that hard to get that import from a PortParameter. I
> would not have time to implement anything like that though, I have
> deadlines at the end of November. So, it would be fairly easy to
> write actors in Jython.
>
> To me, it sounds like you are proposing porting more of the
> PythonActor into Jython. This sees fairly straightforward, but a bit
> of a mind bender. Ptolemy II has an execution semantics that expects
> that actors implement the Executable interface. Much of the code
> expects that TypedCompositeActors contain Actors and the Actors have
> methods like preinitialize(), initialize(), fire(), postfire(),
> wrapup(). These are all Java interfaces, classes and methods. So,
> for your actors to be called, the Java execution engine needs to have
> a way to call Java code that then in turn calls the Jython code that
> you have written. Thus, I'm not sure if porting more of the
> PythonActor into Jython would have a pay off.
>
> Writing Jython that is read by an actor similar to the PythonScript
> actor would seem to be fairly straightforward. The Jython user writes
> methods in Jython, Ptolemy runs the PythonScript actor that reads
> those methods.
>
> An alternative would be to embed the Ptolemy II execution engine in
> Jython and make calls from Jython to execute a model. Writing Jython
> actors would still need something like PythonScript.
>
> I updated
> https://kepler-project.org/developers/reference/python-and-kepler with
> a couple of links in the External Resources section that point to
> third parties that I believe have interfaced to the C version of
> Python using external actors. This is yet another way of doing the
> job. I'm resistant to shipping releases with interfaces to C code
> because of the complexity in getting JNI or JNA to work on multiple
> platforms and 32 or 64 bits. However, interfacing to C code does have
> value sometimes.
>
> Scala looks pretty interesting to me, I've been meaning to look
> further into Scala. One side idea I've been thinking of is to
> generate Scala from Ptolemy models, but I'm not sure if that is practical.
>
> _Christopher
>
>
>
>
> On 11/5/11 1:54 PM, J. Marc Edwards wrote:
>>
>> Christopher, Alan, Josh:
>>
>> OK...this is important enough to me that I wanted to include Alan
>> Kennedy and Josh Juneau into your response. Christopher, many thanks
>> for your effort to upgrade Kepler 2.2 to Jython 2.5.2. However, I'd
>> like to have a little more *_due diligence discussion_* before
>> putting it to rest.
>>
>> I'm also pasting below Alan Kennedy's response to my earlier query to
>> address the Jython 2.2 to 2.5.2 incompatibilities.
>>
>> My interpretation of Alan's response containing the term
>> *_"documentation"_* seems to imply less of a problem and more of an
>> explanation. *_Alan?_*
>>
>> From this perspective, as a Kepler w/Jython 2.5.2 user, I certainly
>> need to understand what seemed to be deemed an issue in being able to
>> upgrade to Jython 2.5.2 due to the backward incompatibility
>> (particularly as it related to *PyJavaInstance*), to you being able
>> to fairly easily upgrade after all. Why did you not run into an
>> issue with *PyJavaInstance* in Jython 2.5.2? *_Are we missing some
>> functionality that users need to be aware of?_*
>>
>> _Back to my original intent of Eclipse IDE-based development of
>> actors in Kepler/Ptolemy using Jython._ In a purely technical
>> context, I am more comfortable using Jython than I am Java. Based
>> upon my questions to the Jython User's Group, I suspect that Alan and
>> Josh are rolling their eyes at this comment! JThis is my primary
>> motivation behind wanting to standardize on developing Python actors
>> in Jython for Kepler. My company, Nimbis Services, is also
>> standardizing on the Jython Django web framework, and we're thinking
>> very hard about when we will begin a full evaluation of Scala (a JVM
>> functional programming language).
>>
>> I am thinking that all I need to do is to take the Ptolemy
>> PythonActor source code and take a look at the Java code for that
>> actor and recode the actor in Jython (Let's call this new actor
>> JythonActor) from within Eclipse. I'd like a suggestion from Josh or
>> Alan regarding architecturally how they would address the following
>> issue:
>>
>> Using a Jython package, or function call, or interface (probably not
>> applicable in Jython), have the newly coded JythonActor call the
>> externally developed "functional core" of the Python script that
>> would effectively "customize" the PythonActor according to the Jython
>> script's behavior. This way I would only develop my Jython script
>> packages and then integrate these into the newly coded JythonActor
>> through say a port parameter. Better yet, how about some sort of XML
>> import solution that would identify the Jython code that "decorates"
>> the JythonActor's functionality. I need a good suggestion on how to
>> do this elegantly such that it looks like someone with serious
>> programming skills thought it through and not kluge code from a chip
>> designer.
>>
>> At present, the PythonActor solution is not integrated into the full
>> functional Eclipse-based JVM flow due to the Java implementation. I
>> have become far too reliant upon debugging my Jython code through the
>> Eclipse IDE and the interpretive nature of Jython to not have this
>> working flawlessly.
>>
>> Please let me know what each you think of my JythonActor approach.
>>
>> Alan, Josh...Christopher is particularly interested in addressing
>> Jython licensing issues. I get the gist of what he is after here,
>> but I have simply not been part of any of this, so I have to defer to
>> kind attention on this subject.
>>
>> Kind regards, Marc
>>
>> ------------------------------------------------------------------------
>>
>> *[J. Marc]*
>>
>> *> OK...please connect me with one of the Jython 2.2 to 2.5
>> developers. I *
>>
>> *> will then work with them to determine how we could most effectively *
>>
>> *> migrate Kepler 2.2 from Jython 2.2 to Jython 2.5.2.*
>>
>> *>*
>>
>> *> I will be working with one of the Kepler/Ptolemy II developers on
>> this *
>>
>> *> migration.*
>>
>> **
>>
>> *This issue with PyJavaInstance when upgrading from 2.2 to 2.5 seems
>> to be a common enough issue that it requires documentation.*
>>
>> **
>>
>> *I'm not going to get to it immediately myself, so I've created an
>> issue on the issue tracker for it, if anyone feels like taking that up.*
>>
>> **
>>
>> *http://bugs.jython.org/issue1814*
>>
>> **
>>
>> *Regards,*
>>
>> **
>>
>> *Alan.*
>>
>> ------------------------------------------------------------------------
>>
>> _J. Marc Edwards, Lead Architect_
>>
>> /Semiconductor Design Portals/
>>
>> *Nimbis Services, Inc.*
>>
>> Cell - (919) 345-1021
>>
>> Fax - (919) 882-8602
>>
>> Skype - (919) 747-3775
>>
>> jmarcedwards at gmail.com
>>
>> marc.edwards at nimbisservices.com
>>
>> *From:*Christopher Brooks [mailto:cxh at eecs.berkeley.edu]
>> *Sent:* Saturday, November 05, 2011 2:59 PM
>> *To:* marc.edwards at nimbisservices.com
>> *Cc:* J. Marc Edwards; kepler-users at kepler-project.org
>> *Subject:* Re: [kepler-users] Python execution within the Kepler
>> Python actor...
>>
>> Hi Marc,
>> I updated Jython to 2.5.2, it was not that hard, updating the license
>> files took the most time.
>>
>> I have a few of misgivings about Jython that might be good lessons
>> for Ptolemy and Kepler:
>>
>> * Sadly, ptII/lib/jython.jar went from about 1Mb to 10Mb. Does this
>> mean that Jython-2.5.2 is 10 times better than Jython-2.2.1?
>> If jython is supposed to be a scripting language, then why is it so
>> large?
>> This seems to be a common trend where nice small languages get more
>> and more features.
>> As an aside about Perl, see
>> Is Perl Better Than a Randomly Generated Programming Language? at
>> http://developers.slashdot.org/story/11/10/27/213231/is-perl-better-than-a-randomly-generated-programming-language
>>
>> For comparison purposes, Ptolemy's ptsupport.jar is 3.5Mb and a
>> standalone Ptolemy demo including the GUI is 6.5Mb in jars.
>>
>> Lesson: we need to keep an eye on code bloat and be able to deploy
>> small run times.
>>
>> * Another issue with Jython-2.5.2 is that because they removed
>> org.python.core.PyJavaInstance some time after Jython-2.2.1, they
>> should have released Jython-2.5.2 as Jython-3.x. Most projects bump
>> up the major version number when there are incompatibilities.
>>
>> Lesson: Ptolemy bumps up the major version number with each ~yearly
>> release. Ptolemy has backward compatibility filters. We do
>> sometimes remove old code, but only with major versions.
>>
>> * The Jython license situation is a mess.
>> http://www.jython.org/license.html lists these licenses
>> - The Python Software Foundation License Version 2, which according
>> to Wikipedia is a BSD-style license
>> - The Jython-2.0 and 2.1 license, which is similar to a BSD-style license
>> - The JPython 1.1.x license, which is similar to BSD-style license
>>
>> The software ships with these licenses in the LICENSE.txt file.
>>
>> However, LICENSE_CPython.txt and LICENSE_Apache.txt are included.
>> There is no mention as to what code actually uses those licenses.
>> LICENSE_CPython.txt includes four copyrights:
>> - Python Software Foundation License Version 2
>> - BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
>> - CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
>> - CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
>> The last three look similar to BSD, but have various requirements.
>>
>> I'll submit a bug report to Jython to get them to update their site.
>>
>> Lesson: I'm not sure how Ptolemy and Kepler can avoid a similar
>> complexity issue. I've been working on updating our license file and
>> we have a way to determine what licenses are used by a particular
>> configuration.
>> http://ptolemy.eecs.berkeley.edu/ptolemyII/ptII8.0/copyright.htm
>> lists 7 licenses used by Ptiny, a small configuration of Ptolemy II.
>> One of those 7 is the Jython-2.2.1 license, which is similar to the
>> Jython-2.5.2 license.
>> The Kepler configuration of Ptolemy II uses 15 licenses in the
>> Ptolemy II code.
>>
>> _Christopher
>>
>> On 11/5/11 9:15 AM, J. Marc Edwards wrote:
>>
>> Christopher:
>>
>> I suspect that I can simply code an entire actor extending the
>> respective classes directly in Jython.
>>
>> That is what I am thinking. Please let me know what you think of
>> this strategy.
>>
>> Of course, while I do this, I want to migrate a Kepler development
>> tree to use Jython 2.5.2, which I will need your assistance in
>> completing.
>>
>> Let's talk on the phone on Monday.
>>
>> Regards, Marc
>>
>> _J. Marc Edwards, Lead Architect_
>>
>> /Semiconductor Design Portals/
>>
>> *Nimbis Services, Inc.*
>>
>> Cell - (919) 345-1021
>>
>> Fax - (919) 882-8602
>>
>> Skype - (919) 747-3775
>>
>> jmarcedwards at gmail.com <mailto:jmarcedwards at gmail.com>
>>
>> marc.edwards at nimbisservices.com <mailto:marc.edwards at nimbisservices.com>
>>
>> *From:*Christopher Brooks [mailto:cxh at eecs.berkeley.edu]
>> *Sent:* Friday, November 04, 2011 9:00 PM
>> *To:* marc.edwards at nimbisservices.com
>> <mailto:marc.edwards at nimbisservices.com>
>> *Cc:* kepler-users at kepler-project.org
>> <mailto:kepler-users at kepler-project.org>
>> *Subject:* Re: [kepler-users] Python execution within the Kepler
>> Python actor...
>>
>> Hi Marc,
>>
>> On 11/4/11 2:09 PM, J. Marc Edwards wrote:
>>
>> I need a little help in integrating my Jython/Python code into the
>> Python actor.
>>
>> When I double-click on the Python actor in the PythonDialogExample, a
>> window with the Python code appears. I can of course edit the code
>> from within this window. However, I want to perform my code
>> development and editing from within my Eclipse environment from my
>> Kepler development build.
>>
>> I don't know that much about Python, but I believe that you could use
>> the Python import facility to find imports.
>> I just added text to the Kepler Jython page about this, see:
>> https://kepler-project.org/developers/reference/python-and-kepler#how-jython-finds-imports
>>
>> Note that I found a few other references on the web, included what
>> appears to be people who are using the full version of Python (not
>> Jython) with Kepler.
>>
>>
>> When I "open the actor", the beginning of the file has some Javadoc
>> as well as what appear to be some unmatched XML elements (<p>), along
>> with some matching XML element tags (</pre>) (does this correspond to
>> some pre-fire method?).
>>
>> When you open the actor, you are seeing the Java code that implements
>> the PythonActor. The <p> tags are html tags used in the javadoc
>> comments of the Java file. All of the instances of the PythonActor
>> share the same Java code, but may have different Python code.
>>
>>
>> After this all of the Java code for the actor follows with the
>> standard initialize(), stop(), stopFire(), preinitialize(),
>> terminate(), etc, methods.
>>
>> I do see in the Java code where there is a PythonScript method that
>> accepts a CompositeEntity where a script template is provided where I
>> am supposing a long Python string in the script.setExpression is defined.
>>
>> However, what I would like to do is simply include my Jython module
>> within my Kepler build and debug my Jython code in connection with my
>> overall workflow.
>>
>> Can someone tell me how to go about achieving this objective?
>>
>> It looks like Jython uses sys.path to find imports. I included a
>> Ptolemy II model that opens in the devel version of Kepler that lists
>> the contents of sys.path. For further information about sys.path, see
>>
>> http://jythonpodcast.hostjava.net/jythonbook/en/1.0/ModulesPackages.html
>>
>> _Christopher
>>
>>
>>
>> Thanks, Marc
>>
>> --
>>
>>
>> J. Marc Edwards
>> Lead Architect - Semiconductor Design Portals
>> Nimbis Services, Inc.
>> Skype: (919) 747-3775
>> Cell: (919) 345-1021
>> Fax: (919) 882-8602
>> marc.edwards at nimbisservices.com <mailto:marc.edwards at nimbisservices.com>
>> www.nimbisservices.com <http://www.nimbisservices.com>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Kepler-users mailing list
>> Kepler-users at kepler-project.org <mailto:Kepler-users at kepler-project.org>
>> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
>>
>>
>>
>>
>> --
>> Christopher Brooks, PMP University of California
>> CHESS Executive Director US Mail: 337 Cory Hall
>> Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774
>> ph: 510.643.9841 (Office: 545Q Cory)
>> home: (F-Tu) 707.665.0131 cell: 707.332.0670
>>
>>
>>
>> --
>> Christopher Brooks, PMP University of California
>> CHESS Executive Director US Mail: 337 Cory Hall
>> Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774
>> ph: 510.643.9841 (Office: 545Q Cory)
>> home: (F-Tu) 707.665.0131 cell: 707.332.0670
>
> --
> Christopher Brooks, PMP University of California
> CHESS Executive Director US Mail: 337 Cory Hall
> Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774
> ph: 510.643.9841 (Office: 545Q Cory)
> home: (F-Tu) 707.665.0131 cell: 707.332.0670
--
Christopher Brooks, PMP University of California
CHESS Executive Director US Mail: 337 Cory Hall
Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774
ph: 510.643.9841 (Office: 545Q Cory)
home: (F-Tu) 707.665.0131 cell: 707.332.0670
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nceas.ucsb.edu/kepler/pipermail/kepler-users/attachments/20111108/ca4f914d/attachment.html>
More information about the Kepler-users
mailing list