def test_raises_type_error(self, executor, value_and_type_signature): value, type_signature = value_and_type_signature value = self.run_sync(executor.create_value(value, type_signature)) arg = self.run_sync(executor.create_struct([value, value])) with self.assertRaises(TypeError): self.run_sync( executor_utils.compute_intrinsic_federated_weighted_mean( executor, arg))
def test_raises_type_error_with_singleton_tuple( self, executor, num_clients, ): value, type_signature = executor_test_utils.create_whimsy_value_at_clients( num_clients) value = self.run_sync(executor.create_value(value, type_signature)) arg = self.run_sync(executor.create_struct([value])) with self.assertRaises(TypeError): self.run_sync( executor_utils.compute_intrinsic_federated_weighted_mean( executor, arg))
def test_computes_weighted_mean( self, executor, num_clients, ): value, type_signature = executor_test_utils.create_whimsy_value_at_clients( num_clients) # Weighted mean computed in Python expected_result = sum([x**2 for x in value]) / sum(value) value = self.run_sync(executor.create_value(value, type_signature)) arg = self.run_sync(executor.create_struct([value, value])) result = self.run_sync( executor_utils.compute_intrinsic_federated_weighted_mean(executor, arg)) self.assertIsInstance(result, executor_value_base.ExecutorValue) expected_type = computation_types.at_server(type_signature.member) self.assertEqual(result.type_signature.compact_representation(), expected_type.compact_representation()) actual_result = self.run_sync(result.compute()) self.assertEqual(actual_result, expected_result)