--- license: mit tags: - pytorch - safetensors - threshold-logic - neuromorphic --- # threshold-parity8 8-bit parity function. Outputs 1 if odd number of inputs are high. ## Function parity8(b0..b7) = b0 XOR b1 XOR b2 XOR b3 XOR b4 XOR b5 XOR b6 XOR b7 ## Architecture Balanced tree of 7 XOR2 gates: ``` b0 b1 b2 b3 b4 b5 b6 b7 \/ \/ \/ \/ xor01 xor23 xor45 xor67 (Level 1: 4 gates) \ / \ / xor0123 xor4567 (Level 2: 2 gates) \ / xor_final (Level 3: 1 gate) ``` Each XOR2 uses OR-NAND-AND structure (3 neurons, 9 params, magnitude 10). ## Parameters | | | |---|---| | Inputs | 8 | | Outputs | 1 | | Neurons | 21 | | Layers | 6 | | Parameters | 63 | | Magnitude | 70 | ## Usage ```python from safetensors.torch import load_file w = load_file('model.safetensors') def xor2(a, b, prefix): or_out = int(a * w[f'{prefix}.or.weight'][0] + b * w[f'{prefix}.or.weight'][1] + w[f'{prefix}.or.bias'] >= 0) nand_out = int(a * w[f'{prefix}.nand.weight'][0] + b * w[f'{prefix}.nand.weight'][1] + w[f'{prefix}.nand.bias'] >= 0) return int(or_out * w[f'{prefix}.and.weight'][0] + nand_out * w[f'{prefix}.and.weight'][1] + w[f'{prefix}.and.bias'] >= 0) def parity8(bits): x01 = xor2(bits[0], bits[1], 'xor_01') x23 = xor2(bits[2], bits[3], 'xor_23') x45 = xor2(bits[4], bits[5], 'xor_45') x67 = xor2(bits[6], bits[7], 'xor_67') x0123 = xor2(x01, x23, 'xor_0123') x4567 = xor2(x45, x67, 'xor_4567') return xor2(x0123, x4567, 'xor_final') print(parity8([1, 0, 1, 0, 1, 0, 1, 0])) # 0 (even) print(parity8([1, 1, 1, 0, 0, 0, 0, 0])) # 1 (odd) ``` ## License MIT