This subpackage (pycse.sklearn.zenn) is an independent JAX/Flax implementation
of ZENN (Zentropy-Enhanced Neural Network), written for pycse from the
method described in the paper below. It is not a copy of the authors' code.

Paper:
  Wang, S.; Shang, S.-L.; Liu, Z.-K.; Hao, W. (2026).
  "ZENN: A thermodynamics-inspired computational framework for
  heterogeneous data-driven modeling."
  Proceedings of the National Academy of Sciences 123(1): e2511227122.
  doi:10.1073/pnas.2511227122

BibTeX:
  @article{wang2026zenn,
    title={ZENN: A thermodynamics-inspired computational framework for
           heterogeneous data-driven modeling},
    author={Wang, Shun and Shang, Shun-Li and Liu, Zi-Kui and Hao, Wenrui},
    journal={Proceedings of the National Academy of Sciences},
    volume={123},
    number={1},
    pages={e2511227122},
    year={2026},
    doi={10.1073/pnas.2511227122}
  }

The authors' reference code (PyTorch research scripts and notebooks for the
paper's experiments) is at https://github.com/WilliamMoriaty/ZENN.

Differences from the authors' reference code:
  - Packaged as sklearn-compatible estimators (ZENNClassifier, ZENNRegressor,
    ZENNRegressorNLL) built on JAX/Flax instead of per-experiment PyTorch
    scripts.
  - Configuration entropy is kept non-negative with softplus(net) rather
    than net**2.
  - ZENNRegressor defaults to a negative log-likelihood (NLL) loss in which
    sigma^2 = sum_k p_k S_k, so the entropy networks also act as a noise
    model. This is an addition, not part of the paper. MSE, hybrid, and
    Jensen-Shannon losses are also available.
  - Adds uncertainty tools (aleatoric/epistemic decomposition, prediction
    intervals, calibration metrics, OOD scores, selective prediction), a
    Chebyshev KAN backbone option, and critical-point/bifurcation analysis.

This code is part of pycse and is distributed under pycse's license
(GPL-3.0-or-later).
