def federated_secure_sum(self, value, bitwidth): """Implements `federated_secure_sum` as defined in `api/intrinsics.py`.""" value = value_impl.to_value(value, None, self._context_stack) value = value_utils.ensure_federated_value(value, placements.CLIENTS, 'value to be summed') type_utils.check_is_structure_of_integers(value.type_signature) bitwidth = value_impl.to_value(bitwidth, None, self._context_stack) type_utils.check_equivalent_types(value.type_signature.member, bitwidth.type_signature) value = value_impl.ValueImpl.get_comp(value) bitwidth = value_impl.ValueImpl.get_comp(bitwidth) comp = building_block_factory.create_federated_secure_sum(value, bitwidth) return value_impl.ValueImpl(comp, self._context_stack)
def federated_secure_sum(self, value, bitwidth): """Implements `federated_secure_sum` as defined in `api/intrinsics.py`.""" value = value_impl.to_value(value, None, self._context_stack) value = value_utils.ensure_federated_value(value, placements.CLIENTS, 'value to be summed') type_utils.check_is_structure_of_integers(value.type_signature) bitwidth = value_impl.to_value(bitwidth, None, self._context_stack) value_member_ty = value.type_signature.member bitwidth_ty = bitwidth.type_signature if not type_utils.are_equivalent_types(value_member_ty, bitwidth_ty): raise TypeError( 'Expected `federated_secure_sum` parameters `value` and `bitwidth` ' 'to have the same structure. Found `value` of `{}` and `bitwidth` of `{}`' .format(value_member_ty, bitwidth_ty)) value = value_impl.ValueImpl.get_comp(value) bitwidth = value_impl.ValueImpl.get_comp(bitwidth) comp = building_block_factory.create_federated_secure_sum( value, bitwidth) return value_impl.ValueImpl(comp, self._context_stack)
def federated_secure_sum(self, value, bitwidth): """Implements `federated_secure_sum` as defined in `api/intrinsics.py`.""" value = value_impl.to_value(value, None, self._context_stack) value = value_utils.ensure_federated_value(value, placements.CLIENTS, 'value to be summed') type_utils.check_is_structure_of_integers(value.type_signature) bitwidth = value_impl.to_value(bitwidth, None, self._context_stack) value_member_type = value.type_signature.member bitwidth_type = bitwidth.type_signature if not type_utils.is_valid_bitwidth_type_for_value_type( bitwidth_type, value_member_type): raise TypeError( 'Expected `federated_secure_sum` parameter `bitwidth` to match ' 'the structure of `value`, with one integer bitwidth per tensor in ' '`value`. Found `value` of `{}` and `bitwidth` of `{}`.'.format( value_member_type, bitwidth_type)) value = value_impl.ValueImpl.get_comp(value) bitwidth = value_impl.ValueImpl.get_comp(bitwidth) comp = building_block_factory.create_federated_secure_sum(value, bitwidth) return value_impl.ValueImpl(comp, self._context_stack)