Skip to main content

BooFun Logo

Boolean Function Analysis in Python

PyPI version PyPI Downloads Python 3.10+ MIT License Documentation CI codecov mypy strict Ruff

What This Is

A toolkit for teaching, learning, and doing research in Boolean function analysis. Fourier analysis, property testing, query complexity, hypercontractivity, pseudorandomness, and more -- with 25 interactive notebooks aligned to O'Donnell's Analysis of Boolean Functions.

Built at UC Berkeley alongside Avishay Tal's CS 294-92. Cross-validated against SageMath, Tal's toolkit, and known closed-form results.

import boofun as bf

# Create functions, compute properties
maj = bf.majority(5)
maj.fourier()           # Fourier coefficients
maj.influences()        # Per-variable influences
maj.total_influence()   # I[f]
maj.noise_stability(0.9)

# Query complexity
from boofun.analysis import complexity
complexity.D(maj)       # Decision tree depth
complexity.s(maj)       # Max sensitivity

Full Docs | All 25 Notebooks | Try it in Colab

Installation

pip install boofun

Or run notebooks in Docker:

docker-compose up notebook  # localhost:8888, token: boofun

Quick Start

import boofun as bf

# Create functions
maj_5 = bf.majority(5)
xor_2 = bf.create([0, 1, 1, 0])

# Evaluate (callable syntax)
maj_5([1, 1, 0, 0, 1])  # → True (majority satisfied)
maj_5(7)                # → True (7 = 00111 in binary, 3 ones)

# Fourier analysis
maj_5.fourier()           # Fourier coefficients
maj_5.influences()        # Per-variable influences
maj_5.total_influence()   # I[f]
maj_5.noise_stability(0.9)

# Properties and complexity
maj_5.is_monotone()
maj_5.is_balanced()

from boofun.analysis import complexity
complexity.D(maj_5)  # Decision tree depth D(f)
complexity.s(maj_5)  # Max sensitivity s(f)

# Full analysis
maj_5.analyze()  # dict with all metrics

Features

Category What's Included
Built-in Functions Majority, Parity, AND, OR, Tribes, Threshold, Dictator, weighted LTF, random
Representations Truth tables (dense/sparse/packed), Fourier, ANF, DNF/CNF, BDD, circuits, LTF
Fourier Analysis WHT, influences, noise stability, spectral concentration, p-biased analysis
Query Complexity D(f), R(f), Q(f), sensitivity, block sensitivity, certificates, Ambainis bound
Property Testing BLR linearity, junta, monotonicity, symmetry, balance
Hypercontractivity Noise operator, Bonami's Lemma, KKL theorem, Friedgut's junta theorem
Learning Theory Goldreich-Levin, PAC learning, junta learning, LMN algorithm
Cryptographic Nonlinearity, bent functions, Walsh spectrum, LAT/DDT, S-box analysis
Advanced Gaussian analysis, invariance principle, communication complexity, LTF analysis
Visualization Influence plots, Fourier spectrum, truth table heatmaps, decision trees

Guides

Detailed documentation for each topic:

Flexible Input

bf.create([0, 1, 1, 0])              # List → truth table
bf.create(lambda x: x[0] ^ x[1], n=2) # Callable
bf.create("x0 and not x1", n=2)      # String → symbolic
bf.load("function.cnf")              # DIMACS CNF

Built-in Functions

majority(n), parity(n), tribes(k, n), threshold(n, k), AND(n), OR(n), dictator(n, i), weighted_majority(weights), random(n)

Examples

File Topic
01_getting_started.py Basics
02_fourier_basics.py WHT, Parseval
03_common_families.py Majority, Parity, Tribes
04_property_testing.py BLR, junta tests
05_query_complexity.py Sensitivity, certificates

Course Notebooks

Computational companion to O'Donnell's Analysis of Boolean Functions, following Avishay Tal's CS 294-92. Each notebook makes the theorems runnable so the focus stays on the math. Click Scribe for lecture notes, Topic to view the static notebook, or Play to run in Colab.

