Ejemplo n.º 1
0
def test_dyna():
    DynaDogHive = hive.dyna_hive("Dog", build_dog, declare_dog)

    print("\n#1: MetaArg=2, Arg='Jack'")
    d = DynaDogHive(2, "Jack")
    d.bark_0()
    d.bark_1()

    print("\n#2: MetaArg=1, Arg='Jill'")
    d = DynaDogHive(1, "Jill")
    d.bark_0()

    print("\n#3: MetaArg=1, Arg='Bobby'")
    d = DynaDogHive(1, "Bobby")
    d.bark_0()
Ejemplo n.º 2
0
            kwarg_fields.append(field_name)

        # Create IO
        attr = hive.attribute()
        setattr(i, field_name, attr)

        in_attr = hive.pull_in(attr)
        setattr(i, "{}_in".format(field_name), in_attr)

        setattr(ex, field_name, hive.antenna(in_attr))
        hive.trigger(i.result_out, in_attr, pretrigger=True)

    ex.result = hive.output(i.result_out)

    def do_format(self):
        args = [
            getattr(self, "_{}".format(attr_name))
            for attr_name in indexed_fields
        ]
        kwargs = {
            attr_name: getattr(self, "_{}".format(attr_name))
            for attr_name in kwarg_fields
        }
        self._result = formatter.format(format_string, *args, **kwargs)

    i.func = hive.modifier(do_format)
    hive.trigger(i.result_out, i.func, pretrigger=True)


Format = hive.dyna_hive("Format", build_format, declarator=declare_format)
Ejemplo n.º 3
0
import hive


def declare_sorted(meta_args):
    meta_args.data_type = hive.parameter('str', 'list', {'list', 'dict', 'set', 'tuple'})


def build_sorted(i, ex, args, meta_args):
    """Sort an iterable and output list"""
    args.reverse = hive.parameter('bool', False)
    i.reverse = hive.attribute('bool', args.reverse)

    i.result = hive.attribute('list')
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    i.value = hive.attribute(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)
    ex.value = hive.antenna(i.pull_value)

    def sort(self):
        self._result = sorted(self._value, reverse=self._reverse)

    i.sort = hive.modifier(sort)
    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.sort)


Sorted = hive.dyna_hive("Sorted", build_sorted, declare_sorted)
Ejemplo n.º 4
0
        i.push_key = hive.push_in(i.key)
        ex.key = hive.antenna(i.push_key)

        i.on_key_changed = hive.triggerable(cls.change_listener_keys)
        hive.trigger(i.push_key, i.on_key_changed)

        i.on_pressed = hive.triggerfunc()
        ex.on_pressed = hive.hook(i.on_pressed)

        i.on_released = hive.triggerfunc()
        ex.on_released = hive.hook(i.on_released)

        i.is_pressed = hive.property(cls, "is_pressed", "bool")
        i.pull_is_pressed = hive.pull_out(i.is_pressed)
        ex.is_pressed = hive.output(i.pull_is_pressed)

    else:
        ex.on_event = hive.socket(cls.add_any_listener, identifier="event.add_handler")

        i.key_pressed = hive.property(cls, 'key_pressed', data_type='str.keycode')
        i.pull_key_pressed = hive.push_out(i.key_pressed)
        ex.key_pressed = hive.output(i.pull_key_pressed)

        i.key_released = hive.property(cls, 'key_released', data_type='str.keycode')
        i.pull_key_released = hive.push_out(i.key_released)
        ex.key_released = hive.output(i.pull_key_released)


Keyboard = hive.dyna_hive("Keyboard", build_keyboard, declarator=declare_keyboard, builder_cls=Keyboard_)
Ejemplo n.º 5
0
def declare_filler(meta_args):
    meta_args.i = hive.parameter("int", 2)


def build_filler(i, ex, args, meta_args):
    print("NEW FILLER", meta_args.i)
    if meta_args.i:
        i.inner = FillerHive(meta_args.i - 1, import_namespace=True)
        ex.inner = hive.hook(i.inner)

    else:
        i.inner = DogHive(import_namespace=True, name="DOGGY")
        ex.inner = hive.hook(i.inner)


FillerHive = hive.dyna_hive("FillerHive", build_filler, declarator=declare_filler)


