<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Tom,<br>
<br>
I ran your workflow and both ports had the correct values ... but your
script doesn't currently do anything with the blocksize except print it
to stdout (which in kepler is the console). And that works as well.<br>
<br>
A PythonActor doesn't communicate with it's scripts through the
standard Python __init__ method. Rather it expects the Python scripts
to implement the same methods that a Java actor might implement. Of
course, you already use fire(), but there are several other optional
methods available :<br>
<br>
def preinitialize(self) ... set port types and/or scheduling
information ...<br>
def initialize(self) ... initialize local variables ...<br>
def prefire(self) ... determine whether firing should proceed ... a
good place to check whether the execution environment is valid<br>
      if you use it, it must return True to proceed,  False if there is
some problem ... no return value is the same as False<br>
      the fire(0 method will be called only if prefire() returns True<br>
def postfire(self) ... update persistent state and/or determine whether
firing should continue to next iteration<br>
     if you use it, it must return True to proceed,  False if there is
some problem ... no return value is the same as False<br>
     returning False will terminate the workflow<br>
def wrapup(self) ... cleanup and display final results ...<br>
     I use this to reset to the initial state after the last iteration<br>
<br>
Designing actors is discussed in detail in chapter 5 of the document at<br>
<a class="moz-txt-link-freetext" href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2008/EECS-2008-28.pdf">http://www.eecs.berkeley.edu/Pubs/TechRpts/2008/EECS-2008-28.pdf</a><br>
<br>
If you want, I can help you in more detail off list.<br>
<br>
Rick Moore<br>
Information Science<br>
Cornell University<br>
<br>
"Once in a while you will be shown the light in the strangest of
places, if you look at it right"<br>
from Scarlet Begonias by the Grateful Dead <br>
<br>
Tom Parris wrote:
<blockquote
 cite="mid:6b796de60911231410s5027837j622df0034d769bb2@mail.gmail.com"
 type="cite"><span style="font-family: courier new,monospace;">Dear
Keplerites:</span><br style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">I have been making
steady progress understanding how to write actors for Kepler using the
PythonScript actor.  However, I have hit a stumbling block in my
attempts to set input_tokenConsumptionRate.  </span><br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">To illustrate my
problem, I have attached a simple workflow with an actor titled
"IntTokenSum" written with the PythonScript actor.  This actor is
designed to add some number of integer tokens from it's "input" port.
 The number of tokens is defined by the "windowsize" port.  The number
of tokens to consume with each "fire" is defined with the "blocksize"
port.   The current version works as desired with the exception of the
blocksize input prot (it always takes on the value of the windowsize
input port).</span><br style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">Q1: As the script
is currently configured, the windowsize parameter works as advertised.
 However, I can't seem to get the blocksize parameter to work.  I've
tried a number of approaches to setting the input_tokenConsumptionRate
per the java code for several actors (e.g., DownSample).  But now I'm
wondering if that is the correct approach.  Perhaps its the call to
self.input.get that needs to be changed.  Correct output on Display2
should be the sequence: 1, 3, 5, 7, 9, 11, 13, 15, 17</span>.<br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">Q2: I'd also like
to use an actor along these lines under the SDF director with
portparameters for windowsize and blocksize.  But can't figure out how
to to this with the PythonScript actor.  Is this possible?  If so, I
would welcome guidance.</span><br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">Q3: Finally, it
should be fairly easy to make this actor polymorphic.  I think this can
be done by changing the line:</span><br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">   val = val +
it.intValue()</span><br style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">to</span><br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">   val = it.add(val)</span><br
 style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <span style="font-family: courier new,monospace;">But I am not sure
how to initialize val to the additive identity (generalized notion of
zero).</span><br style="font-family: courier new,monospace;">
  <br style="font-family: courier new,monospace;">
  <pre wrap=""><pre wrap="">
<hr size="4" width="90%">
_______________________________________________
Kepler-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Kepler-users@kepler-project.org">Kepler-users@kepler-project.org</a>
<a class="moz-txt-link-freetext" href="http://mercury.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-user">http://mercury.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-user</a>
</pre></pre>
</blockquote>
</body>
</html>