Exemplo n.º 1
0
    def from_tensor(self, *, tensor, batched, name='TensorSpec.from_tensor'):
        if not isinstance(tensor, TensorDict):
            raise TensorforceError.type(name=name, argument='tensor', dtype=type(tensor))

        # TODO: improve exception message to include invalid keys
        if set(tensor) != set(self):
            raise TensorforceError.value(name=name, argument='tensor', value=tensor)

        value = ArrayDict()
        for name, spec in super(NestedDict, self).items():
            value[name] = spec.from_tensor(tensor=tensor[name], batched=batched, name=name)
        return value
Exemplo n.º 2
0
    def to_tensor(self, *, value, batched, recover_empty=False, name='TensorSpec.to_tensor'):
        if not isinstance(value, ArrayDict):
            raise TensorforceError.type(name=name, argument='value', dtype=type(value))

        # TODO: improve exception message to include invalid keys
        if set(value) != set(self):
            raise TensorforceError.value(name=name, argument='value', value=value)

        tensor = TensorDict()
        for name, spec in super(NestedDict, self).items():
            if recover_empty and name not in value:
                assert not isinstance(spec, self.value_type) and len(spec) == 0
                tensor[name] = spec.to_tensor(
                    value=ArrayDict(), batched=batched, recover_empty=recover_empty
                )
            else:
                tensor[name] = spec.to_tensor(
                    value=value[name], batched=batched, recover_empty=recover_empty
                )
        return tensor
Exemplo n.º 3
0
 def internals_init(self):
     return ArrayDict()