class House(object):

    def get_current_hive(self):
        return self


def build_house(cls, i, ex, args):
    ex.some_plugin = hive.plugin(cls.get_current_hive, identifier="get.house", data_type="float")

    # Auto connect
    i.filler = FillerHive()
    ex.filler = hive.hook(i.filler)
Ejemplo n.º 6
0
def declare_max(meta_args):
    meta_args.data_type = hive.parameter('str', 'float', options={'complex', 'int', 'float'})


def build_max(i, ex, args, meta_args):
    """Determine the maximum of two values"""
    i.a_value = hive.variable(meta_args.data_type)
    i.b_value = hive.variable(meta_args.data_type)
    i.value = hive.variable(meta_args.data_type)

    i.pull_a = hive.pull_in(i.a_value)
    i.pull_b = hive.pull_in(i.b_value)
    i.pull_value = hive.pull_out(i.value)

    ex.value = hive.output(i.pull_value)
    ex.a = hive.antenna(i.pull_a)
    ex.b = hive.antenna(i.pull_b)

    def do_max(self):
        self._value = max(self._a, self._b)

    i.do_max = hive.modifier(do_max)

    hive.trigger(i.pull_value, i.pull_a, pretrigger=True)
    hive.trigger(i.pull_a, i.pull_b)
    hive.trigger(i.pull_b, i.do_max)


Max = hive.dyna_hive("Max", build_max, declare_max)
Ejemplo n.º 7
0
def build_unpack_tuple(i, ex, args, meta_args):
    """Unpack a tuple from individual inputs"""
    i.tuple_ = hive.attribute('tuple')
    i.push_tuple = hive.push_in(i.tuple_)
    ex.tuple_ = hive.antenna(i.push_tuple)

    for index, data_type in enumerate(meta_args.types):
        attr = hive.attribute(data_type)
        setattr(i, "attr_{}".format(index), attr)

        pull_out = hive.pull_out(attr)
        setattr(i, "pull_out_{}".format(index), pull_out)

        setattr(ex, "item_{}".format(index), hive.output(pull_out))

    def do_unpack_tuple(self):
        tuple_ = self._tuple_
        data_types = meta_args.types

        assert len(tuple_) == len(data_types)

        for index, item in enumerate(tuple_):
            setattr(self, "_attr_{}".format(index), item)

    i.do_unpack_tuple = hive.modifier(do_unpack_tuple)
    hive.trigger(i.push_tuple, i.do_unpack_tuple)


UnpackTuple = hive.dyna_hive("UnpackTuple", build_unpack_tuple,
                             declare_unpack_tuple)
