LLZK 2.1.1
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
WitgenUtils.h
Go to the documentation of this file.
1//===-- WitgenUtils.h - llzk-witgen shared helpers --------------*- C++ -*-===//
2//
3// Part of the LLZK Project, under the Apache License v2.0.
4// See LICENSE.txt for license information.
5// Copyright 2026 Project LLZK
6// SPDX-License-Identifier: Apache-2.0
7//
8//===----------------------------------------------------------------------===//
9
10#pragma once
11
12#include "Errors.h"
13#include "WitgenDriver.h"
14
15#include <mlir/IR/BuiltinTypes.h>
16
17#include <llvm/ADT/ArrayRef.h>
18#include <llvm/ADT/DynamicAPInt.h>
19#include <llvm/ADT/StringRef.h>
20#include <llvm/Support/Error.h>
21
22#include <cstddef>
23#include <random>
24#include <utility>
25
26namespace llzk::witgen {
27
28template <typename T, typename U> inline llvm::Expected<T> checkedCast(U u) {
29 if (std::in_range<T>(u)) {
30 return static_cast<T>(u);
31 }
32 return makeError("lossy integer conversion");
33}
34
36std::mt19937_64 makeDefaultValueRng(const WitgenOptions &options);
37
39llvm::DynamicAPInt randomFieldElement(std::mt19937_64 &rng, const Field &field);
40
42int64_t randomIndexValue(std::mt19937_64 &rng);
43
45bool randomBoolValue(std::mt19937_64 &rng);
46
48llvm::Expected<size_t> checkedShapeDimToSize(int64_t dim, llvm::StringRef context);
49
51llvm::Expected<size_t>
52checkedDynamicAPIntToSize(const llvm::DynamicAPInt &value, llvm::StringRef context);
53
55llvm::Expected<size_t>
56getStaticShapeElementCount(llvm::ArrayRef<int64_t> shape, llvm::StringRef context);
57
59llvm::Expected<size_t> getStaticElementCount(mlir::ShapedType type, llvm::StringRef context);
60
61} // namespace llzk::witgen
Information about the prime finite field used for the interval analysis.
Definition Field.h:36
llvm::Expected< T > checkedCast(U u)
Definition WitgenUtils.h:28
std::mt19937_64 makeDefaultValueRng(const WitgenOptions &options)
Seed an RNG for random/default witness value materialization.
llvm::Expected< size_t > getStaticShapeElementCount(llvm::ArrayRef< int64_t > shape, llvm::StringRef context)
Return the static element count for one shape, rejecting dynamic sizes.
llvm::DynamicAPInt randomFieldElement(std::mt19937_64 &rng, const Field &field)
Draw a uniformly distributed field element in [0, prime).
bool randomBoolValue(std::mt19937_64 &rng)
Draw a uniformly distributed boolean value.
llvm::Expected< size_t > checkedDynamicAPIntToSize(const llvm::DynamicAPInt &value, llvm::StringRef context)
Convert a DynamicAPInt into size_t after validating its range.
llvm::Expected< size_t > getStaticElementCount(ShapedType type, llvm::StringRef context)
llvm::Expected< size_t > checkedShapeDimToSize(int64_t dim, llvm::StringRef context)
Convert one static dimension to size_t, rejecting dynamic or invalid sizes.
int64_t randomIndexValue(std::mt19937_64 &rng)
Draw a uniformly distributed signed index value.
llvm::Error makeError(const llvm::Twine &msg)
Build a string-backed error for user-facing witgen failures.
Definition Errors.h:18