{
  "keygen_time_s": 0.0102670689993829,
  "note": "Pure-Python validation prototype. Do not compare wall-clock directly against optimized FHE libraries.",
  "operations": [
    "add",
    "sub",
    "neg",
    "scalar_mul",
    "add_const",
    "mul",
    "square",
    "affine",
    "dot4",
    "poly2",
    "product4",
    "quadratic_form",
    "and",
    "or",
    "xor",
    "not",
    "nand",
    "nor",
    "xnor",
    "implies"
  ],
  "preset": "c4_projective_toy_clean",
  "profiles": {
    "add": {
      "additions": 1,
      "bfv_bgv_ct_adds": 1,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 2,
      "multiplicative_depth": 0,
      "name": "add",
      "notes": "encrypted x+y over F_q",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "add_const": {
      "additions": 1,
      "bfv_bgv_ct_adds": 1,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 1,
      "multiplicative_depth": 0,
      "name": "add_const",
      "notes": "x+c using public exact cI_N",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "affine": {
      "additions": 2,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 2,
      "multiplicative_depth": 0,
      "name": "affine",
      "notes": "3x+2y+5",
      "public_constants": 1,
      "scalar_muls": 2,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "and": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "and",
      "notes": "Boolean AND as xy",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 1
    },
    "dot4": {
      "additions": 4,
      "bfv_bgv_ct_adds": 4,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 4,
      "multiplicative_depth": 0,
      "name": "dot4",
      "notes": "public-coefficient dot product",
      "public_constants": 1,
      "scalar_muls": 4,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "implies": {
      "additions": 1,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "implies",
      "notes": "Boolean implication as 1-x+xy",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    },
    "mul": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "mul",
      "notes": "encrypted multiplication x*y",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 1
    },
    "nand": {
      "additions": 0,
      "bfv_bgv_ct_adds": 1,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "nand",
      "notes": "Boolean NAND as 1-xy",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    },
    "neg": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 1,
      "multiplicative_depth": 0,
      "name": "neg",
      "notes": "public scalar -1 times encrypted x",
      "public_constants": 0,
      "scalar_muls": 1,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "nor": {
      "additions": 1,
      "bfv_bgv_ct_adds": 3,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "nor",
      "notes": "Boolean NOR as 1-(x+y-xy)",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    },
    "not": {
      "additions": 0,
      "bfv_bgv_ct_adds": 1,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 1,
      "multiplicative_depth": 0,
      "name": "not",
      "notes": "Boolean NOT as 1-x",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 0
    },
    "or": {
      "additions": 1,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "or",
      "notes": "Boolean OR as x+y-xy",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    },
    "poly2": {
      "additions": 2,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 2,
      "ciphertext_multiplications": 2,
      "inputs": 1,
      "multiplicative_depth": 2,
      "name": "poly2",
      "notes": "3+2x+5x^2 via Horner",
      "public_constants": 2,
      "scalar_muls": 1,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 2
    },
    "product4": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 3,
      "ciphertext_multiplications": 3,
      "inputs": 4,
      "multiplicative_depth": 2,
      "name": "product4",
      "notes": "balanced product x1*x2*x3*x4",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 3
    },
    "quadratic_form": {
      "additions": 2,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 2,
      "ciphertext_multiplications": 2,
      "inputs": 4,
      "multiplicative_depth": 1,
      "name": "quadratic_form",
      "notes": "x1*x2+x3*x4+5",
      "public_constants": 1,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 2
    },
    "scalar_mul": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 1,
      "multiplicative_depth": 0,
      "name": "scalar_mul",
      "notes": "public scalar times encrypted x",
      "public_constants": 0,
      "scalar_muls": 1,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 0
    },
    "square": {
      "additions": 0,
      "bfv_bgv_ct_adds": 0,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 1,
      "multiplicative_depth": 1,
      "name": "square",
      "notes": "encrypted square x^2",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 0,
      "tfhe_boolean_gate_proxy": 1
    },
    "sub": {
      "additions": 0,
      "bfv_bgv_ct_adds": 1,
      "bfv_bgv_ct_muls": 0,
      "ciphertext_multiplications": 0,
      "inputs": 2,
      "multiplicative_depth": 0,
      "name": "sub",
      "notes": "encrypted x-y over F_q",
      "public_constants": 0,
      "scalar_muls": 0,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 0
    },
    "xnor": {
      "additions": 1,
      "bfv_bgv_ct_adds": 3,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "xnor",
      "notes": "Boolean XNOR as 1-(x+y-2xy)",
      "public_constants": 1,
      "scalar_muls": 1,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    },
    "xor": {
      "additions": 1,
      "bfv_bgv_ct_adds": 2,
      "bfv_bgv_ct_muls": 1,
      "ciphertext_multiplications": 1,
      "inputs": 2,
      "multiplicative_depth": 1,
      "name": "xor",
      "notes": "Boolean XOR as x+y-2xy",
      "public_constants": 0,
      "scalar_muls": 1,
      "subtractions": 1,
      "tfhe_boolean_gate_proxy": 1
    }
  },
  "summary_by_operation": {
    "add": {
      "build_eval_time_s": {
        "max": 0.0005081599992990959,
        "mean": 0.00043594033316670294,
        "median": 0.0004061399995407555,
        "min": 0.0003935210006602574
      },
      "compact_decrypt_time_s": {
        "max": 0.0013489100001606857,
        "mean": 0.0010727493336162297,
        "median": 0.0010172410002269316,
        "min": 0.0008520970004610717
      },
      "failures": 0,
      "max_row_support_seen": 4,
      "max_total_output_nnz_seen": 140,
      "successes": 3,
      "total_time_s": {
        "max": 0.0017424310008209432,
        "mean": 0.0015086896667829326,
        "median": 0.0014233809997676872,
        "min": 0.0013602569997601677
      },
      "trials": 3
    },
    "add_const": {
      "build_eval_time_s": {
        "max": 0.0002294790010637371,
        "mean": 0.00022884133310678104,
        "median": 0.0002288979994773399,
        "min": 0.00022814699877926614
      },
      "compact_decrypt_time_s": {
        "max": 0.0008631229993625311,
        "mean": 0.0007698890003666747,
        "median": 0.0007364160010183696,
        "min": 0.0007101280007191235
      },
      "failures": 0,
      "max_row_support_seen": 4,
      "max_total_output_nnz_seen": 141,
      "successes": 3,
      "total_time_s": {
        "max": 0.0010926020004262682,
        "mean": 0.0009987303334734559,
        "median": 0.0009653140004957095,
        "min": 0.0009382749994983897
      },
      "trials": 3
    },
    "affine": {
      "build_eval_time_s": {
        "max": 0.0006569990000571124,
        "mean": 0.0005939163329458097,
        "median": 0.0005701019999833079,
        "min": 0.0005546479987970088
      },
      "compact_decrypt_time_s": {
        "max": 0.0011037490003218409,
        "mean": 0.0009199573341902578,
        "median": 0.0008504040015395731,
        "min": 0.0008057190007093595
      },
      "failures": 0,
      "max_row_support_seen": 5,
      "max_total_output_nnz_seen": 173,
      "successes": 3,
      "total_time_s": {
        "max": 0.0016583969991188496,
        "mean": 0.0015138736671360675,
        "median": 0.001462718000766472,
        "min": 0.001420506001522881
      },
      "trials": 3
    },
    "and": {
      "build_eval_time_s": {
        "max": 0.0004796070006705122,
        "mean": 0.000470877666278587,
        "median": 0.0004684709983848734,
        "min": 0.0004645549997803755
      },
      "compact_decrypt_time_s": {
        "max": 0.0010316829993826104,
        "mean": 0.0010041753333401477,
        "median": 0.0010307910015399102,
        "min": 0.0009500519990979228
      },
      "failures": 0,
      "max_row_support_seen": 7,
      "max_total_output_nnz_seen": 185,
      "successes": 3,
      "total_time_s": {
        "max": 0.0015112900000531226,
        "mean": 0.001475052999618735,
        "median": 0.0014992619999247836,
        "min": 0.0014146069988782983
      },
      "trials": 3
    },
    "dot4": {
      "build_eval_time_s": {
        "max": 0.001014426999972784,
        "mean": 0.0009915329998572513,
        "median": 0.0009802559998206561,
        "min": 0.0009799159997783136
      },
      "compact_decrypt_time_s": {
        "max": 0.0011372879998816643,
        "mean": 0.0009934393328876467,
        "median": 0.0009627109993743943,
        "min": 0.0008803189994068816
      },
      "failures": 0,
      "max_row_support_seen": 7,
      "max_total_output_nnz_seen": 207,
      "successes": 3,
      "total_time_s": {
        "max": 0.0021517149998544483,
        "mean": 0.001984972332744898,
        "median": 0.0019426269991527079,
        "min": 0.0018605749992275378
      },
      "trials": 3
    },
    "implies": {
      "build_eval_time_s": {
        "max": 0.0007584089998999843,
        "mean": 0.0007289890005874137,
        "median": 0.0007374280012300005,
        "min": 0.0006911300006322563
      },
      "compact_decrypt_time_s": {
        "max": 0.0012231349992362084,
        "mean": 0.0011758246661581022,
        "median": 0.0012230039992573438,
        "min": 0.0010813349999807542
      },
      "failures": 0,
      "max_row_support_seen": 10,
      "max_total_output_nnz_seen": 243,
      "successes": 3,
      "total_time_s": {
        "max": 0.0019815439991361927,
        "mean": 0.0019048136667455158,
        "median": 0.0019604320004873443,
        "min": 0.0017724650006130105
      },
      "trials": 3
    },
    "mul": {
      "build_eval_time_s": {
        "max": 0.0005325260008248733,
        "mean": 0.0004951773335051257,
        "median": 0.000498716000947752,
        "min": 0.0004542899987427518
      },
      "compact_decrypt_time_s": {
        "max": 0.0011713479998434195,
        "mean": 0.0011007989996869583,
        "median": 0.001104163999116281,
        "min": 0.0010268850001011742
      },
      "failures": 0,
      "max_row_support_seen": 7,
      "max_total_output_nnz_seen": 183,
      "successes": 3,
      "total_time_s": {
        "max": 0.0016256379985861713,
        "mean": 0.001595976333192084,
        "median": 0.001602880000064033,
        "min": 0.0015594110009260476
      },
      "trials": 3
    },
    "nand": {
      "build_eval_time_s": {
        "max": 0.0006067949998396216,
        "mean": 0.0005580999998831734,
        "median": 0.0005498110003827605,
        "min": 0.0005176939994271379
      },
      "compact_decrypt_time_s": {
        "max": 0.0012549120001494884,
        "mean": 0.0011180700003023958,
        "median": 0.001160732999778702,
        "min": 0.000938565000978997
      },
      "failures": 0,
      "max_row_support_seen": 7,
      "max_total_output_nnz_seen": 213,
      "successes": 3,
      "total_time_s": {
        "max": 0.001804723000532249,
        "mean": 0.001676170000185569,
        "median": 0.0017675279996183235,
        "min": 0.0014562590004061349
      },
      "trials": 3
    },
    "neg": {
      "build_eval_time_s": {
        "max": 0.0002449610001349356,
        "mean": 0.00020879799982746286,
        "median": 0.0001945669991982868,
        "min": 0.0001868660001491662
      },
      "compact_decrypt_time_s": {
        "max": 0.0006492079992312938,
        "mean": 0.0006468943332341345,
        "median": 0.0006491280000773259,
        "min": 0.0006423470003937837
      },
      "failures": 0,
      "max_row_support_seen": 3,
      "max_total_output_nnz_seen": 110,
      "successes": 3,
      "total_time_s": {
        "max": 0.0008940890002122615,
        "mean": 0.0008556923330615973,
        "median": 0.0008369139995920705,
        "min": 0.00083607399938046
      },
      "trials": 3
    },
    "nor": {
      "build_eval_time_s": {
        "max": 0.0008116769986372674,
        "mean": 0.0007724763327132678,
        "median": 0.0007849880003050203,
        "min": 0.0007207639991975157
      },
      "compact_decrypt_time_s": {
        "max": 0.001215883999975631,
        "mean": 0.0010390163339858798,
        "median": 0.0010420470007375116,
        "min": 0.0008591180012444966
      },
      "failures": 0,
      "max_row_support_seen": 9,
      "max_total_output_nnz_seen": 246,
      "successes": 3,
      "total_time_s": {
        "max": 0.0020008720002806513,
        "mean": 0.0018114926666991475,
        "median": 0.0017628109999350272,
        "min": 0.001670794999881764
      },
      "trials": 3
    },
    "not": {
      "build_eval_time_s": {
        "max": 0.00024290799956361298,
        "mean": 0.00024038433366513345,
        "median": 0.00024136600040947087,
        "min": 0.00023687900102231652
      },
      "compact_decrypt_time_s": {
        "max": 0.0006893580011819722,
        "mean": 0.000629288999941006,
        "median": 0.0006123839993961155,
        "min": 0.0005861249992449302
      },
      "failures": 0,
      "max_row_support_seen": 4,
      "max_total_output_nnz_seen": 135,
      "successes": 3,
      "total_time_s": {
        "max": 0.0009322660007455852,
        "mean": 0.0008696733336061394,
        "median": 0.0008537499998055864,
        "min": 0.0008230040002672467
      },
      "trials": 3
    },
    "or": {
      "build_eval_time_s": {
        "max": 0.0006279860008362448,
        "mean": 0.0005958486672170693,
        "median": 0.0005871960001968546,
        "min": 0.0005723640006181085
      },
      "compact_decrypt_time_s": {
        "max": 0.001150206999227521,
        "mean": 0.0008910046659972674,
        "median": 0.0009867959997791331,
        "min": 0.000536010998985148
      },
      "failures": 0,
      "max_row_support_seen": 8,
      "max_total_output_nnz_seen": 231,
      "successes": 3,
      "total_time_s": {
        "max": 0.0017374029994243756,
        "mean": 0.0014868533332143368,
        "median": 0.0015591600003972417,
        "min": 0.0011639969998213928
      },
      "trials": 3
    },
    "poly2": {
      "build_eval_time_s": {
        "max": 0.0006896670001879102,
        "mean": 0.000653347333354759,
        "median": 0.0006584120001207339,
        "min": 0.0006119629997556331
      },
      "compact_decrypt_time_s": {
        "max": 0.0011615140010690084,
        "mean": 0.0010653953334743467,
        "median": 0.0011128919995826436,
        "min": 0.0009217799997713882
      },
      "failures": 0,
      "max_row_support_seen": 9,
      "max_total_output_nnz_seen": 263,
      "successes": 3,
      "total_time_s": {
        "max": 0.0018511810012569185,
        "mean": 0.0017187426668291057,
        "median": 0.0017713039997033775,
        "min": 0.0015337429995270213
      },
      "trials": 3
    },
    "product4": {
      "build_eval_time_s": {
        "max": 0.0013777120002487209,
        "mean": 0.0013537406666728202,
        "median": 0.001359235999188968,
        "min": 0.0013242740005807718
      },
      "compact_decrypt_time_s": {
        "max": 0.001678796999840415,
        "mean": 0.0014762646666592143,
        "median": 0.0014483869999821763,
        "min": 0.0013016100001550512
      },
      "failures": 0,
      "max_row_support_seen": 12,
      "max_total_output_nnz_seen": 351,
      "successes": 3,
      "total_time_s": {
        "max": 0.003056509000089136,
        "mean": 0.0028300053333320343,
        "median": 0.0028076229991711443,
        "min": 0.002625884000735823
      },
      "trials": 3
    },
    "quadratic_form": {
      "build_eval_time_s": {
        "max": 0.0015178600006038323,
        "mean": 0.001244125666441202,
        "median": 0.001174001999970642,
        "min": 0.0010405149987491313
      },
      "compact_decrypt_time_s": {
        "max": 0.0014077670002734521,
        "mean": 0.0013466999995822941,
        "median": 0.0013466969994624378,
        "min": 0.0012856359990109922
      },
      "failures": 0,
      "max_row_support_seen": 9,
      "max_total_output_nnz_seen": 264,
      "successes": 3,
      "total_time_s": {
        "max": 0.0028034959996148245,
        "mean": 0.002590825666023496,
        "median": 0.0025206989994330797,
        "min": 0.0024482819990225835
      },
      "trials": 3
    },
    "scalar_mul": {
      "build_eval_time_s": {
        "max": 0.00018975000057253055,
        "mean": 0.0001810869998735143,
        "median": 0.00018339999951422215,
        "min": 0.00017011099953379016
      },
      "compact_decrypt_time_s": {
        "max": 0.0007595610004500486,
        "mean": 0.0006999126665808338,
        "median": 0.0006968379984755302,
        "min": 0.0006433390008169226
      },
      "failures": 0,
      "max_row_support_seen": 3,
      "max_total_output_nnz_seen": 108,
      "successes": 3,
      "total_time_s": {
        "max": 0.0009429609999642707,
        "mean": 0.0008809996664543481,
        "median": 0.0008865879990480607,
        "min": 0.0008134500003507128
      },
      "trials": 3
    },
    "square": {
      "build_eval_time_s": {
        "max": 0.0003649480004241923,
        "mean": 0.0003521430007822346,
        "median": 0.0003569270011212211,
        "min": 0.0003345540008012904
      },
      "compact_decrypt_time_s": {
        "max": 0.0014165499997034203,
        "mean": 0.0013417459995253012,
        "median": 0.0013696499991056044,
        "min": 0.0012390379997668788
      },
      "failures": 0,
      "max_row_support_seen": 7,
      "max_total_output_nnz_seen": 222,
      "successes": 3,
      "total_time_s": {
        "max": 0.0017814980001276126,
        "mean": 0.0016938890003075358,
        "median": 0.0017265770002268255,
        "min": 0.0015735920005681692
      },
      "trials": 3
    },
    "sub": {
      "build_eval_time_s": {
        "max": 0.0003484640001261141,
        "mean": 0.0003413800004636869,
        "median": 0.000340402000801987,
        "min": 0.0003352740004629595
      },
      "compact_decrypt_time_s": {
        "max": 0.0009986339991883142,
        "mean": 0.0009408720003799923,
        "median": 0.0009693610008980613,
        "min": 0.0008546210010536015
      },
      "failures": 0,
      "max_row_support_seen": 4,
      "max_total_output_nnz_seen": 140,
      "successes": 3,
      "total_time_s": {
        "max": 0.0013390359999903012,
        "mean": 0.0012822520008436793,
        "median": 0.0013178250010241754,
        "min": 0.001189895001516561
      },
      "trials": 3
    },
    "xnor": {
      "build_eval_time_s": {
        "max": 0.0008591169989813352,
        "mean": 0.0008352989995425256,
        "median": 0.0008345710011781193,
        "min": 0.0008122089984681224
      },
      "compact_decrypt_time_s": {
        "max": 0.0014865230004943442,
        "mean": 0.0012801753334012271,
        "median": 0.0013446440007101046,
        "min": 0.0010093589989992324
      },
      "failures": 0,
      "max_row_support_seen": 9,
      "max_total_output_nnz_seen": 266,
      "successes": 3,
      "total_time_s": {
        "max": 0.0023456399994756794,
        "mean": 0.002115474332943753,
        "median": 0.002156852999178227,
        "min": 0.0018439300001773518
      },
      "trials": 3
    },
    "xor": {
      "build_eval_time_s": {
        "max": 0.0008192490004148567,
        "mean": 0.0007149716663358655,
        "median": 0.000761052999223466,
        "min": 0.0005646129993692739
      },
      "compact_decrypt_time_s": {
        "max": 0.001189804999739863,
        "mean": 0.0011301473332423484,
        "median": 0.001189534999866737,
        "min": 0.0010111020001204452
      },
      "failures": 0,
      "max_row_support_seen": 9,
      "max_total_output_nnz_seen": 242,
      "successes": 3,
      "total_time_s": {
        "max": 0.0020090540001547197,
        "mean": 0.001845118999578214,
        "median": 0.0017721549993439112,
        "min": 0.001754147999236011
      },
      "trials": 3
    }
  }
}