Ejemplo n.º 8
0
    """.format(argument_string)

    exec(func_body, locals(), globals())
    return func


def build_any(i, ex, args, meta_args):
    """Trigger output if any inputs evaluate to True"""
    # On pull
    func = build_any_func(meta_args.count)
    i.run_any = hive.modifier(func)

    i.result = hive.attribute(meta_args.data_type, False)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    hive.trigger(i.pull_result, i.run_any, pretrigger=True)

    for index, char in zip(range(meta_args.count), string.ascii_lowercase):
        variable = hive.attribute(meta_args.data_type, False)
        setattr(i, char, variable)

        pull_in = hive.pull_in(variable)
        setattr(i, "pull_{}".format(char), pull_in)

        antenna = hive.antenna(pull_in)
        setattr(ex, char, antenna)


Any = hive.dyna_hive("Any", build_any, declare_any)
Ejemplo n.º 9
0
    """Store the input value and output saved value.

    In pull mode, the trigger is used to update the internal value.
    In push mode, the trigger is used to output the internal value.

    Can be used to cache changing values
    """
    args.start_value = hive.parameter(meta_args.data_type, None)
    i.cached_value = hive.attribute(meta_args.data_type, args.start_value)

    if meta_args.mode == "push":
        i.push_value = hive.push_in(i.cached_value)
        ex.value = hive.antenna(i.push_value)

        i.push_cached_value = hive.push_out(i.cached_value)
        ex.cached_value = hive.output(i.push_cached_value)

        ex.output = hive.entry(i.push_cached_value)

    elif meta_args.mode == "pull":
        i.pull_value = hive.pull_in(i.cached_value)
        ex.value = hive.antenna(i.pull_value)

        i.pull_cached_value = hive.pull_out(i.cached_value)
        ex.cached_value = hive.output(i.pull_cached_value)

        ex.update_cache = hive.entry(i.pull_value)


Buffer = hive.dyna_hive("Buffer", build_buffer, declarator=declare_buffer)
Ejemplo n.º 10
0
            self._hive.entity_id()
            return dict(entity_id=self.entity_id)

        return {}


@factory.builds_external
def build_bind(cls, i, ex, args, meta_args):
    bind_mode = meta_args.bind_entity

    if bind_mode == 'bound':
        i.entity_id = hive.property(cls, "entity_id", "int.entity_id")
        i.pull_entity_id = hive.pull_in(i.entity_id)
        ex.entity_id = hive.antenna(i.pull_entity_id)


_BindEntity = hive.dyna_hive("BindEntity",
                             build_bind,
                             declarator=factory.external_declarator,
                             builder_cls=EntityCls)


def get_environment(meta_args):
    if meta_args.bind_entity != 'none':
        return _EntityEnvironment

    return None


bind_info = BindInfo("entity", _BindEntity, get_environment)
Ejemplo n.º 11
0
import hive


def declare_abs(meta_args):
    meta_args.data_type = hive.parameter('str',
                                         'int',
                                         options={'int', 'complex', 'float'})


def build_abs(i, ex, args, meta_args):
    """Calculate the absolute abs() of a value"""
    i.value = hive.variable(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)

    i.result = hive.variable(meta_args.data_type)
    i.pull_result = hive.pull_out(i.result)

    ex.value = hive.antenna(i.pull_value)
    ex.result = hive.output(i.pull_result)

    def do_abs(self):
        self._result = abs(self._value)

    i.do_abs = hive.modifier(do_abs)

    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.do_abs)


Abs = hive.dyna_hive("Abs", build_abs, declarator=declare_abs)
Ejemplo n.º 12
0
    meta_args.mode = hive.parameter("str", "get", {'get', 'set'})
    meta_args.bound = hive.parameter("bool", True)


def build_visibility(cls, i, ex, args, meta_args):
    """Set/Get entity visibility"""

    if meta_args.bound:
        ex.get_bound_id = hive.socket(cls.set_get_entity_id, identifier="entity.get_bound")
        i.do_get_entity_id = hive.triggerable(cls.get_bound_entity)

    else:
        i.entity_id = hive.property(cls, "entity_id", "int.entity_id")
        i.do_get_entity_id = hive.pull_in(i.entity_id)
        ex.entity_id = hive.antenna(i.do_get_entity_id)

    if meta_args.mode == 'get':
        ex.get_get_visibility = hive.socket(cls.set_get_visibility, identifier="entity.visibility.get")
        i.pull_visibility = hive.pull_out(cls.get_visibility)
        ex.visibility = hive.output(i.pull_visibility)
        hive.trigger(i.pull_visibility, i.do_get_entity_id, pretrigger=True)

    else:
        ex.get_set_visibility = hive.socket(cls.set_set_visibility, identifier="entity.visibility.set")
        i.push_in_visibility = hive.push_in(cls.set_visibility)
        ex.visibility = hive.antenna(i.push_in_visibility)
        hive.trigger(i.push_in_visibility, i.do_get_entity_id, pretrigger=True)


Visibility = hive.dyna_hive("Visibility", build_visibility, declare_visibility, builder_cls=VisibilityClass)
Ejemplo n.º 13
0
        ex.in_ = hive.antenna(i.in_)

        hive.trigger(i.in_, )

        i.out = meta_args.out(i.value)
        ex.out = hive.output(i.out)
    else:
        i.value = hive.variable()
        i.in_ = meta_args.in_(i.value)
        ex.in_ = hive.antenna(i.in_)

        i.out = meta_args.out(i.value)
        ex.out = hive.output(i.out)


IOMethod = hive.dyna_hive("IOMethd", build_io, declarator=declare_io)


def build_struct(cls, i, ex, args):
    """Interface to Struct class"""
    i.tuple = hive.variable("tuple")
    i.pack_in = hive.push_in(i.tuple)
    ex.pack = hive.antenna(i.pack_in)

    i.bytes = hive.variable("bytes")
    i.unpack_out = hive.push_out(i.bytes)
    ex.unpack = hive.output(i.unpack_out)

    i.size_out = hive.pull_out(cls.size)
    ex.size = hive.output(i.size_out)
Ejemplo n.º 14
0
    self._result = all({})
    """.format(argument_string)

    exec(func_body, locals(), globals())
    return func


