candding 0.1.0

Pure candle embeddings for Rust with no ONNX: dense, sparse, multi-vector and rerank models today, image models on the roadmap
Documentation
//! What `cuda.yml` run 37127370028, the full sweep, left on an NVIDIA T4 where its F32 or F16 passed: the cells it
//! skipped or failed, which the derivation alone would read as verified.

use candle_core::DType;

use super::Backend;
use super::CellException;
use super::Support;

const BF16_NO_KERNELS: CellException = CellException {
  dtype: DType::BF16,
  backend: Backend::Cuda,
  status: Support::Untested,
  reason: "cuda.yml run 37127370028 on a T4: candle-kernels builds no BF16 kernels below sm_80, and the T4 is sm_75",
};

const F32_OVER_THE_CEILING: CellException = CellException {
  dtype: DType::F32,
  backend: Backend::Cuda,
  status: Support::Untested,
  reason: "cuda.yml run 37127370028 skipped F32 on a T4: 16 GB of F32 weights, over the sweep's 7 GB ceiling",
};

const F16_NAN: CellException = CellException {
  dtype: DType::F16,
  backend: Backend::Cuda,
  status: Support::Unsupported,
  reason: "cuda.yml run 37127370028 on a T4: F16 returned NaN vectors",
};

const F16_OVER_ITS_CEILING: CellException = CellException {
  dtype: DType::F16,
  backend: Backend::Cuda,
  status: Support::Unsupported,
  reason: "cuda.yml run 37127370028 on a T4: F16 scores[0][4] missed its ceiling, 7.974e-2 against 7.501e-2",
};

/// F32 and F16 passed; candle-kernels builds its BF16 kernels for sm_80 and newer only.
pub(crate) const T4_BF16_UNTESTED: &[CellException] = &[BF16_NO_KERNELS];

/// F16 passed; F32 did not run.
pub(crate) const T4_F32_AND_BF16_UNTESTED: &[CellException] =
  &[F32_OVER_THE_CEILING, BF16_NO_KERNELS];

/// F32 passed; F16 returned NaN, so CUDA refuses it.
pub(crate) const T4_F16_NAN_REFUSED: &[CellException] = &[F16_NAN, BF16_NO_KERNELS];

/// F32 passed; F16 missed its ceiling, so CUDA refuses it.
pub(crate) const T4_F16_MISS_REFUSED: &[CellException] = &[F16_OVER_ITS_CEILING, BF16_NO_KERNELS];