# module `concrete.fhe.mlir.processors.assign_bit_widths` Declaration of `AssignBitWidths` graph processor. --- ## class `AssignBitWidths` AssignBitWidths graph processor, to assign proper bit-widths to be compatible with FHE. There are two modes: - Single Precision, where all encrypted values have the same precision. - Multi Precision, where encrypted values can have different precisions. There is preference list for comparison strategies. - Strategies will be traversed in order and bit-widths will be assigned according to the first available strategy. ### method `__init__` ```python __init__( single_precision: bool, composable: bool, comparison_strategy_preference: List[ComparisonStrategy], bitwise_strategy_preference: List[BitwiseStrategy], shifts_with_promotion: bool, multivariate_strategy_preference: List[MultivariateStrategy], min_max_strategy_preference: List[MinMaxStrategy] ) ``` --- ### method `apply` ```python apply(graph: Graph) ``` --- ## class `AdditionalConstraints` AdditionalConstraints class to customize bit-width assignment step easily. ### method `__init__` ```python __init__( optimizer: Optimize, graph: Graph, bit_widths: Dict[Node, Int], comparison_strategy_preference: List[ComparisonStrategy], bitwise_strategy_preference: List[BitwiseStrategy], shifts_with_promotion: bool, multivariate_strategy_preference: List[MultivariateStrategy], min_max_strategy_preference: List[MinMaxStrategy] ) ``` --- ### method `all_inputs_are_encrypted` ```python all_inputs_are_encrypted(node: Node, preds: List[Node]) → bool ``` --- ### method `bitwise` ```python bitwise(node: Node, preds: List[Node]) ``` --- ### method `comparison` ```python comparison(node: Node, preds: List[Node]) ``` --- ### method `constraint` ```python constraint(node: Node, constraint: BoolRef) ``` --- ### method `generate_for` ```python generate_for(node: Node, bit_width: ) ``` Generate additional constraints for a node. **Args:** node (Node): node to generate constraints for bit_width (z3.Int): symbolic bit-width which will be assigned to node once constraints are solved --- ### method `has_overflow_protection` ```python has_overflow_protection(node: Node, preds: List[Node]) → bool ``` --- ### method `inputs_and_output_share_precision` ```python inputs_and_output_share_precision(node: Node, preds: List[Node]) ``` --- ### method `inputs_require_one_more_bit` ```python inputs_require_one_more_bit(node: Node, preds: List[Node]) ``` --- ### method `inputs_share_precision` ```python inputs_share_precision(node: Node, preds: List[Node]) ``` --- ### method `min_max` ```python min_max(node: Node, preds: List[Node]) ``` --- ### method `multivariate` ```python multivariate(node: Node, preds: List[Node]) ``` --- ### method `some_inputs_are_clear` ```python some_inputs_are_clear(node: Node, preds: List[Node]) → bool ```