def build_all(i, ex, args, meta_args):
    """Trigger output if all inputs evaluate to True"""
    # On pull
    func = build_all_func(meta_args.count)
    i.trigger = hive.modifier(func)

    i.result = hive.variable(meta_args.data_type, False)
    pull_out = hive.pull_out(i.result)
    ex.output = hive.output(pull_out)

    hive.trigger(pull_out, i.trigger, pretrigger=True)

    for index, char in zip(range(meta_args.count), string.ascii_lowercase):
        variable = hive.variable(meta_args.data_type, False)
        setattr(i, char, variable)

        pull_in = hive.pull_in(variable)

        antenna = hive.antenna(pull_in)
        setattr(ex, char, antenna)


All = hive.dyna_hive("All", build_all, declare_all)
Ejemplo n.º 15
0
    i.result = hive.variable('bool')

    i.pull_a = hive.pull_in(i.a)

    if is_single_arg:
        ex.value = hive.antenna(i.pull_a)

        def calc(self):
            self._result = op(self._a)

    else:
        ex.a = hive.antenna(i.pull_a)

        def calc(self):
            self._result = op(self._a, self._b)

        i.pull_b = hive.pull_in(i.b)
        ex.b = hive.antenna(i.pull_b)
        hive.trigger(i.pull_a, i.pull_b)

    i.run_operator = hive.modifier(calc)

    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    hive.trigger(i.pull_a, i.run_operator)
    hive.trigger(i.pull_result, i.pull_a, pretrigger=True)


BoolOperator = hive.dyna_hive("BoolOperator", build_operator, declare_operator)
Ejemplo n.º 16
0
import hive
from struct import pack, unpack_from, calcsize


def declare_struct(meta_args):
    pass


def build_struct(i, ex, args, meta_args):
    pass


Struct = hive.dyna_hive("Struct", build_struct, declarator=declare_struct)
Ejemplo n.º 17
0
    ex.get_index = hive.antenna(i.pull_getitem_index)

    i.pull_getitem = hive.pull_out(i.item)
    ex.getitem = hive.output(i.pull_getitem)

    def do_getitem(self):
        self._item = self._list[self._index]

    i.do_getitem = hive.modifier(do_getitem)

    hive.trigger(i.pull_getitem, i.pull_getitem_index, pretrigger=True)
    hive.trigger(i.pull_getitem_index, i.do_getitem)

    # Setitem
    i.pull_setitem_index = hive.pull_in(i.item)
    ex.set_index = hive.antenna(i.pull_setitem_index)

    i.push_setitem = hive.push_in(i.item)
    ex.setitem = hive.antenna(i.push_setitem)

    def do_setitem(self):
        self._list[self._index] = self._item

    i.do_setitem = hive.modifier(do_setitem)

    hive.trigger(i.push_setitem, i.pull_setitem_index)
    hive.trigger(i.pull_setitem_index, i.do_setitem)


List = hive.dyna_hive("List", build_list, declare_list)
Ejemplo n.º 18
0
        self._result = next(iterator)

    except StopIteration:
        self._iterator = None
        next_modifier(self)


def declare_next(meta_args):
    meta_args.data_type = hive.parameter("str", "int")


def build_next(i, ex, args, meta_args):
    """Iterate over generator object, output new value when pulled"""
    i.iterator = hive.attribute("iterator")
    i.iterator_in = hive.pull_in(i.iterator)
    ex.iterator = hive.antenna(i.iterator_in)

    i.pull_iterator = hive.triggerfunc()
    hive.trigger(i.pull_iterator, i.iterator_in)

    i.result = hive.attribute(meta_args.data_type)
    i.pull_value = hive.pull_out(i.result)
    ex.value = hive.output(i.pull_value)

    i.do_next = hive.modifier(next_modifier)

    hive.trigger(i.pull_value, i.do_next, pretrigger=True)


