Files
concrete/docs/dev/api/concrete.fhe.mlir.processors.assign_bit_widths.md
Benoit Chevallier-Mames 2424352dbf docs(compiler): update apidocs
2024-04-15 09:37:48 +02:00

7.5 KiB

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__

__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_many

apply_many(graphs: Dict[str, Graph])

class AdditionalConstraints

AdditionalConstraints class to customize bit-width assignment step easily.

method __init__

__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

all_inputs_are_encrypted(node: Node, preds: List[Node])  bool

method bitwise

bitwise(node: Node, preds: List[Node])

method comparison

comparison(node: Node, preds: List[Node])

method constraint

constraint(node: Node, constraint: BoolRef)

method generate_for

generate_for(node: Node, bit_width: <function Int at ADDRESS>)

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

has_overflow_protection(node: Node, preds: List[Node])  bool

method inputs_and_output_share_precision

inputs_and_output_share_precision(node: Node, preds: List[Node])

method inputs_require_one_more_bit

inputs_require_one_more_bit(node: Node, preds: List[Node])

method inputs_share_precision

inputs_share_precision(node: Node, preds: List[Node])

method min_max

min_max(node: Node, preds: List[Node])

method multivariate

multivariate(node: Node, preds: List[Node])

method some_inputs_are_clear

some_inputs_are_clear(node: Node, preds: List[Node])  bool