
from calvin.actor.actor import Actor, manage, condition, stateguard


class Distance(Actor):

    """
    Measure distance. Takes the frequency of measurements, in Hz, as input.

    Outputs:
        meters : Measured distance, in meters
    """

    @manage(['frequency'])
    def init(self, frequency):
        self.frequency = frequency
        self.setup()

    def setup(self):
        self.use("calvinsys.sensors.distance", shorthand="distance")
        self['distance'].start(self.frequency)

    def will_migrate(self):
        self['distance'].stop()

    def did_migrate(self):
        self.setup()

    @stateguard(lambda self: self['distance'].has_data())
    @condition([], ['meters'])
    def measure(self):
        distance = self['distance'].read()
        return (distance,)

    action_priority = (measure,)
    requires =  ['calvinsys.sensors.distance']




from calvin.actor.actor import Actor, manage, condition, stateguard


class Distance(Actor):

    """
    Measure distance. Takes the frequency of measurements, in Hz, as input.

    Outputs:
        meters : Measured distance, in meters
    """

    @manage(['frequency'])
    def init(self, frequency):
        self.frequency = frequency
        self.setup()

    def setup(self):
        self.use("calvinsys.sensors.distance", shorthand="distance")
        self['distance'].start(self.frequency)

    def will_migrate(self):
        self['distance'].stop()

    def did_migrate(self):
        self.setup()

    def will_end(self):
        self['distance'].stop()


    @stateguard(lambda self: self['distance'].has_data())
    @condition([], ['meters'])
    def measure(self):
        distance = self['distance'].read()
        return (distance,)

    action_priority = (measure,)
    requires =  ['calvinsys.sensors.distance']



Fix a bug where periodic timers weren't removed when application was stopped. FIXME: Check up on the semantics of will/did_start, will_migrate, did_migrate, will_stop.
Fix a bug where periodic timers weren't removed when application was stopped.
FIXME: Check up on the semantics of will/did_start, will_migrate, did_migrate, will_stop.

  
  from calvin.actor.actor import Actor, manage, condition, stateguard
  
  
  class Distance(Actor):
  
      """
      Measure distance. Takes the frequency of measurements, in Hz, as input.
  
      Outputs:
          meters : Measured distance, in meters
      """
  
      @manage(['frequency'])
      def init(self, frequency):
          self.frequency = frequency
          self.setup()
  
      def setup(self):
          self.use("calvinsys.sensors.distance", shorthand="distance")
          self['distance'].start(self.frequency)
  
      def will_migrate(self):
          self['distance'].stop()
  
      def did_migrate(self):
          self.setup()
  
+     def will_end(self):
+         self['distance'].stop()
+ 
+ 
      @stateguard(lambda self: self['distance'].has_data())
      @condition([], ['meters'])
      def measure(self):
          distance = self['distance'].read()
          return (distance,)
  
      action_priority = (measure,)
      requires =  ['calvinsys.sensors.distance']
  
  
  
Fix a bug where periodic timers weren't removed when application was stopped. FIXME: Check up on the semantics of will/did_start, will_migrate, did_migrate, will_stop.
## Code Before:

from calvin.actor.actor import Actor, manage, condition, stateguard


class Distance(Actor):

    """
    Measure distance. Takes the frequency of measurements, in Hz, as input.

    Outputs:
        meters : Measured distance, in meters
    """

    @manage(['frequency'])
    def init(self, frequency):
        self.frequency = frequency
        self.setup()

    def setup(self):
        self.use("calvinsys.sensors.distance", shorthand="distance")
        self['distance'].start(self.frequency)

    def will_migrate(self):
        self['distance'].stop()

    def did_migrate(self):
        self.setup()

    @stateguard(lambda self: self['distance'].has_data())
    @condition([], ['meters'])
    def measure(self):
        distance = self['distance'].read()
        return (distance,)

    action_priority = (measure,)
    requires =  ['calvinsys.sensors.distance']



## Instruction:
Fix a bug where periodic timers weren't removed when application was stopped. FIXME: Check up on the semantics of will/did_start, will_migrate, did_migrate, will_stop.
## Code After:

from calvin.actor.actor import Actor, manage, condition, stateguard


class Distance(Actor):

    """
    Measure distance. Takes the frequency of measurements, in Hz, as input.

    Outputs:
        meters : Measured distance, in meters
    """

    @manage(['frequency'])
    def init(self, frequency):
        self.frequency = frequency
        self.setup()

    def setup(self):
        self.use("calvinsys.sensors.distance", shorthand="distance")
        self['distance'].start(self.frequency)

    def will_migrate(self):
        self['distance'].stop()

    def did_migrate(self):
        self.setup()

    def will_end(self):
        self['distance'].stop()


    @stateguard(lambda self: self['distance'].has_data())
    @condition([], ['meters'])
    def measure(self):
        distance = self['distance'].read()
        return (distance,)

    action_priority = (measure,)
    requires =  ['calvinsys.sensors.distance']