Next = hive.dyna_hive("Next", build_next, declarator=declare_next)
Ejemplo n.º 19
0
            hive.trigger(i.pull_position, i.pull_entity_id, pretrigger=True)

        hive.trigger(i.pull_position, i.do_get_position, pretrigger=True)

    else:
        if coordinate_system == 'absolute':
            ex.get_set_position = hive.socket(
                cls.set_set_position,
                identifier="entity.position.set.absolute")
            i.do_set_position = hive.triggerable(cls.do_set_position)

        else:
            ex.get_set_position = hive.socket(
                cls.set_set_position,
                identifier="entity.position.set.relative")
            i.do_set_position = hive.triggerable(cls.do_set_relative_position)
            hive.trigger(i.push_position, i.pull_other_entity_id)

        if meta_args.bound:
            hive.trigger(i.push_position, i.do_get_entity_id)

        else:
            hive.trigger(i.push_position, i.pull_entity_id)

        hive.trigger(i.push_position, i.do_set_position)


Position = hive.dyna_hive("Position",
                          build_position,
                          declare_position,
                          builder_cls=PositionClass)
Ejemplo n.º 20
0
def build_expression(i, ex, args, meta_args):
    """Evaluate Python expression and store result"""
    ast_node = ast.parse(meta_args.expression, mode='eval')

    # Visit AST and find variable names
    visitor = VariableRecorder()
    visitor.visit(ast_node)
    variable_names = visitor.undefined_ids

    i.result = hive.variable(meta_args.result_type)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    for name in variable_names:
        attribute = hive.variable(meta_args.result_type)
        setattr(i, name, attribute)
        pull_in = hive.pull_in(attribute)
        setattr(ex, name, hive.antenna(pull_in))

        hive.trigger(i.pull_result, pull_in, pretrigger=True)

    func = create_func(meta_args.expression, variable_names)
    i.modifier = hive.modifier(func)
    hive.trigger(i.pull_result, i.modifier, pretrigger=True)


Expression = hive.dyna_hive("Expression",
                            build_expression,
                            declarator=declare_expression)
Ejemplo n.º 21
0
        else:
            callback = self.on_event

        handler = EventHandler(callback, self.event, mode=mode)
        add_handler(handler)


def declare_listener(meta_args):
    meta_args.mode = hive.parameter("str",
                                    'leader',
                                    options={'leader', 'match', 'trigger'})


def build_listener(cls, i, ex, args, meta_args):
    """Tick event sensor, trigger on_tick every tick"""
    i.on_event = hive.triggerfunc()
    ex.on_event = hive.hook(i.on_event)

    ex.get_add_handler = hive.socket(cls.set_add_handler, "event.add_handler")

    if meta_args.mode == 'leader':
        i.after_leader = hive.property(cls, 'after_leader', 'tuple')
        i.pull_after_leader = hive.pull_out(i.after_leader)
        ex.after_leader = hive.output(i.pull_after_leader)


Listener = hive.dyna_hive("Listener",
                          build_listener,
                          builder_cls=_ListenerCls,
                          declarator=declare_listener)
Ejemplo n.º 22
0
    ex.add_get_plugins = hive.socket(cls.add_get_plugins,
                                     identifier="bind.get_plugins",
                                     policy=hive.MultipleOptional)
    ex.add_get_config = hive.socket(cls.add_get_config,
                                    identifier="bind.get_config",
                                    policy=hive.MultipleOptional)

    # Bind instantiator
    if meta_args.bind_process == 'child':
        # Add startup and stop callbacks
        ex.on_stopped = hive.plugin(cls.stop_all_processes,
                                    identifier="on_stopped")


Instantiator = hive.dyna_hive("Instantiator",
                              build_instantiator,
                              declare_instantiator,
                              builder_cls=InstantiatorClass)


def create_instantiator(*bind_infos, docstring=""):
    """Create instantiator Hive for particular BindInfo sequence

    :param bind_infos: BindInfos to embed
    """
    def build_instantiator(i, ex, args, meta_args):
        bind_environments = get_active_bind_environments(bind_infos, meta_args)

        # Update bind environment to use new bases
        environment_class = i.bind_meta_class.start_value
        i.bind_meta_class.start_value = environment_class.extend(
            "BindEnvironment", bases=tuple(bind_environments))
