def federated_value(self, value, placement): """Implements `federated_value` as defined in `api/intrinsics.py`. Args: value: As in `api/intrinsics.py`. placement: As in `api/intrinsics.py`. Returns: As in `api/intrinsics.py`. Raises: TypeError: As in `api/intrinsics.py`. """ # TODO(b/113112108): Verify that neither the value, nor any of its parts # are of a federated type. value = value_impl.to_value(value, None, self._context_stack) value = value_impl.ValueImpl.get_comp(value) comp = computation_constructing_utils.create_federated_value( value, placement) return value_impl.ValueImpl(comp, self._context_stack)
def test_returns_federated_value_at_server(self): value = computation_building_blocks.Data('v', tf.int32) comp = computation_constructing_utils.create_federated_value( value, placement_literals.SERVER) self.assertEqual(comp.tff_repr, 'federated_value_at_server(v)') self.assertEqual(str(comp.type_signature), 'int32@SERVER')
def test_raises_type_error_with_unknown_placement(self): value = computation_building_blocks.Data('v', tf.int32) with self.assertRaises(TypeError): computation_constructing_utils.create_federated_value( value, 'unknown')
def test_raises_type_error_with_none_value(self): with self.assertRaises(TypeError): computation_constructing_utils.create_federated_value( None, placement_literals.CLIENTS)