Lecture Notebooks (11)
Lecture Scribe Topic Play
1 Joyce Lu Fourier Expansion Open In Colab
2 Austin Pechan Linearity Testing Open In Colab
3 Vivien Goyal Social Choice & Influences Open In Colab
4 Patrick Bales Influences & Effects Open In Colab
5 Prastik Mohanraj Noise Stability Open In Colab
6 (upcoming) Spectral Concentration Open In Colab
7 Thomas Culhane Goldreich-Levin Open In Colab
8 Timothe Kasriel Learning Juntas Open In Colab
9 Qinggao Hong DNFs & Restrictions Open In Colab
10 Lucas Ericsson Fourier Concentration Open In Colab
11 Thapen Invariance Principle Open In Colab
Homework Notebooks (4)
HW Topic Play
1 Fourier Expansion Open In Colab
2 LTFs & Decision Trees Open In Colab
3 DNFs & Restrictions Open In Colab
4 Hypercontractivity Open In Colab
Supplementary Notebooks (10)
Topic Description Play
LTF Visualization 3D hyperplane geometry, influences Open In Colab
Global Hypercontractivity Keevash et al. threshold phenomena Open In Colab
Boolean Functions as Random Variables P-biased measures, threshold curves, Russo Open In Colab
Cryptographic Analysis Walsh spectrum, nonlinearity, SAC Open In Colab
Fractional PRGs Fourier tails, pseudorandomness (CHLT 2019) Open In Colab
Flexible Inputs & Oracles Input formats, lazy evaluation Open In Colab
Real World Applications Cryptography, ML, voting Open In Colab
Asymptotic Visualization Growth rates and scaling Open In Colab
Error Models PAC, noise, linear error models Open In Colab
GPU Performance GPU-accelerated WHT, influences (Colab GPU) Open In Colab

Performance

  • NumPy vectorization throughout (always on)
  • Numba JIT for 2-10x speedups: pip install boofun[performance]
  • CuPy GPU acceleration for large n: pip install boofun[gpu]
  • Sparse/packed representations for memory efficiency
  • Most operations complete in milliseconds for n ≤ 14

Testing

pytest tests/
pytest --cov=boofun tests/

3,800+ tests with ~79% line-and-branch coverage, enforced as a CI gate alongside strict mypy (zero errors, no baseline) and a zero-warning Ruff profile. Cross-validation against known results in tests/test_cross_validation.py.

Convention

O'Donnell standard: Boolean 0 → +1, Boolean 1 → −1. This ensures f̂(∅) = E[f].

Contributing

See CONTRIBUTING.md. Bug reports and test cases are especially valuable, and issues labeled good first issue are a good place to start. The roadmap lives on the issue tracker.

Acknowledgments

  • Avishay Tal: Course instructor, sensitivity analysis, p-biased measures, decision tree algorithms, Fourier analysis utilities. BooFun covers ~90% of Tal's BooleanFunc.py toolkit - see the migration guide for a complete mapping
  • Patrick Bales: Course materials and notebook review
  • O'Donnell's Analysis of Boolean Functions (Cambridge, 2014): Theoretical foundation
  • Scott Aaronson's Boolean Function Wizard (2000): Query complexity foundations

License

MIT. See LICENSE.

Citation

@software{boofun2026,
  title={BooFun: A Python Library for Boolean Function Analysis},
  author={Gabriel Taboada},
  year={2026},
  url={https://github.com/GabbyTab/boofun}
}

BooFun Logo

Metadata

Release files for boofun 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for boofun 1.3.0
File Size Uploaded Provenance
boofun-1.3.0.tar.gz 991.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for boofun 1.3.0
File Interpreter ABI Platform
boofun-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / boofun-1.3.0.tar.gz

Download URL boofun-1.3.0.tar.gz
Size 991.2 kB
Tags Source
SHA-256 checksum
How to use checksums
eff72f1477d47e59ce3e456c469096698f7262317dcc84b59c92ae16f9be6615
BLAKE2b-256 checksum
How to use checksums
045908c3021c82119565a4cee56f2b1ed6aaf90277da82889b3bc37a4f1a2875
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / boofun-1.3.0-py3-none-any.whl

Download URL boofun-1.3.0-py3-none-any.whl
Size 345.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
415226aa1a12c461af27f7006d1b74218a8436ab9948f52588966dca000b1798
BLAKE2b-256 checksum
How to use checksums
a408f70f780fbd715a60987d69584a51769298d465a64401e5b7cd8f0285c273
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Security for boofun 1.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page