Ejemplo n.º 23
0

def build_watch(cls, i, ex, args, meta_args):
    """Watch value and indicate when it is changed.

    Uses a tick callback.
    """
    args.start_value = hive.parameter(meta_args.data_type, None)
    i.value = hive.property(cls, "current_value", meta_args.data_type, args.start_value)

    if meta_args.mode == 'pull':
        i.value_in = hive.pull_in(i.value)

    else:
        i.value_in = hive.push_in(i.value)

    ex.value = hive.antenna(i.value_in)

    i.on_changed = hive.triggerfunc()
    ex.on_changed = hive.hook(i.on_changed)

    if meta_args.mode == 'pull':
        ex.get_add_handler = hive.socket(cls.set_add_handler, identifier="event.add_handler")

    else:
        i.compare_values = hive.triggerable(cls.compare_values)
        hive.trigger(i.value_in, i.compare_values)


Watch = hive.dyna_hive("Watch", build_watch, declare_watch, builder_cls=WatchClass)
Ejemplo n.º 24
0
    meta_args.data_type = hive.parameter("str", "int")
    meta_args.advanced = hive.parameter("bool", False)


def build_variable(i, ex, args, meta_args):
    """Simple value-holding hive"""
    args.start_value = hive.parameter(meta_args.data_type)
    ex.value = hive.variable(meta_args.data_type, args.start_value)

    i.pull_value = hive.pull_out(ex.value)
    ex.value_out = hive.output(i.pull_value)

    i.push_value = hive.push_in(ex.value)
    ex.value_in = hive.antenna(i.push_value)

    if meta_args.advanced:
        i.pre_output = hive.triggerfunc()
        ex.pre_output = hive.hook(i.pre_output)

        i.do_pre_output = hive.triggerable(i.pre_output)
        hive.trigger(i.pull_value, i.do_pre_output, pretrigger=True)

Variable = hive.dyna_hive("Variable", build_variable, declarator=declare_variable)

# Helpers
_MetaVariable = Variable.extend("MetaVariable", is_dyna_hive=False)
VariableStr = _MetaVariable(data_type='str')
VariableInt = _MetaVariable(data_type='int')
VariableFloat = _MetaVariable(data_type='float')
VariableBool = _MetaVariable(data_type='bool')
Ejemplo n.º 25
0
import hive


def declare_transistor(meta_args):
    meta_args.data_type = hive.parameter("str", "int")


def build_transistor(i, ex, args, meta_args):
    """Convert a pull output into a push output, using a trigger input"""
    i.value = hive.variable(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)
    ex.value = hive.antenna(i.pull_value)

    i.push_value = hive.push_out(i.value)
    ex.result = hive.output(i.push_value)

    ex.trigger = hive.entry(i.pull_value)

    hive.trigger(i.pull_value, i.push_value)


Transistor = hive.dyna_hive("Transistor", build_transistor, declare_transistor)
Ejemplo n.º 26
0
            hive.trigger(i.pull_velocity, i.pull_other_entity_id, pretrigger=True)

        if meta_args.bound:
            hive.trigger(i.pull_velocity, i.do_get_entity_id, pretrigger=True)

        else:
            hive.trigger(i.pull_velocity, i.pull_entity_id, pretrigger=True)

        hive.trigger(i.pull_velocity, i.do_get_velocity, pretrigger=True)

    else:
        if coordinate_system == 'absolute':
            ex.get_set_velocity = hive.socket(cls.set_set_velocity, identifier="entity.linear_velocity.set")
            i.do_set_velocity = hive.triggerable(cls.do_set_velocity)

        else:
            ex.get_set_velocity = hive.socket(cls.set_set_velocity, identifier="entity.linear_velocity.set")
            i.do_set_velocity = hive.triggerable(cls.do_set_relative_velocity)
            hive.trigger(i.push_velocity, i.pull_other_entity_id)

        if meta_args.bound:
            hive.trigger(i.push_velocity, i.do_get_entity_id)

        else:
            hive.trigger(i.push_velocity, i.pull_entity_id)

        hive.trigger(i.push_velocity, i.do_set_velocity)


Velocity = hive.dyna_hive("Velocity", build_velocity, declare_velocity, builder_cls=VelocityClass)
Ejemplo n.º 27
0
        self.name = None


def declare_dog(meta_args):
    print("Invoked Declarator")
    meta_args.puppies = hive.parameter(("int", ), 1)


def build_dog(cls, i, ex, args, meta_args):

    print(meta_args)
    print("Invoked Builder")
    args.name = hive.parameter("str")
    ex.name = hive.property(cls, "name", "str", args.name)

    for ix in range(meta_args.puppies):
        mod = hive.modifier(lambda h: print("Puppy {} barked".format(h.name)))
        setattr(i, "mod_{}".format(ix), mod)
        setattr(ex, "bark_{}".format(ix), hive.entry(mod))


DogHive = hive.dyna_hive("Dog", build_dog, declare_dog, Dog)

d = DogHive(2, "Jack")
d.bark_0()
d.bark_1()

print()

d = DogHive(1, "Jill")
d.bark_0()
Ejemplo n.º 28
0
                                         'float',
                                         options={'complex', 'int', 'float'})


def build_constrain(i, ex, args, meta_args):
    """Constrain a value between two bounding values"""
    args.min_value = hive.parameter(meta_args.data_type)
    args.max_value = hive.parameter(meta_args.data_type)

    i.min_value = hive.attribute(meta_args.data_type, args.min_value)
    i.max_value = hive.attribute(meta_args.data_type, args.max_value)

    i.value = hive.attribute(meta_args.data_type)
    i.result = hive.attribute(meta_args.data_type)

    i.pull_result = hive.pull_out(i.result)
    i.pull_value = hive.pull_in(i.value)

    ex.result = hive.output(i.pull_result)
    ex.value = hive.antenna(i.pull_value)

    def do_contrain(self):
        self._result = min(max(self._value, self._min_value), self._max_value)

    i.do_constrain = hive.modifier(do_contrain)
    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.do_constrain)


Constrain = hive.dyna_hive("Constrain", build_constrain, declare_constrain)
Ejemplo n.º 29
0
def build_operator(i, ex, args, meta_args):
    """HIVE interface to python mathematical operators"""
    assert meta_args.operator in operators
    op = operators[meta_args.operator]

    i.a = hive.attribute(meta_args.data_type)
    i.b = hive.attribute(meta_args.data_type)

    i.pull_a = hive.pull_in(i.a)
    ex.a = hive.antenna(i.pull_a)

    i.pull_b = hive.pull_in(i.b)
    ex.b = hive.antenna(i.pull_b)
    hive.trigger(i.pull_a, i.pull_b)

    i.result = hive.attribute(meta_args.data_type)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    def calc(self):
        self._result = op(self._a, self._b)

    i.run_operator = hive.modifier(calc)

    hive.trigger(i.pull_a, i.run_operator)
    hive.trigger(i.pull_result, i.pull_a, pretrigger=True)


MathOperator = hive.dyna_hive("MathOperator", build_operator, declare_operator)
Ejemplo n.º 30
0
        i.ppin = hive.pull_in(i.value_in)
        i.ppout = hive.pull_out(i.value_out)

        hive.trigger(i.ppout, i.ppin, pretrigger=True)

    ex.value_in = hive.antenna(i.ppin)
    ex.value_out = hive.output(i.ppout)

    # For casting (explicit conversion)
    if meta_args.conversion == "cast":
        to_type_tuple = hive.identifier_to_tuple(meta_args.to_data_type)
        to_base_type_name = to_type_tuple[0]

        value_cls = _type_map[to_base_type_name]

        def converter(self):
            self._value_out = value_cls(self._value_in)

        i.do_conversion = hive.modifier(converter)
        hive.trigger(i.ppout, i.do_conversion, pretrigger=True)

    # For duck typing, move value through
    else:
        i.move_value = hive.modifier(move_value)
        hive.trigger(i.ppin, i.move_value)


Convert = hive.dyna_hive("Convert",
                         builder=build_convert,
                         declarator=declare_convert)