leo_ast/functions/
intrinsic.rs

1// Copyright (C) 2019-2025 Provable Inc.
2// This file is part of the Leo library.
3
4// The Leo library is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// The Leo library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
16
17use crate::{ArrayType, IntegerType, Type};
18
19use leo_span::{Span, Symbol, sym};
20
21use snarkvm::{
22    prelude::LiteralType,
23    synthesizer::program::{CommitVariant, DeserializeVariant, ECDSAVerifyVariant, HashVariant, SerializeVariant},
24};
25
26/// An instrinsic operation directly implemented by the compiler.
27#[derive(Clone, Debug, PartialEq, Eq)]
28pub enum Intrinsic {
29    // ChaCha random value of type (LiteralType).
30    ChaChaRand(LiteralType),
31    // Commitment to a value using hash (HashVariant) returning value of type (LiteralType).
32    Commit(CommitVariant, LiteralType),
33    // ECDSA verify with hash (HashVariant) and the ETH variant (bool).
34    ECDSAVerify(ECDSAVerifyVariant),
35    // Hash function with variant (HashVariant) returning value of type (LiteralType).
36    Hash(HashVariant, Type),
37
38    // These are used for both mappings and vectors
39    Get,
40    Set,
41
42    MappingGetOrUse,
43    MappingRemove,
44    MappingContains,
45
46    OptionalUnwrap,
47    OptionalUnwrapOr,
48
49    VectorPush,
50    VectorLen,
51    VectorClear,
52    VectorPop,
53    VectorSwapRemove,
54
55    GroupToXCoordinate,
56    GroupToYCoordinate,
57    GroupGen,
58
59    // Schnorr signature verification.
60    SignatureVerify,
61
62    FutureAwait,
63
64    ProgramChecksum,
65    ProgramEdition,
66    ProgramOwner,
67
68    Serialize(SerializeVariant),
69
70    // Note. `Deserialize` cannot be instantiated via `from_symbols` as it requires a type argument.
71    Deserialize(DeserializeVariant, Type),
72
73    SelfAddress,
74    SelfCaller,
75    SelfChecksum,
76    SelfEdition,
77    SelfId,
78    SelfProgramOwner,
79    SelfSigner,
80    BlockHeight,
81    BlockTimestamp,
82    NetworkId,
83
84    CheatCodePrintMapping,
85    CheatCodeSetBlockHeight,
86    CheatCodeSetBlockTimestamp,
87    CheatCodeSetSigner,
88}
89
90impl Intrinsic {
91    /// Returns a `Intrinsic` from a single symbol.
92    // TODO: turn into From implementation when old syntax is deprecated
93    #[rustfmt::skip]
94    pub fn from_symbol(name: Symbol, type_parameters: &[(Type, Span)]) -> Option<Self> {
95        Some(match name {
96            s if s == Symbol::intern("__unresolved_get") => Self::Get,
97            s if s == Symbol::intern("__unresolved_set") => Self::Set,
98            sym::_self_address => Self::SelfAddress,
99            sym::_self_caller => Self::SelfCaller,
100            sym::_self_checksum => Self::SelfChecksum,
101            sym::_self_edition => Self::SelfEdition,
102            sym::_self_id => Self::SelfId,
103            sym::_self_program_owner => Self::SelfProgramOwner,
104            sym::_self_signer => Self::SelfSigner,
105            sym::_block_height => Self::BlockHeight,
106            sym::_block_timestamp => Self::BlockTimestamp,
107            sym::_network_id => Self::NetworkId,
108            sym::_deserialize_from_bits => Self::Deserialize(DeserializeVariant::FromBits, type_parameters[0].0.clone()),
109            sym::_deserialize_from_bits_raw => Self::Deserialize(DeserializeVariant::FromBitsRaw, type_parameters[0].0.clone()),
110            sym::_group_gen => Self::GroupGen,
111            sym::_chacha_rand_address => Self::ChaChaRand(LiteralType::Address),
112            sym::_chacha_rand_bool    => Self::ChaChaRand(LiteralType::Boolean),
113            sym::_chacha_rand_field   => Self::ChaChaRand(LiteralType::Field),
114            sym::_chacha_rand_group   => Self::ChaChaRand(LiteralType::Group),
115            sym::_chacha_rand_i8      => Self::ChaChaRand(LiteralType::I8),
116            sym::_chacha_rand_i16     => Self::ChaChaRand(LiteralType::I16),
117            sym::_chacha_rand_i32     => Self::ChaChaRand(LiteralType::I32),
118            sym::_chacha_rand_i64     => Self::ChaChaRand(LiteralType::I64),
119            sym::_chacha_rand_i128    => Self::ChaChaRand(LiteralType::I128),
120            sym::_chacha_rand_u8      => Self::ChaChaRand(LiteralType::U8),
121            sym::_chacha_rand_u16     => Self::ChaChaRand(LiteralType::U16),
122            sym::_chacha_rand_u32     => Self::ChaChaRand(LiteralType::U32),
123            sym::_chacha_rand_u64     => Self::ChaChaRand(LiteralType::U64),
124            sym::_chacha_rand_u128    => Self::ChaChaRand(LiteralType::U128),
125            sym::_chacha_rand_scalar  => Self::ChaChaRand(LiteralType::Scalar),
126            sym::_bhp256_commit_to_address => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Address),
127            sym::_bhp256_commit_to_field   => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Field),
128            sym::_bhp256_commit_to_group   => Self::Commit(CommitVariant::CommitBHP256, LiteralType::Group),
129            sym::_bhp512_commit_to_address => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Address),
130            sym::_bhp512_commit_to_field   => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Field),
131            sym::_bhp512_commit_to_group   => Self::Commit(CommitVariant::CommitBHP512, LiteralType::Group),
132            sym::_bhp768_commit_to_address => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Address),
133            sym::_bhp768_commit_to_field   => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Field),
134            sym::_bhp768_commit_to_group   => Self::Commit(CommitVariant::CommitBHP768, LiteralType::Group),
135            sym::_bhp1024_commit_to_address => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Address),
136            sym::_bhp1024_commit_to_field   => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Field),
137            sym::_bhp1024_commit_to_group   => Self::Commit(CommitVariant::CommitBHP1024, LiteralType::Group),
138            sym::_pedersen64_commit_to_address => Self::Commit(CommitVariant::CommitPED64, LiteralType::Address),
139            sym::_pedersen64_commit_to_field   => Self::Commit(CommitVariant::CommitPED64, LiteralType::Field),
140            sym::_pedersen64_commit_to_group   => Self::Commit(CommitVariant::CommitPED64, LiteralType::Group),
141            sym::_pedersen128_commit_to_address => Self::Commit(CommitVariant::CommitPED128, LiteralType::Address),
142            sym::_pedersen128_commit_to_field   => Self::Commit(CommitVariant::CommitPED128, LiteralType::Field),
143            sym::_pedersen128_commit_to_group   => Self::Commit(CommitVariant::CommitPED128, LiteralType::Group),
144            sym::_bhp256_hash_to_address     => Self::Hash(HashVariant::HashBHP256, Type::Address),
145            sym::_bhp256_hash_to_field       => Self::Hash(HashVariant::HashBHP256, Type::Field),
146            sym::_bhp256_hash_to_group       => Self::Hash(HashVariant::HashBHP256, Type::Group),
147            sym::_bhp256_hash_to_i8          => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I8)),
148            sym::_bhp256_hash_to_i16         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I16)),
149            sym::_bhp256_hash_to_i32         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I32)),
150            sym::_bhp256_hash_to_i64         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I64)),
151            sym::_bhp256_hash_to_i128        => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::I128)),
152            sym::_bhp256_hash_to_u8          => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U8)),
153            sym::_bhp256_hash_to_u16         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U16)),
154            sym::_bhp256_hash_to_u32         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U32)),
155            sym::_bhp256_hash_to_u64         => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U64)),
156            sym::_bhp256_hash_to_u128        => Self::Hash(HashVariant::HashBHP256, Type::Integer(IntegerType::U128)),
157            sym::_bhp256_hash_to_scalar      => Self::Hash(HashVariant::HashBHP256, Type::Scalar),
158            sym::_bhp256_hash_to_address_raw => Self::Hash(HashVariant::HashBHP256Raw, Type::Address),
159            sym::_bhp256_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP256Raw, Type::Field),
160            sym::_bhp256_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP256Raw, Type::Group),
161            sym::_bhp256_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I8)),
162            sym::_bhp256_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I16)),
163            sym::_bhp256_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I32)),
164            sym::_bhp256_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I64)),
165            sym::_bhp256_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::I128)),
166            sym::_bhp256_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U8)),
167            sym::_bhp256_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U16)),
168            sym::_bhp256_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U32)),
169            sym::_bhp256_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U64)),
170            sym::_bhp256_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP256Raw, Type::Integer(IntegerType::U128)),
171            sym::_bhp256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP256Raw, Type::Scalar),
172
173            sym::_bhp512_hash_to_address     => Self::Hash(HashVariant::HashBHP512, Type::Address),
174            sym::_bhp512_hash_to_field       => Self::Hash(HashVariant::HashBHP512, Type::Field),
175            sym::_bhp512_hash_to_group       => Self::Hash(HashVariant::HashBHP512, Type::Group),
176            sym::_bhp512_hash_to_i8          => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I8)),
177            sym::_bhp512_hash_to_i16         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I16)),
178            sym::_bhp512_hash_to_i32         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I32)),
179            sym::_bhp512_hash_to_i64         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I64)),
180            sym::_bhp512_hash_to_i128        => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::I128)),
181            sym::_bhp512_hash_to_u8          => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U8)),
182            sym::_bhp512_hash_to_u16         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U16)),
183            sym::_bhp512_hash_to_u32         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U32)),
184            sym::_bhp512_hash_to_u64         => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U64)),
185            sym::_bhp512_hash_to_u128        => Self::Hash(HashVariant::HashBHP512, Type::Integer(IntegerType::U128)),
186            sym::_bhp512_hash_to_scalar      => Self::Hash(HashVariant::HashBHP512, Type::Scalar),
187            sym::_bhp512_hash_to_address_raw => Self::Hash(HashVariant::HashBHP512Raw, Type::Address),
188            sym::_bhp512_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP512Raw, Type::Field),
189            sym::_bhp512_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP512Raw, Type::Group),
190            sym::_bhp512_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I8)),
191            sym::_bhp512_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I16)),
192            sym::_bhp512_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I32)),
193            sym::_bhp512_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I64)),
194            sym::_bhp512_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::I128)),
195            sym::_bhp512_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U8)),
196            sym::_bhp512_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U16)),
197            sym::_bhp512_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U32)),
198            sym::_bhp512_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U64)),
199            sym::_bhp512_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP512Raw, Type::Integer(IntegerType::U128)),
200            sym::_bhp512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP512Raw, Type::Scalar),
201
202            sym::_bhp768_hash_to_address     => Self::Hash(HashVariant::HashBHP768, Type::Address),
203            sym::_bhp768_hash_to_field       => Self::Hash(HashVariant::HashBHP768, Type::Field),
204            sym::_bhp768_hash_to_group       => Self::Hash(HashVariant::HashBHP768, Type::Group),
205            sym::_bhp768_hash_to_i8          => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I8)),
206            sym::_bhp768_hash_to_i16         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I16)),
207            sym::_bhp768_hash_to_i32         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I32)),
208            sym::_bhp768_hash_to_i64         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I64)),
209            sym::_bhp768_hash_to_i128        => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::I128)),
210            sym::_bhp768_hash_to_u8          => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U8)),
211            sym::_bhp768_hash_to_u16         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U16)),
212            sym::_bhp768_hash_to_u32         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U32)),
213            sym::_bhp768_hash_to_u64         => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U64)),
214            sym::_bhp768_hash_to_u128        => Self::Hash(HashVariant::HashBHP768, Type::Integer(IntegerType::U128)),
215            sym::_bhp768_hash_to_scalar      => Self::Hash(HashVariant::HashBHP768, Type::Scalar),
216            sym::_bhp768_hash_to_address_raw => Self::Hash(HashVariant::HashBHP768Raw, Type::Address),
217            sym::_bhp768_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP768Raw, Type::Field),
218            sym::_bhp768_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP768Raw, Type::Group),
219            sym::_bhp768_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I8)),
220            sym::_bhp768_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I16)),
221            sym::_bhp768_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I32)),
222            sym::_bhp768_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I64)),
223            sym::_bhp768_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::I128)),
224            sym::_bhp768_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U8)),
225            sym::_bhp768_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U16)),
226            sym::_bhp768_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U32)),
227            sym::_bhp768_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U64)),
228            sym::_bhp768_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP768Raw, Type::Integer(IntegerType::U128)),
229            sym::_bhp768_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP768Raw, Type::Scalar),
230
231            sym::_bhp1024_hash_to_address     => Self::Hash(HashVariant::HashBHP1024, Type::Address),
232            sym::_bhp1024_hash_to_field       => Self::Hash(HashVariant::HashBHP1024, Type::Field),
233            sym::_bhp1024_hash_to_group       => Self::Hash(HashVariant::HashBHP1024, Type::Group),
234            sym::_bhp1024_hash_to_i8          => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I8)),
235            sym::_bhp1024_hash_to_i16         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I16)),
236            sym::_bhp1024_hash_to_i32         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I32)),
237            sym::_bhp1024_hash_to_i64         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I64)),
238            sym::_bhp1024_hash_to_i128        => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::I128)),
239            sym::_bhp1024_hash_to_u8          => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U8)),
240            sym::_bhp1024_hash_to_u16         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U16)),
241            sym::_bhp1024_hash_to_u32         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U32)),
242            sym::_bhp1024_hash_to_u64         => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U64)),
243            sym::_bhp1024_hash_to_u128        => Self::Hash(HashVariant::HashBHP1024, Type::Integer(IntegerType::U128)),
244            sym::_bhp1024_hash_to_scalar      => Self::Hash(HashVariant::HashBHP1024, Type::Scalar),
245            sym::_bhp1024_hash_to_address_raw => Self::Hash(HashVariant::HashBHP1024Raw, Type::Address),
246            sym::_bhp1024_hash_to_field_raw   => Self::Hash(HashVariant::HashBHP1024Raw, Type::Field),
247            sym::_bhp1024_hash_to_group_raw   => Self::Hash(HashVariant::HashBHP1024Raw, Type::Group),
248            sym::_bhp1024_hash_to_i8_raw      => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I8)),
249            sym::_bhp1024_hash_to_i16_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I16)),
250            sym::_bhp1024_hash_to_i32_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I32)),
251            sym::_bhp1024_hash_to_i64_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I64)),
252            sym::_bhp1024_hash_to_i128_raw    => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::I128)),
253            sym::_bhp1024_hash_to_u8_raw      => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U8)),
254            sym::_bhp1024_hash_to_u16_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U16)),
255            sym::_bhp1024_hash_to_u32_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U32)),
256            sym::_bhp1024_hash_to_u64_raw     => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U64)),
257            sym::_bhp1024_hash_to_u128_raw    => Self::Hash(HashVariant::HashBHP1024Raw, Type::Integer(IntegerType::U128)),
258            sym::_bhp1024_hash_to_scalar_raw  => Self::Hash(HashVariant::HashBHP1024Raw, Type::Scalar),
259
260            sym::_keccak256_hash_to_address     => Self::Hash(HashVariant::HashKeccak256, Type::Address),
261            sym::_keccak256_hash_to_field       => Self::Hash(HashVariant::HashKeccak256, Type::Field),
262            sym::_keccak256_hash_to_group       => Self::Hash(HashVariant::HashKeccak256, Type::Group),
263            sym::_keccak256_hash_to_i8          => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I8)),
264            sym::_keccak256_hash_to_i16         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I16)),
265            sym::_keccak256_hash_to_i32         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I32)),
266            sym::_keccak256_hash_to_i64         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I64)),
267            sym::_keccak256_hash_to_i128        => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::I128)),
268            sym::_keccak256_hash_to_u8          => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U8)),
269            sym::_keccak256_hash_to_u16         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U16)),
270            sym::_keccak256_hash_to_u32         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U32)),
271            sym::_keccak256_hash_to_u64         => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U64)),
272            sym::_keccak256_hash_to_u128        => Self::Hash(HashVariant::HashKeccak256, Type::Integer(IntegerType::U128)),
273            sym::_keccak256_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak256, Type::Scalar),
274            sym::_keccak256_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak256Raw, Type::Address),
275            sym::_keccak256_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak256Raw, Type::Field),
276            sym::_keccak256_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak256Raw, Type::Group),
277            sym::_keccak256_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I8)),
278            sym::_keccak256_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I16)),
279            sym::_keccak256_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I32)),
280            sym::_keccak256_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I64)),
281            sym::_keccak256_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::I128)),
282            sym::_keccak256_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U8)),
283            sym::_keccak256_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U16)),
284            sym::_keccak256_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U32)),
285            sym::_keccak256_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U64)),
286            sym::_keccak256_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak256Raw, Type::Integer(IntegerType::U128)),
287            sym::_keccak256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak256Raw, Type::Scalar),
288            sym::_keccak256_hash_to_bits         => Self::Hash(HashVariant::HashKeccak256Native, Type::Array(ArrayType::bit_array(256))),
289            sym::_keccak256_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak256NativeRaw, Type::Array(ArrayType::bit_array(256))),
290
291            sym::_keccak384_hash_to_address     => Self::Hash(HashVariant::HashKeccak384, Type::Address),
292            sym::_keccak384_hash_to_field       => Self::Hash(HashVariant::HashKeccak384, Type::Field),
293            sym::_keccak384_hash_to_group       => Self::Hash(HashVariant::HashKeccak384, Type::Group),
294            sym::_keccak384_hash_to_i8          => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I8)),
295            sym::_keccak384_hash_to_i16         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I16)),
296            sym::_keccak384_hash_to_i32         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I32)),
297            sym::_keccak384_hash_to_i64         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I64)),
298            sym::_keccak384_hash_to_i128        => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::I128)),
299            sym::_keccak384_hash_to_u8          => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U8)),
300            sym::_keccak384_hash_to_u16         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U16)),
301            sym::_keccak384_hash_to_u32         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U32)),
302            sym::_keccak384_hash_to_u64         => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U64)),
303            sym::_keccak384_hash_to_u128        => Self::Hash(HashVariant::HashKeccak384, Type::Integer(IntegerType::U128)),
304            sym::_keccak384_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak384, Type::Scalar),
305            sym::_keccak384_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak384Raw, Type::Address),
306            sym::_keccak384_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak384Raw, Type::Field),
307            sym::_keccak384_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak384Raw, Type::Group),
308            sym::_keccak384_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I8)),
309            sym::_keccak384_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I16)),
310            sym::_keccak384_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I32)),
311            sym::_keccak384_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I64)),
312            sym::_keccak384_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::I128)),
313            sym::_keccak384_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U8)),
314            sym::_keccak384_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U16)),
315            sym::_keccak384_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U32)),
316            sym::_keccak384_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U64)),
317            sym::_keccak384_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak384Raw, Type::Integer(IntegerType::U128)),
318            sym::_keccak384_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak384Raw, Type::Scalar),
319            sym::_keccak384_hash_to_bits         => Self::Hash(HashVariant::HashKeccak384Native, Type::Array(ArrayType::bit_array(384))),
320            sym::_keccak384_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak384NativeRaw, Type::Array(ArrayType::bit_array(384))),
321
322            sym::_keccak512_hash_to_address     => Self::Hash(HashVariant::HashKeccak512, Type::Address),
323            sym::_keccak512_hash_to_field       => Self::Hash(HashVariant::HashKeccak512, Type::Field),
324            sym::_keccak512_hash_to_group       => Self::Hash(HashVariant::HashKeccak512, Type::Group),
325            sym::_keccak512_hash_to_i8          => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I8)),
326            sym::_keccak512_hash_to_i16         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I16)),
327            sym::_keccak512_hash_to_i32         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I32)),
328            sym::_keccak512_hash_to_i64         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I64)),
329            sym::_keccak512_hash_to_i128        => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::I128)),
330            sym::_keccak512_hash_to_u8          => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U8)),
331            sym::_keccak512_hash_to_u16         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U16)),
332            sym::_keccak512_hash_to_u32         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U32)),
333            sym::_keccak512_hash_to_u64         => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U64)),
334            sym::_keccak512_hash_to_u128        => Self::Hash(HashVariant::HashKeccak512, Type::Integer(IntegerType::U128)),
335            sym::_keccak512_hash_to_scalar      => Self::Hash(HashVariant::HashKeccak512, Type::Scalar),
336            sym::_keccak512_hash_to_address_raw => Self::Hash(HashVariant::HashKeccak512Raw, Type::Address),
337            sym::_keccak512_hash_to_field_raw   => Self::Hash(HashVariant::HashKeccak512Raw, Type::Field),
338            sym::_keccak512_hash_to_group_raw   => Self::Hash(HashVariant::HashKeccak512Raw, Type::Group),
339            sym::_keccak512_hash_to_i8_raw      => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I8)),
340            sym::_keccak512_hash_to_i16_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I16)),
341            sym::_keccak512_hash_to_i32_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I32)),
342            sym::_keccak512_hash_to_i64_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I64)),
343            sym::_keccak512_hash_to_i128_raw    => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::I128)),
344            sym::_keccak512_hash_to_u8_raw      => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U8)),
345            sym::_keccak512_hash_to_u16_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U16)),
346            sym::_keccak512_hash_to_u32_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U32)),
347            sym::_keccak512_hash_to_u64_raw     => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U64)),
348            sym::_keccak512_hash_to_u128_raw    => Self::Hash(HashVariant::HashKeccak512Raw, Type::Integer(IntegerType::U128)),
349            sym::_keccak512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashKeccak512Raw, Type::Scalar),
350            sym::_keccak512_hash_to_bits         => Self::Hash(HashVariant::HashKeccak512Native, Type::Array(ArrayType::bit_array(512))),
351            sym::_keccak512_hash_to_bits_raw     => Self::Hash(HashVariant::HashKeccak512NativeRaw, Type::Array(ArrayType::bit_array(512))),
352
353            sym::_pedersen64_hash_to_address     => Self::Hash(HashVariant::HashPED64, Type::Address),
354            sym::_pedersen64_hash_to_field       => Self::Hash(HashVariant::HashPED64, Type::Field),
355            sym::_pedersen64_hash_to_group       => Self::Hash(HashVariant::HashPED64, Type::Group),
356            sym::_pedersen64_hash_to_i8          => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I8)),
357            sym::_pedersen64_hash_to_i16         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I16)),
358            sym::_pedersen64_hash_to_i32         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I32)),
359            sym::_pedersen64_hash_to_i64         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I64)),
360            sym::_pedersen64_hash_to_i128        => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::I128)),
361            sym::_pedersen64_hash_to_u8          => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U8)),
362            sym::_pedersen64_hash_to_u16         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U16)),
363            sym::_pedersen64_hash_to_u32         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U32)),
364            sym::_pedersen64_hash_to_u64         => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U64)),
365            sym::_pedersen64_hash_to_u128        => Self::Hash(HashVariant::HashPED64, Type::Integer(IntegerType::U128)),
366            sym::_pedersen64_hash_to_scalar      => Self::Hash(HashVariant::HashPED64, Type::Scalar),
367            sym::_pedersen64_hash_to_address_raw => Self::Hash(HashVariant::HashPED64Raw, Type::Address),
368            sym::_pedersen64_hash_to_field_raw   => Self::Hash(HashVariant::HashPED64Raw, Type::Field),
369            sym::_pedersen64_hash_to_group_raw   => Self::Hash(HashVariant::HashPED64Raw, Type::Group),
370            sym::_pedersen64_hash_to_i8_raw      => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I8)),
371            sym::_pedersen64_hash_to_i16_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I16)),
372            sym::_pedersen64_hash_to_i32_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I32)),
373            sym::_pedersen64_hash_to_i64_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I64)),
374            sym::_pedersen64_hash_to_i128_raw    => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::I128)),
375            sym::_pedersen64_hash_to_u8_raw      => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U8)),
376            sym::_pedersen64_hash_to_u16_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U16)),
377            sym::_pedersen64_hash_to_u32_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U32)),
378            sym::_pedersen64_hash_to_u64_raw     => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U64)),
379            sym::_pedersen64_hash_to_u128_raw    => Self::Hash(HashVariant::HashPED64Raw, Type::Integer(IntegerType::U128)),
380            sym::_pedersen64_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPED64Raw, Type::Scalar),
381
382            sym::_pedersen128_hash_to_address     => Self::Hash(HashVariant::HashPED128, Type::Address),
383            sym::_pedersen128_hash_to_field       => Self::Hash(HashVariant::HashPED128, Type::Field),
384            sym::_pedersen128_hash_to_group       => Self::Hash(HashVariant::HashPED128, Type::Group),
385            sym::_pedersen128_hash_to_i8          => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I8)),
386            sym::_pedersen128_hash_to_i16         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I16)),
387            sym::_pedersen128_hash_to_i32         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I32)),
388            sym::_pedersen128_hash_to_i64         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I64)),
389            sym::_pedersen128_hash_to_i128        => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::I128)),
390            sym::_pedersen128_hash_to_u8          => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U8)),
391            sym::_pedersen128_hash_to_u16         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U16)),
392            sym::_pedersen128_hash_to_u32         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U32)),
393            sym::_pedersen128_hash_to_u64         => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U64)),
394            sym::_pedersen128_hash_to_u128        => Self::Hash(HashVariant::HashPED128, Type::Integer(IntegerType::U128)),
395            sym::_pedersen128_hash_to_scalar      => Self::Hash(HashVariant::HashPED128, Type::Scalar),
396            sym::_pedersen128_hash_to_address_raw => Self::Hash(HashVariant::HashPED128Raw, Type::Address),
397            sym::_pedersen128_hash_to_field_raw   => Self::Hash(HashVariant::HashPED128Raw, Type::Field),
398            sym::_pedersen128_hash_to_group_raw   => Self::Hash(HashVariant::HashPED128Raw, Type::Group),
399            sym::_pedersen128_hash_to_i8_raw      => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I8)),
400            sym::_pedersen128_hash_to_i16_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I16)),
401            sym::_pedersen128_hash_to_i32_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I32)),
402            sym::_pedersen128_hash_to_i64_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I64)),
403            sym::_pedersen128_hash_to_i128_raw    => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::I128)),
404            sym::_pedersen128_hash_to_u8_raw      => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U8)),
405            sym::_pedersen128_hash_to_u16_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U16)),
406            sym::_pedersen128_hash_to_u32_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U32)),
407            sym::_pedersen128_hash_to_u64_raw     => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U64)),
408            sym::_pedersen128_hash_to_u128_raw    => Self::Hash(HashVariant::HashPED128Raw, Type::Integer(IntegerType::U128)),
409            sym::_pedersen128_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPED128Raw, Type::Scalar),
410
411            sym::_poseidon2_hash_to_address     => Self::Hash(HashVariant::HashPSD2, Type::Address),
412            sym::_poseidon2_hash_to_field       => Self::Hash(HashVariant::HashPSD2, Type::Field),
413            sym::_poseidon2_hash_to_group       => Self::Hash(HashVariant::HashPSD2, Type::Group),
414            sym::_poseidon2_hash_to_i8          => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I8)),
415            sym::_poseidon2_hash_to_i16         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I16)),
416            sym::_poseidon2_hash_to_i32         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I32)),
417            sym::_poseidon2_hash_to_i64         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I64)),
418            sym::_poseidon2_hash_to_i128        => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::I128)),
419            sym::_poseidon2_hash_to_u8          => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U8)),
420            sym::_poseidon2_hash_to_u16         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U16)),
421            sym::_poseidon2_hash_to_u32         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U32)),
422            sym::_poseidon2_hash_to_u64         => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U64)),
423            sym::_poseidon2_hash_to_u128        => Self::Hash(HashVariant::HashPSD2, Type::Integer(IntegerType::U128)),
424            sym::_poseidon2_hash_to_scalar      => Self::Hash(HashVariant::HashPSD2, Type::Scalar),
425            sym::_poseidon2_hash_to_address_raw => Self::Hash(HashVariant::HashPSD2Raw, Type::Address),
426            sym::_poseidon2_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD2Raw, Type::Field),
427            sym::_poseidon2_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD2Raw, Type::Group),
428            sym::_poseidon2_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I8)),
429            sym::_poseidon2_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I16)),
430            sym::_poseidon2_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I32)),
431            sym::_poseidon2_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I64)),
432            sym::_poseidon2_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::I128)),
433            sym::_poseidon2_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U8)),
434            sym::_poseidon2_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U16)),
435            sym::_poseidon2_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U32)),
436            sym::_poseidon2_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U64)),
437            sym::_poseidon2_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD2Raw, Type::Integer(IntegerType::U128)),
438            sym::_poseidon2_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD2Raw, Type::Scalar),
439
440            sym::_poseidon4_hash_to_address     => Self::Hash(HashVariant::HashPSD4, Type::Address),
441            sym::_poseidon4_hash_to_field       => Self::Hash(HashVariant::HashPSD4, Type::Field),
442            sym::_poseidon4_hash_to_group       => Self::Hash(HashVariant::HashPSD4, Type::Group),
443            sym::_poseidon4_hash_to_i8          => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I8)),
444            sym::_poseidon4_hash_to_i16         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I16)),
445            sym::_poseidon4_hash_to_i32         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I32)),
446            sym::_poseidon4_hash_to_i64         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I64)),
447            sym::_poseidon4_hash_to_i128        => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::I128)),
448            sym::_poseidon4_hash_to_u8          => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U8)),
449            sym::_poseidon4_hash_to_u16         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U16)),
450            sym::_poseidon4_hash_to_u32         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U32)),
451            sym::_poseidon4_hash_to_u64         => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U64)),
452            sym::_poseidon4_hash_to_u128        => Self::Hash(HashVariant::HashPSD4, Type::Integer(IntegerType::U128)),
453            sym::_poseidon4_hash_to_scalar      => Self::Hash(HashVariant::HashPSD4, Type::Scalar),
454            sym::_poseidon4_hash_to_address_raw => Self::Hash(HashVariant::HashPSD4Raw, Type::Address),
455            sym::_poseidon4_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD4Raw, Type::Field),
456            sym::_poseidon4_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD4Raw, Type::Group),
457            sym::_poseidon4_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I8)),
458            sym::_poseidon4_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I16)),
459            sym::_poseidon4_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I32)),
460            sym::_poseidon4_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I64)),
461            sym::_poseidon4_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::I128)),
462            sym::_poseidon4_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U8)),
463            sym::_poseidon4_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U16)),
464            sym::_poseidon4_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U32)),
465            sym::_poseidon4_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U64)),
466            sym::_poseidon4_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD4Raw, Type::Integer(IntegerType::U128)),
467            sym::_poseidon4_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD4Raw, Type::Scalar),
468
469            sym::_poseidon8_hash_to_address     => Self::Hash(HashVariant::HashPSD8, Type::Address),
470            sym::_poseidon8_hash_to_field       => Self::Hash(HashVariant::HashPSD8, Type::Field),
471            sym::_poseidon8_hash_to_group       => Self::Hash(HashVariant::HashPSD8, Type::Group),
472            sym::_poseidon8_hash_to_i8          => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I8)),
473            sym::_poseidon8_hash_to_i16         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I16)),
474            sym::_poseidon8_hash_to_i32         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I32)),
475            sym::_poseidon8_hash_to_i64         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I64)),
476            sym::_poseidon8_hash_to_i128        => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::I128)),
477            sym::_poseidon8_hash_to_u8          => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U8)),
478            sym::_poseidon8_hash_to_u16         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U16)),
479            sym::_poseidon8_hash_to_u32         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U32)),
480            sym::_poseidon8_hash_to_u64         => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U64)),
481            sym::_poseidon8_hash_to_u128        => Self::Hash(HashVariant::HashPSD8, Type::Integer(IntegerType::U128)),
482            sym::_poseidon8_hash_to_scalar      => Self::Hash(HashVariant::HashPSD8, Type::Scalar),
483            sym::_poseidon8_hash_to_address_raw => Self::Hash(HashVariant::HashPSD8Raw, Type::Address),
484            sym::_poseidon8_hash_to_field_raw   => Self::Hash(HashVariant::HashPSD8Raw, Type::Field),
485            sym::_poseidon8_hash_to_group_raw   => Self::Hash(HashVariant::HashPSD8Raw, Type::Group),
486            sym::_poseidon8_hash_to_i8_raw      => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I8)),
487            sym::_poseidon8_hash_to_i16_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I16)),
488            sym::_poseidon8_hash_to_i32_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I32)),
489            sym::_poseidon8_hash_to_i64_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I64)),
490            sym::_poseidon8_hash_to_i128_raw    => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::I128)),
491            sym::_poseidon8_hash_to_u8_raw      => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U8)),
492            sym::_poseidon8_hash_to_u16_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U16)),
493            sym::_poseidon8_hash_to_u32_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U32)),
494            sym::_poseidon8_hash_to_u64_raw     => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U64)),
495            sym::_poseidon8_hash_to_u128_raw    => Self::Hash(HashVariant::HashPSD8Raw, Type::Integer(IntegerType::U128)),
496            sym::_poseidon8_hash_to_scalar_raw  => Self::Hash(HashVariant::HashPSD8Raw, Type::Scalar),
497
498            sym::_sha3_256_hash_to_address     => Self::Hash(HashVariant::HashSha3_256, Type::Address),
499            sym::_sha3_256_hash_to_field       => Self::Hash(HashVariant::HashSha3_256, Type::Field),
500            sym::_sha3_256_hash_to_group       => Self::Hash(HashVariant::HashSha3_256, Type::Group),
501            sym::_sha3_256_hash_to_i8          => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I8)),
502            sym::_sha3_256_hash_to_i16         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I16)),
503            sym::_sha3_256_hash_to_i32         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I32)),
504            sym::_sha3_256_hash_to_i64         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I64)),
505            sym::_sha3_256_hash_to_i128        => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::I128)),
506            sym::_sha3_256_hash_to_u8          => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U8)),
507            sym::_sha3_256_hash_to_u16         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U16)),
508            sym::_sha3_256_hash_to_u32         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U32)),
509            sym::_sha3_256_hash_to_u64         => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U64)),
510            sym::_sha3_256_hash_to_u128        => Self::Hash(HashVariant::HashSha3_256, Type::Integer(IntegerType::U128)),
511            sym::_sha3_256_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_256, Type::Scalar),
512            sym::_sha3_256_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_256Raw, Type::Address),
513            sym::_sha3_256_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_256Raw, Type::Field),
514            sym::_sha3_256_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_256Raw, Type::Group),
515            sym::_sha3_256_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I8)),
516            sym::_sha3_256_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I16)),
517            sym::_sha3_256_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I32)),
518            sym::_sha3_256_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I64)),
519            sym::_sha3_256_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::I128)),
520            sym::_sha3_256_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U8)),
521            sym::_sha3_256_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U16)),
522            sym::_sha3_256_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U32)),
523            sym::_sha3_256_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U64)),
524            sym::_sha3_256_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_256Raw, Type::Integer(IntegerType::U128)),
525            sym::_sha3_256_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_256Raw, Type::Scalar),
526            sym::_sha3_256_hash_to_bits         => Self::Hash(HashVariant::HashSha3_256Native, Type::Array(ArrayType::bit_array(256))),
527            sym::_sha3_256_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_256NativeRaw, Type::Array(ArrayType::bit_array(256))),
528
529            sym::_sha3_384_hash_to_address     => Self::Hash(HashVariant::HashSha3_384, Type::Address),
530            sym::_sha3_384_hash_to_field       => Self::Hash(HashVariant::HashSha3_384, Type::Field),
531            sym::_sha3_384_hash_to_group       => Self::Hash(HashVariant::HashSha3_384, Type::Group),
532            sym::_sha3_384_hash_to_i8          => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I8)),
533            sym::_sha3_384_hash_to_i16         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I16)),
534            sym::_sha3_384_hash_to_i32         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I32)),
535            sym::_sha3_384_hash_to_i64         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I64)),
536            sym::_sha3_384_hash_to_i128        => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::I128)),
537            sym::_sha3_384_hash_to_u8          => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U8)),
538            sym::_sha3_384_hash_to_u16         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U16)),
539            sym::_sha3_384_hash_to_u32         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U32)),
540            sym::_sha3_384_hash_to_u64         => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U64)),
541            sym::_sha3_384_hash_to_u128        => Self::Hash(HashVariant::HashSha3_384, Type::Integer(IntegerType::U128)),
542            sym::_sha3_384_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_384, Type::Scalar),
543            sym::_sha3_384_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_384Raw, Type::Address),
544            sym::_sha3_384_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_384Raw, Type::Field),
545            sym::_sha3_384_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_384Raw, Type::Group),
546            sym::_sha3_384_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I8)),
547            sym::_sha3_384_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I16)),
548            sym::_sha3_384_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I32)),
549            sym::_sha3_384_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I64)),
550            sym::_sha3_384_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::I128)),
551            sym::_sha3_384_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U8)),
552            sym::_sha3_384_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U16)),
553            sym::_sha3_384_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U32)),
554            sym::_sha3_384_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U64)),
555            sym::_sha3_384_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_384Raw, Type::Integer(IntegerType::U128)),
556            sym::_sha3_384_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_384Raw, Type::Scalar),
557            sym::_sha3_384_hash_to_bits         => Self::Hash(HashVariant::HashSha3_384Native, Type::Array(ArrayType::bit_array(384))),
558            sym::_sha3_384_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_384NativeRaw, Type::Array(ArrayType::bit_array(384))),
559
560            sym::_sha3_512_hash_to_address     => Self::Hash(HashVariant::HashSha3_512, Type::Address),
561            sym::_sha3_512_hash_to_field       => Self::Hash(HashVariant::HashSha3_512, Type::Field),
562            sym::_sha3_512_hash_to_group       => Self::Hash(HashVariant::HashSha3_512, Type::Group),
563            sym::_sha3_512_hash_to_i8          => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I8)),
564            sym::_sha3_512_hash_to_i16         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I16)),
565            sym::_sha3_512_hash_to_i32         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I32)),
566            sym::_sha3_512_hash_to_i64         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I64)),
567            sym::_sha3_512_hash_to_i128        => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::I128)),
568            sym::_sha3_512_hash_to_u8          => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U8)),
569            sym::_sha3_512_hash_to_u16         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U16)),
570            sym::_sha3_512_hash_to_u32         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U32)),
571            sym::_sha3_512_hash_to_u64         => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U64)),
572            sym::_sha3_512_hash_to_u128        => Self::Hash(HashVariant::HashSha3_512, Type::Integer(IntegerType::U128)),
573            sym::_sha3_512_hash_to_scalar      => Self::Hash(HashVariant::HashSha3_512, Type::Scalar),
574            sym::_sha3_512_hash_to_address_raw => Self::Hash(HashVariant::HashSha3_512Raw, Type::Address),
575            sym::_sha3_512_hash_to_field_raw   => Self::Hash(HashVariant::HashSha3_512Raw, Type::Field),
576            sym::_sha3_512_hash_to_group_raw   => Self::Hash(HashVariant::HashSha3_512Raw, Type::Group),
577            sym::_sha3_512_hash_to_i8_raw      => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I8)),
578            sym::_sha3_512_hash_to_i16_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I16)),
579            sym::_sha3_512_hash_to_i32_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I32)),
580            sym::_sha3_512_hash_to_i64_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I64)),
581            sym::_sha3_512_hash_to_i128_raw    => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::I128)),
582            sym::_sha3_512_hash_to_u8_raw      => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U8)),
583            sym::_sha3_512_hash_to_u16_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U16)),
584            sym::_sha3_512_hash_to_u32_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U32)),
585            sym::_sha3_512_hash_to_u64_raw     => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U64)),
586            sym::_sha3_512_hash_to_u128_raw    => Self::Hash(HashVariant::HashSha3_512Raw, Type::Integer(IntegerType::U128)),
587            sym::_sha3_512_hash_to_scalar_raw  => Self::Hash(HashVariant::HashSha3_512Raw, Type::Scalar),
588            sym::_sha3_512_hash_to_bits         => Self::Hash(HashVariant::HashSha3_512Native, Type::Array(ArrayType::bit_array(512))),
589            sym::_sha3_512_hash_to_bits_raw     => Self::Hash(HashVariant::HashSha3_512NativeRaw, Type::Array(ArrayType::bit_array(512))),
590
591            sym::_ecdsa_verify_digest          => Self::ECDSAVerify(ECDSAVerifyVariant::Digest),
592            sym::_ecdsa_verify_digest_eth      => Self::ECDSAVerify(ECDSAVerifyVariant::DigestEth),
593            sym::_ecdsa_verify_keccak256       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256),
594            sym::_ecdsa_verify_keccak256_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Raw),
595            sym::_ecdsa_verify_keccak256_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak256Eth),
596            sym::_ecdsa_verify_keccak384       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384),
597            sym::_ecdsa_verify_keccak384_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Raw),
598            sym::_ecdsa_verify_keccak384_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak384Eth),
599            sym::_ecdsa_verify_keccak512       => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512),
600            sym::_ecdsa_verify_keccak512_raw   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Raw),
601            sym::_ecdsa_verify_keccak512_eth   => Self::ECDSAVerify(ECDSAVerifyVariant::HashKeccak512Eth),
602            sym::_ecdsa_verify_sha3_256        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256),
603            sym::_ecdsa_verify_sha3_256_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Raw),
604            sym::_ecdsa_verify_sha3_256_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_256Eth),
605            sym::_ecdsa_verify_sha3_384        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384),
606            sym::_ecdsa_verify_sha3_384_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Raw),
607            sym::_ecdsa_verify_sha3_384_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_384Eth),
608            sym::_ecdsa_verify_sha3_512        => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512),
609            sym::_ecdsa_verify_sha3_512_raw    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Raw),
610            sym::_ecdsa_verify_sha3_512_eth    => Self::ECDSAVerify(ECDSAVerifyVariant::HashSha3_512Eth),
611
612            sym::_mapping_get => Self::Get,
613            sym::_mapping_set => Self::Set,
614            sym::_mapping_get_or_use => Self::MappingGetOrUse,
615            sym::_mapping_remove => Self::MappingRemove,
616            sym::_mapping_contains => Self::MappingContains,
617
618            sym::_optional_unwrap => Self::OptionalUnwrap,
619            sym::_optional_unwrap_or => Self::OptionalUnwrapOr,
620
621            sym::_vector_get => Self::Get,
622            sym::_vector_set => Self::Set,
623            sym::_vector_push => Self::VectorPush,
624            sym::_vector_len => Self::VectorLen,
625            sym::_vector_clear => Self::VectorClear,
626            sym::_vector_pop => Self::VectorPop,
627            sym::_vector_swap_remove => Self::VectorSwapRemove,
628
629            sym::_group_to_x_coordinate => Self::GroupToXCoordinate,
630            sym::_group_to_y_coordinate => Self::GroupToYCoordinate,
631
632            sym::_program_checksum => Self::ProgramChecksum,
633            sym::_program_edition => Self::ProgramEdition,
634            sym::_program_owner => Self::ProgramOwner,
635
636            sym::_signature_verify => Self::SignatureVerify,
637            sym::_future_await => Self::FutureAwait,
638
639            sym::_serialize_to_bits => Self::Serialize(SerializeVariant::ToBits),
640            sym::_serialize_to_bits_raw => Self::Serialize(SerializeVariant::ToBitsRaw),
641
642            sym::_cheat_code_print_mapping => Self::CheatCodePrintMapping,
643            sym::_cheat_code_set_block_height => Self::CheatCodeSetBlockHeight,
644            sym::_cheat_code_set_block_timestamp => Self::CheatCodeSetBlockTimestamp,
645            sym::_cheat_code_set_signer => Self::CheatCodeSetSigner,
646
647            _ => return None,
648        })
649    }
650
651    /// Returns a `Intrinsic` from the given module and method symbols.
652    #[rustfmt::skip]
653    pub fn convert_path_symbols(module: Symbol, function: Symbol) -> Option<Symbol> {
654        Some(match (module, function) {
655            (sym::Deserialize, sym::from_bits) => sym::_deserialize_from_bits,
656            (sym::Deserialize, sym::from_bits_raw) => sym::_deserialize_from_bits_raw,
657
658            (sym::ChaCha, sym::rand_address) => sym::_chacha_rand_address,
659            (sym::ChaCha, sym::rand_bool)    => sym::_chacha_rand_bool,
660            (sym::ChaCha, sym::rand_field)   => sym::_chacha_rand_field,
661            (sym::ChaCha, sym::rand_group)   => sym::_chacha_rand_group,
662            (sym::ChaCha, sym::rand_i8)      => sym::_chacha_rand_i8,
663            (sym::ChaCha, sym::rand_i16)     => sym::_chacha_rand_i16,
664            (sym::ChaCha, sym::rand_i32)     => sym::_chacha_rand_i32,
665            (sym::ChaCha, sym::rand_i64)     => sym::_chacha_rand_i64,
666            (sym::ChaCha, sym::rand_i128)    => sym::_chacha_rand_i128,
667            (sym::ChaCha, sym::rand_u8)      => sym::_chacha_rand_u8,
668            (sym::ChaCha, sym::rand_u16)     => sym::_chacha_rand_u16,
669            (sym::ChaCha, sym::rand_u32)     => sym::_chacha_rand_u32,
670            (sym::ChaCha, sym::rand_u64)     => sym::_chacha_rand_u64,
671            (sym::ChaCha, sym::rand_u128)    => sym::_chacha_rand_u128,
672            (sym::ChaCha, sym::rand_scalar)  => sym::_chacha_rand_scalar,
673
674            (sym::BHP256, sym::commit_to_address)   => sym::_bhp256_commit_to_address,
675            (sym::BHP256, sym::commit_to_field)     => sym::_bhp256_commit_to_field,
676            (sym::BHP256, sym::commit_to_group)     => sym::_bhp256_commit_to_group,
677            (sym::BHP512, sym::commit_to_address)   => sym::_bhp512_commit_to_address,
678            (sym::BHP512, sym::commit_to_field)     => sym::_bhp512_commit_to_field,
679            (sym::BHP512, sym::commit_to_group)     => sym::_bhp512_commit_to_group,
680            (sym::BHP768, sym::commit_to_address)   => sym::_bhp768_commit_to_address,
681            (sym::BHP768, sym::commit_to_field)     => sym::_bhp768_commit_to_field,
682            (sym::BHP768, sym::commit_to_group)     => sym::_bhp768_commit_to_group,
683            (sym::BHP1024, sym::commit_to_address)   => sym::_bhp1024_commit_to_address,
684            (sym::BHP1024, sym::commit_to_field)     => sym::_bhp1024_commit_to_field,
685            (sym::BHP1024, sym::commit_to_group)     => sym::_bhp1024_commit_to_group,
686            (sym::Pedersen64, sym::commit_to_address)   => sym::_pedersen64_commit_to_address,
687            (sym::Pedersen64, sym::commit_to_field)     => sym::_pedersen64_commit_to_field,
688            (sym::Pedersen64, sym::commit_to_group)     => sym::_pedersen64_commit_to_group,
689            (sym::Pedersen128, sym::commit_to_address)   => sym::_pedersen128_commit_to_address,
690            (sym::Pedersen128, sym::commit_to_field)     => sym::_pedersen128_commit_to_field,
691            (sym::Pedersen128, sym::commit_to_group)     => sym::_pedersen128_commit_to_group,
692
693            (sym::BHP256, sym::hash_to_address)     => sym::_bhp256_hash_to_address,
694            (sym::BHP256, sym::hash_to_field)       => sym::_bhp256_hash_to_field,
695            (sym::BHP256, sym::hash_to_group)       => sym::_bhp256_hash_to_group,
696            (sym::BHP256, sym::hash_to_i8)          => sym::_bhp256_hash_to_i8,
697            (sym::BHP256, sym::hash_to_i16)         => sym::_bhp256_hash_to_i16,
698            (sym::BHP256, sym::hash_to_i32)         => sym::_bhp256_hash_to_i32,
699            (sym::BHP256, sym::hash_to_i64)         => sym::_bhp256_hash_to_i64,
700            (sym::BHP256, sym::hash_to_i128)        => sym::_bhp256_hash_to_i128,
701            (sym::BHP256, sym::hash_to_u8)          => sym::_bhp256_hash_to_u8,
702            (sym::BHP256, sym::hash_to_u16)         => sym::_bhp256_hash_to_u16,
703            (sym::BHP256, sym::hash_to_u32)         => sym::_bhp256_hash_to_u32,
704            (sym::BHP256, sym::hash_to_u64)         => sym::_bhp256_hash_to_u64,
705            (sym::BHP256, sym::hash_to_u128)        => sym::_bhp256_hash_to_u128,
706            (sym::BHP256, sym::hash_to_scalar)      => sym::_bhp256_hash_to_scalar,
707            (sym::BHP256, sym::hash_to_address_raw) => sym::_bhp256_hash_to_address_raw,
708            (sym::BHP256, sym::hash_to_field_raw)   => sym::_bhp256_hash_to_field_raw,
709            (sym::BHP256, sym::hash_to_group_raw)   => sym::_bhp256_hash_to_group_raw,
710            (sym::BHP256, sym::hash_to_i8_raw)      => sym::_bhp256_hash_to_i8_raw,
711            (sym::BHP256, sym::hash_to_i16_raw)     => sym::_bhp256_hash_to_i16_raw,
712            (sym::BHP256, sym::hash_to_i32_raw)     => sym::_bhp256_hash_to_i32_raw,
713            (sym::BHP256, sym::hash_to_i64_raw)     => sym::_bhp256_hash_to_i64_raw,
714            (sym::BHP256, sym::hash_to_i128_raw)    => sym::_bhp256_hash_to_i128_raw,
715            (sym::BHP256, sym::hash_to_u8_raw)      => sym::_bhp256_hash_to_u8_raw,
716            (sym::BHP256, sym::hash_to_u16_raw)     => sym::_bhp256_hash_to_u16_raw,
717            (sym::BHP256, sym::hash_to_u32_raw)     => sym::_bhp256_hash_to_u32_raw,
718            (sym::BHP256, sym::hash_to_u64_raw)     => sym::_bhp256_hash_to_u64_raw,
719            (sym::BHP256, sym::hash_to_u128_raw)    => sym::_bhp256_hash_to_u128_raw,
720            (sym::BHP256, sym::hash_to_scalar_raw)  => sym::_bhp256_hash_to_scalar_raw,
721
722            (sym::BHP512, sym::hash_to_address)     => sym::_bhp512_hash_to_address,
723            (sym::BHP512, sym::hash_to_field)       => sym::_bhp512_hash_to_field,
724            (sym::BHP512, sym::hash_to_group)       => sym::_bhp512_hash_to_group,
725            (sym::BHP512, sym::hash_to_i8)          => sym::_bhp512_hash_to_i8,
726            (sym::BHP512, sym::hash_to_i16)         => sym::_bhp512_hash_to_i16,
727            (sym::BHP512, sym::hash_to_i32)         => sym::_bhp512_hash_to_i32,
728            (sym::BHP512, sym::hash_to_i64)         => sym::_bhp512_hash_to_i64,
729            (sym::BHP512, sym::hash_to_i128)        => sym::_bhp512_hash_to_i128,
730            (sym::BHP512, sym::hash_to_u8)          => sym::_bhp512_hash_to_u8,
731            (sym::BHP512, sym::hash_to_u16)         => sym::_bhp512_hash_to_u16,
732            (sym::BHP512, sym::hash_to_u32)         => sym::_bhp512_hash_to_u32,
733            (sym::BHP512, sym::hash_to_u64)         => sym::_bhp512_hash_to_u64,
734            (sym::BHP512, sym::hash_to_u128)        => sym::_bhp512_hash_to_u128,
735            (sym::BHP512, sym::hash_to_scalar)      => sym::_bhp512_hash_to_scalar,
736            (sym::BHP512, sym::hash_to_address_raw) => sym::_bhp512_hash_to_address_raw,
737            (sym::BHP512, sym::hash_to_field_raw)   => sym::_bhp512_hash_to_field_raw,
738            (sym::BHP512, sym::hash_to_group_raw)   => sym::_bhp512_hash_to_group_raw,
739            (sym::BHP512, sym::hash_to_i8_raw)      => sym::_bhp512_hash_to_i8_raw,
740            (sym::BHP512, sym::hash_to_i16_raw)     => sym::_bhp512_hash_to_i16_raw,
741            (sym::BHP512, sym::hash_to_i32_raw)     => sym::_bhp512_hash_to_i32_raw,
742            (sym::BHP512, sym::hash_to_i64_raw)     => sym::_bhp512_hash_to_i64_raw,
743            (sym::BHP512, sym::hash_to_i128_raw)    => sym::_bhp512_hash_to_i128_raw,
744            (sym::BHP512, sym::hash_to_u8_raw)      => sym::_bhp512_hash_to_u8_raw,
745            (sym::BHP512, sym::hash_to_u16_raw)     => sym::_bhp512_hash_to_u16_raw,
746            (sym::BHP512, sym::hash_to_u32_raw)     => sym::_bhp512_hash_to_u32_raw,
747            (sym::BHP512, sym::hash_to_u64_raw)     => sym::_bhp512_hash_to_u64_raw,
748            (sym::BHP512, sym::hash_to_u128_raw)    => sym::_bhp512_hash_to_u128_raw,
749            (sym::BHP512, sym::hash_to_scalar_raw)  => sym::_bhp512_hash_to_scalar_raw,
750
751            (sym::BHP768, sym::hash_to_address)     => sym::_bhp768_hash_to_address,
752            (sym::BHP768, sym::hash_to_field)       => sym::_bhp768_hash_to_field,
753            (sym::BHP768, sym::hash_to_group)       => sym::_bhp768_hash_to_group,
754            (sym::BHP768, sym::hash_to_i8)          => sym::_bhp768_hash_to_i8,
755            (sym::BHP768, sym::hash_to_i16)         => sym::_bhp768_hash_to_i16,
756            (sym::BHP768, sym::hash_to_i32)         => sym::_bhp768_hash_to_i32,
757            (sym::BHP768, sym::hash_to_i64)         => sym::_bhp768_hash_to_i64,
758            (sym::BHP768, sym::hash_to_i128)        => sym::_bhp768_hash_to_i128,
759            (sym::BHP768, sym::hash_to_u8)          => sym::_bhp768_hash_to_u8,
760            (sym::BHP768, sym::hash_to_u16)         => sym::_bhp768_hash_to_u16,
761            (sym::BHP768, sym::hash_to_u32)         => sym::_bhp768_hash_to_u32,
762            (sym::BHP768, sym::hash_to_u64)         => sym::_bhp768_hash_to_u64,
763            (sym::BHP768, sym::hash_to_u128)        => sym::_bhp768_hash_to_u128,
764            (sym::BHP768, sym::hash_to_scalar)      => sym::_bhp768_hash_to_scalar,
765            (sym::BHP768, sym::hash_to_address_raw) => sym::_bhp768_hash_to_address_raw,
766            (sym::BHP768, sym::hash_to_field_raw)   => sym::_bhp768_hash_to_field_raw,
767            (sym::BHP768, sym::hash_to_group_raw)   => sym::_bhp768_hash_to_group_raw,
768            (sym::BHP768, sym::hash_to_i8_raw)      => sym::_bhp768_hash_to_i8_raw,
769            (sym::BHP768, sym::hash_to_i16_raw)     => sym::_bhp768_hash_to_i16_raw,
770            (sym::BHP768, sym::hash_to_i32_raw)     => sym::_bhp768_hash_to_i32_raw,
771            (sym::BHP768, sym::hash_to_i64_raw)     => sym::_bhp768_hash_to_i64_raw,
772            (sym::BHP768, sym::hash_to_i128_raw)    => sym::_bhp768_hash_to_i128_raw,
773            (sym::BHP768, sym::hash_to_u8_raw)      => sym::_bhp768_hash_to_u8_raw,
774            (sym::BHP768, sym::hash_to_u16_raw)     => sym::_bhp768_hash_to_u16_raw,
775            (sym::BHP768, sym::hash_to_u32_raw)     => sym::_bhp768_hash_to_u32_raw,
776            (sym::BHP768, sym::hash_to_u64_raw)     => sym::_bhp768_hash_to_u64_raw,
777            (sym::BHP768, sym::hash_to_u128_raw)    => sym::_bhp768_hash_to_u128_raw,
778            (sym::BHP768, sym::hash_to_scalar_raw)  => sym::_bhp768_hash_to_scalar_raw,
779
780            (sym::BHP1024, sym::hash_to_address)     => sym::_bhp1024_hash_to_address,
781            (sym::BHP1024, sym::hash_to_field)       => sym::_bhp1024_hash_to_field,
782            (sym::BHP1024, sym::hash_to_group)       => sym::_bhp1024_hash_to_group,
783            (sym::BHP1024, sym::hash_to_i8)          => sym::_bhp1024_hash_to_i8,
784            (sym::BHP1024, sym::hash_to_i16)         => sym::_bhp1024_hash_to_i16,
785            (sym::BHP1024, sym::hash_to_i32)         => sym::_bhp1024_hash_to_i32,
786            (sym::BHP1024, sym::hash_to_i64)         => sym::_bhp1024_hash_to_i64,
787            (sym::BHP1024, sym::hash_to_i128)        => sym::_bhp1024_hash_to_i128,
788            (sym::BHP1024, sym::hash_to_u8)          => sym::_bhp1024_hash_to_u8,
789            (sym::BHP1024, sym::hash_to_u16)         => sym::_bhp1024_hash_to_u16,
790            (sym::BHP1024, sym::hash_to_u32)         => sym::_bhp1024_hash_to_u32,
791            (sym::BHP1024, sym::hash_to_u64)         => sym::_bhp1024_hash_to_u64,
792            (sym::BHP1024, sym::hash_to_u128)        => sym::_bhp1024_hash_to_u128,
793            (sym::BHP1024, sym::hash_to_scalar)      => sym::_bhp1024_hash_to_scalar,
794            (sym::BHP1024, sym::hash_to_address_raw) => sym::_bhp1024_hash_to_address_raw,
795            (sym::BHP1024, sym::hash_to_field_raw)   => sym::_bhp1024_hash_to_field_raw,
796            (sym::BHP1024, sym::hash_to_group_raw)   => sym::_bhp1024_hash_to_group_raw,
797            (sym::BHP1024, sym::hash_to_i8_raw)      => sym::_bhp1024_hash_to_i8_raw,
798            (sym::BHP1024, sym::hash_to_i16_raw)     => sym::_bhp1024_hash_to_i16_raw,
799            (sym::BHP1024, sym::hash_to_i32_raw)     => sym::_bhp1024_hash_to_i32_raw,
800            (sym::BHP1024, sym::hash_to_i64_raw)     => sym::_bhp1024_hash_to_i64_raw,
801            (sym::BHP1024, sym::hash_to_i128_raw)    => sym::_bhp1024_hash_to_i128_raw,
802            (sym::BHP1024, sym::hash_to_u8_raw)      => sym::_bhp1024_hash_to_u8_raw,
803            (sym::BHP1024, sym::hash_to_u16_raw)     => sym::_bhp1024_hash_to_u16_raw,
804            (sym::BHP1024, sym::hash_to_u32_raw)     => sym::_bhp1024_hash_to_u32_raw,
805            (sym::BHP1024, sym::hash_to_u64_raw)     => sym::_bhp1024_hash_to_u64_raw,
806            (sym::BHP1024, sym::hash_to_u128_raw)    => sym::_bhp1024_hash_to_u128_raw,
807            (sym::BHP1024, sym::hash_to_scalar_raw)  => sym::_bhp1024_hash_to_scalar_raw,
808
809            (sym::Keccak256, sym::hash_to_address)     => sym::_keccak256_hash_to_address,
810            (sym::Keccak256, sym::hash_to_field)       => sym::_keccak256_hash_to_field,
811            (sym::Keccak256, sym::hash_to_group)       => sym::_keccak256_hash_to_group,
812            (sym::Keccak256, sym::hash_to_i8)          => sym::_keccak256_hash_to_i8,
813            (sym::Keccak256, sym::hash_to_i16)         => sym::_keccak256_hash_to_i16,
814            (sym::Keccak256, sym::hash_to_i32)         => sym::_keccak256_hash_to_i32,
815            (sym::Keccak256, sym::hash_to_i64)         => sym::_keccak256_hash_to_i64,
816            (sym::Keccak256, sym::hash_to_i128)        => sym::_keccak256_hash_to_i128,
817            (sym::Keccak256, sym::hash_to_u8)          => sym::_keccak256_hash_to_u8,
818            (sym::Keccak256, sym::hash_to_u16)         => sym::_keccak256_hash_to_u16,
819            (sym::Keccak256, sym::hash_to_u32)         => sym::_keccak256_hash_to_u32,
820            (sym::Keccak256, sym::hash_to_u64)         => sym::_keccak256_hash_to_u64,
821            (sym::Keccak256, sym::hash_to_u128)        => sym::_keccak256_hash_to_u128,
822            (sym::Keccak256, sym::hash_to_scalar)      => sym::_keccak256_hash_to_scalar,
823            (sym::Keccak256, sym::hash_to_address_raw) => sym::_keccak256_hash_to_address_raw,
824            (sym::Keccak256, sym::hash_to_field_raw)   => sym::_keccak256_hash_to_field_raw,
825            (sym::Keccak256, sym::hash_to_group_raw)   => sym::_keccak256_hash_to_group_raw,
826            (sym::Keccak256, sym::hash_to_i8_raw)      => sym::_keccak256_hash_to_i8_raw,
827            (sym::Keccak256, sym::hash_to_i16_raw)     => sym::_keccak256_hash_to_i16_raw,
828            (sym::Keccak256, sym::hash_to_i32_raw)     => sym::_keccak256_hash_to_i32_raw,
829            (sym::Keccak256, sym::hash_to_i64_raw)     => sym::_keccak256_hash_to_i64_raw,
830            (sym::Keccak256, sym::hash_to_i128_raw)    => sym::_keccak256_hash_to_i128_raw,
831            (sym::Keccak256, sym::hash_to_u8_raw)      => sym::_keccak256_hash_to_u8_raw,
832            (sym::Keccak256, sym::hash_to_u16_raw)     => sym::_keccak256_hash_to_u16_raw,
833            (sym::Keccak256, sym::hash_to_u32_raw)     => sym::_keccak256_hash_to_u32_raw,
834            (sym::Keccak256, sym::hash_to_u64_raw)     => sym::_keccak256_hash_to_u64_raw,
835            (sym::Keccak256, sym::hash_to_u128_raw)    => sym::_keccak256_hash_to_u128_raw,
836            (sym::Keccak256, sym::hash_to_scalar_raw)  => sym::_keccak256_hash_to_scalar_raw,
837            (sym::Keccak256, sym::hash_to_bits)         => sym::_keccak256_hash_to_bits,
838            (sym::Keccak256, sym::hash_to_bits_raw)     => sym::_keccak256_hash_to_bits_raw,
839
840            (sym::Keccak384, sym::hash_to_address)     => sym::_keccak384_hash_to_address,
841            (sym::Keccak384, sym::hash_to_field)       => sym::_keccak384_hash_to_field,
842            (sym::Keccak384, sym::hash_to_group)       => sym::_keccak384_hash_to_group,
843            (sym::Keccak384, sym::hash_to_i8)          => sym::_keccak384_hash_to_i8,
844            (sym::Keccak384, sym::hash_to_i16)         => sym::_keccak384_hash_to_i16,
845            (sym::Keccak384, sym::hash_to_i32)         => sym::_keccak384_hash_to_i32,
846            (sym::Keccak384, sym::hash_to_i64)         => sym::_keccak384_hash_to_i64,
847            (sym::Keccak384, sym::hash_to_i128)        => sym::_keccak384_hash_to_i128,
848            (sym::Keccak384, sym::hash_to_u8)          => sym::_keccak384_hash_to_u8,
849            (sym::Keccak384, sym::hash_to_u16)         => sym::_keccak384_hash_to_u16,
850            (sym::Keccak384, sym::hash_to_u32)         => sym::_keccak384_hash_to_u32,
851            (sym::Keccak384, sym::hash_to_u64)         => sym::_keccak384_hash_to_u64,
852            (sym::Keccak384, sym::hash_to_u128)        => sym::_keccak384_hash_to_u128,
853            (sym::Keccak384, sym::hash_to_scalar)      => sym::_keccak384_hash_to_scalar,
854            (sym::Keccak384, sym::hash_to_address_raw) => sym::_keccak384_hash_to_address_raw,
855            (sym::Keccak384, sym::hash_to_field_raw)   => sym::_keccak384_hash_to_field_raw,
856            (sym::Keccak384, sym::hash_to_group_raw)   => sym::_keccak384_hash_to_group_raw,
857            (sym::Keccak384, sym::hash_to_i8_raw)      => sym::_keccak384_hash_to_i8_raw,
858            (sym::Keccak384, sym::hash_to_i16_raw)     => sym::_keccak384_hash_to_i16_raw,
859            (sym::Keccak384, sym::hash_to_i32_raw)     => sym::_keccak384_hash_to_i32_raw,
860            (sym::Keccak384, sym::hash_to_i64_raw)     => sym::_keccak384_hash_to_i64_raw,
861            (sym::Keccak384, sym::hash_to_i128_raw)    => sym::_keccak384_hash_to_i128_raw,
862            (sym::Keccak384, sym::hash_to_u8_raw)      => sym::_keccak384_hash_to_u8_raw,
863            (sym::Keccak384, sym::hash_to_u16_raw)     => sym::_keccak384_hash_to_u16_raw,
864            (sym::Keccak384, sym::hash_to_u32_raw)     => sym::_keccak384_hash_to_u32_raw,
865            (sym::Keccak384, sym::hash_to_u64_raw)     => sym::_keccak384_hash_to_u64_raw,
866            (sym::Keccak384, sym::hash_to_u128_raw)    => sym::_keccak384_hash_to_u128_raw,
867            (sym::Keccak384, sym::hash_to_scalar_raw)  => sym::_keccak384_hash_to_scalar_raw,
868            (sym::Keccak384, sym::hash_to_bits)         => sym::_keccak384_hash_to_bits,
869            (sym::Keccak384, sym::hash_to_bits_raw)     => sym::_keccak384_hash_to_bits_raw,
870
871            (sym::Keccak512, sym::hash_to_address)     => sym::_keccak512_hash_to_address,
872            (sym::Keccak512, sym::hash_to_field)       => sym::_keccak512_hash_to_field,
873            (sym::Keccak512, sym::hash_to_group)       => sym::_keccak512_hash_to_group,
874            (sym::Keccak512, sym::hash_to_i8)          => sym::_keccak512_hash_to_i8,
875            (sym::Keccak512, sym::hash_to_i16)         => sym::_keccak512_hash_to_i16,
876            (sym::Keccak512, sym::hash_to_i32)         => sym::_keccak512_hash_to_i32,
877            (sym::Keccak512, sym::hash_to_i64)         => sym::_keccak512_hash_to_i64,
878            (sym::Keccak512, sym::hash_to_i128)        => sym::_keccak512_hash_to_i128,
879            (sym::Keccak512, sym::hash_to_u8)          => sym::_keccak512_hash_to_u8,
880            (sym::Keccak512, sym::hash_to_u16)         => sym::_keccak512_hash_to_u16,
881            (sym::Keccak512, sym::hash_to_u32)         => sym::_keccak512_hash_to_u32,
882            (sym::Keccak512, sym::hash_to_u64)         => sym::_keccak512_hash_to_u64,
883            (sym::Keccak512, sym::hash_to_u128)        => sym::_keccak512_hash_to_u128,
884            (sym::Keccak512, sym::hash_to_scalar)      => sym::_keccak512_hash_to_scalar,
885            (sym::Keccak512, sym::hash_to_address_raw) => sym::_keccak512_hash_to_address_raw,
886            (sym::Keccak512, sym::hash_to_field_raw)   => sym::_keccak512_hash_to_field_raw,
887            (sym::Keccak512, sym::hash_to_group_raw)   => sym::_keccak512_hash_to_group_raw,
888            (sym::Keccak512, sym::hash_to_i8_raw)      => sym::_keccak512_hash_to_i8_raw,
889            (sym::Keccak512, sym::hash_to_i16_raw)     => sym::_keccak512_hash_to_i16_raw,
890            (sym::Keccak512, sym::hash_to_i32_raw)     => sym::_keccak512_hash_to_i32_raw,
891            (sym::Keccak512, sym::hash_to_i64_raw)     => sym::_keccak512_hash_to_i64_raw,
892            (sym::Keccak512, sym::hash_to_i128_raw)    => sym::_keccak512_hash_to_i128_raw,
893            (sym::Keccak512, sym::hash_to_u8_raw)      => sym::_keccak512_hash_to_u8_raw,
894            (sym::Keccak512, sym::hash_to_u16_raw)     => sym::_keccak512_hash_to_u16_raw,
895            (sym::Keccak512, sym::hash_to_u32_raw)     => sym::_keccak512_hash_to_u32_raw,
896            (sym::Keccak512, sym::hash_to_u64_raw)     => sym::_keccak512_hash_to_u64_raw,
897            (sym::Keccak512, sym::hash_to_u128_raw)    => sym::_keccak512_hash_to_u128_raw,
898            (sym::Keccak512, sym::hash_to_scalar_raw)  => sym::_keccak512_hash_to_scalar_raw,
899            (sym::Keccak512, sym::hash_to_bits)         => sym::_keccak512_hash_to_bits,
900            (sym::Keccak512, sym::hash_to_bits_raw)     => sym::_keccak512_hash_to_bits_raw,
901
902            (sym::Pedersen64, sym::hash_to_address)     => sym::_pedersen64_hash_to_address,
903            (sym::Pedersen64, sym::hash_to_field)       => sym::_pedersen64_hash_to_field,
904            (sym::Pedersen64, sym::hash_to_group)       => sym::_pedersen64_hash_to_group,
905            (sym::Pedersen64, sym::hash_to_i8)          => sym::_pedersen64_hash_to_i8,
906            (sym::Pedersen64, sym::hash_to_i16)         => sym::_pedersen64_hash_to_i16,
907            (sym::Pedersen64, sym::hash_to_i32)         => sym::_pedersen64_hash_to_i32,
908            (sym::Pedersen64, sym::hash_to_i64)         => sym::_pedersen64_hash_to_i64,
909            (sym::Pedersen64, sym::hash_to_i128)        => sym::_pedersen64_hash_to_i128,
910            (sym::Pedersen64, sym::hash_to_u8)          => sym::_pedersen64_hash_to_u8,
911            (sym::Pedersen64, sym::hash_to_u16)         => sym::_pedersen64_hash_to_u16,
912            (sym::Pedersen64, sym::hash_to_u32)         => sym::_pedersen64_hash_to_u32,
913            (sym::Pedersen64, sym::hash_to_u64)         => sym::_pedersen64_hash_to_u64,
914            (sym::Pedersen64, sym::hash_to_u128)        => sym::_pedersen64_hash_to_u128,
915            (sym::Pedersen64, sym::hash_to_scalar)      => sym::_pedersen64_hash_to_scalar,
916            (sym::Pedersen64, sym::hash_to_address_raw) => sym::_pedersen64_hash_to_address_raw,
917            (sym::Pedersen64, sym::hash_to_field_raw)   => sym::_pedersen64_hash_to_field_raw,
918            (sym::Pedersen64, sym::hash_to_group_raw)   => sym::_pedersen64_hash_to_group_raw,
919            (sym::Pedersen64, sym::hash_to_i8_raw)      => sym::_pedersen64_hash_to_i8_raw,
920            (sym::Pedersen64, sym::hash_to_i16_raw)     => sym::_pedersen64_hash_to_i16_raw,
921            (sym::Pedersen64, sym::hash_to_i32_raw)     => sym::_pedersen64_hash_to_i32_raw,
922            (sym::Pedersen64, sym::hash_to_i64_raw)     => sym::_pedersen64_hash_to_i64_raw,
923            (sym::Pedersen64, sym::hash_to_i128_raw)    => sym::_pedersen64_hash_to_i128_raw,
924            (sym::Pedersen64, sym::hash_to_u8_raw)      => sym::_pedersen64_hash_to_u8_raw,
925            (sym::Pedersen64, sym::hash_to_u16_raw)     => sym::_pedersen64_hash_to_u16_raw,
926            (sym::Pedersen64, sym::hash_to_u32_raw)     => sym::_pedersen64_hash_to_u32_raw,
927            (sym::Pedersen64, sym::hash_to_u64_raw)     => sym::_pedersen64_hash_to_u64_raw,
928            (sym::Pedersen64, sym::hash_to_u128_raw)    => sym::_pedersen64_hash_to_u128_raw,
929            (sym::Pedersen64, sym::hash_to_scalar_raw)  => sym::_pedersen64_hash_to_scalar_raw,
930
931            (sym::Pedersen128, sym::hash_to_address)     => sym::_pedersen128_hash_to_address,
932            (sym::Pedersen128, sym::hash_to_field)       => sym::_pedersen128_hash_to_field,
933            (sym::Pedersen128, sym::hash_to_group)       => sym::_pedersen128_hash_to_group,
934            (sym::Pedersen128, sym::hash_to_i8)          => sym::_pedersen128_hash_to_i8,
935            (sym::Pedersen128, sym::hash_to_i16)         => sym::_pedersen128_hash_to_i16,
936            (sym::Pedersen128, sym::hash_to_i32)         => sym::_pedersen128_hash_to_i32,
937            (sym::Pedersen128, sym::hash_to_i64)         => sym::_pedersen128_hash_to_i64,
938            (sym::Pedersen128, sym::hash_to_i128)        => sym::_pedersen128_hash_to_i128,
939            (sym::Pedersen128, sym::hash_to_u8)          => sym::_pedersen128_hash_to_u8,
940            (sym::Pedersen128, sym::hash_to_u16)         => sym::_pedersen128_hash_to_u16,
941            (sym::Pedersen128, sym::hash_to_u32)         => sym::_pedersen128_hash_to_u32,
942            (sym::Pedersen128, sym::hash_to_u64)         => sym::_pedersen128_hash_to_u64,
943            (sym::Pedersen128, sym::hash_to_u128)        => sym::_pedersen128_hash_to_u128,
944            (sym::Pedersen128, sym::hash_to_scalar)      => sym::_pedersen128_hash_to_scalar,
945            (sym::Pedersen128, sym::hash_to_address_raw) => sym::_pedersen128_hash_to_address_raw,
946            (sym::Pedersen128, sym::hash_to_field_raw)   => sym::_pedersen128_hash_to_field_raw,
947            (sym::Pedersen128, sym::hash_to_group_raw)   => sym::_pedersen128_hash_to_group_raw,
948            (sym::Pedersen128, sym::hash_to_i8_raw)      => sym::_pedersen128_hash_to_i8_raw,
949            (sym::Pedersen128, sym::hash_to_i16_raw)     => sym::_pedersen128_hash_to_i16_raw,
950            (sym::Pedersen128, sym::hash_to_i32_raw)     => sym::_pedersen128_hash_to_i32_raw,
951            (sym::Pedersen128, sym::hash_to_i64_raw)     => sym::_pedersen128_hash_to_i64_raw,
952            (sym::Pedersen128, sym::hash_to_i128_raw)    => sym::_pedersen128_hash_to_i128_raw,
953            (sym::Pedersen128, sym::hash_to_u8_raw)      => sym::_pedersen128_hash_to_u8_raw,
954            (sym::Pedersen128, sym::hash_to_u16_raw)     => sym::_pedersen128_hash_to_u16_raw,
955            (sym::Pedersen128, sym::hash_to_u32_raw)     => sym::_pedersen128_hash_to_u32_raw,
956            (sym::Pedersen128, sym::hash_to_u64_raw)     => sym::_pedersen128_hash_to_u64_raw,
957            (sym::Pedersen128, sym::hash_to_u128_raw)    => sym::_pedersen128_hash_to_u128_raw,
958            (sym::Pedersen128, sym::hash_to_scalar_raw)  => sym::_pedersen128_hash_to_scalar_raw,
959
960            (sym::Poseidon2, sym::hash_to_address)     => sym::_poseidon2_hash_to_address,
961            (sym::Poseidon2, sym::hash_to_field)       => sym::_poseidon2_hash_to_field,
962            (sym::Poseidon2, sym::hash_to_group)       => sym::_poseidon2_hash_to_group,
963            (sym::Poseidon2, sym::hash_to_i8)          => sym::_poseidon2_hash_to_i8,
964            (sym::Poseidon2, sym::hash_to_i16)         => sym::_poseidon2_hash_to_i16,
965            (sym::Poseidon2, sym::hash_to_i32)         => sym::_poseidon2_hash_to_i32,
966            (sym::Poseidon2, sym::hash_to_i64)         => sym::_poseidon2_hash_to_i64,
967            (sym::Poseidon2, sym::hash_to_i128)        => sym::_poseidon2_hash_to_i128,
968            (sym::Poseidon2, sym::hash_to_u8)          => sym::_poseidon2_hash_to_u8,
969            (sym::Poseidon2, sym::hash_to_u16)         => sym::_poseidon2_hash_to_u16,
970            (sym::Poseidon2, sym::hash_to_u32)         => sym::_poseidon2_hash_to_u32,
971            (sym::Poseidon2, sym::hash_to_u64)         => sym::_poseidon2_hash_to_u64,
972            (sym::Poseidon2, sym::hash_to_u128)        => sym::_poseidon2_hash_to_u128,
973            (sym::Poseidon2, sym::hash_to_scalar)      => sym::_poseidon2_hash_to_scalar,
974            (sym::Poseidon2, sym::hash_to_address_raw) => sym::_poseidon2_hash_to_address_raw,
975            (sym::Poseidon2, sym::hash_to_field_raw)   => sym::_poseidon2_hash_to_field_raw,
976            (sym::Poseidon2, sym::hash_to_group_raw)   => sym::_poseidon2_hash_to_group_raw,
977            (sym::Poseidon2, sym::hash_to_i8_raw)      => sym::_poseidon2_hash_to_i8_raw,
978            (sym::Poseidon2, sym::hash_to_i16_raw)     => sym::_poseidon2_hash_to_i16_raw,
979            (sym::Poseidon2, sym::hash_to_i32_raw)     => sym::_poseidon2_hash_to_i32_raw,
980            (sym::Poseidon2, sym::hash_to_i64_raw)     => sym::_poseidon2_hash_to_i64_raw,
981            (sym::Poseidon2, sym::hash_to_i128_raw)    => sym::_poseidon2_hash_to_i128_raw,
982            (sym::Poseidon2, sym::hash_to_u8_raw)      => sym::_poseidon2_hash_to_u8_raw,
983            (sym::Poseidon2, sym::hash_to_u16_raw)     => sym::_poseidon2_hash_to_u16_raw,
984            (sym::Poseidon2, sym::hash_to_u32_raw)     => sym::_poseidon2_hash_to_u32_raw,
985            (sym::Poseidon2, sym::hash_to_u64_raw)     => sym::_poseidon2_hash_to_u64_raw,
986            (sym::Poseidon2, sym::hash_to_u128_raw)    => sym::_poseidon2_hash_to_u128_raw,
987            (sym::Poseidon2, sym::hash_to_scalar_raw)  => sym::_poseidon2_hash_to_scalar_raw,
988
989            (sym::Poseidon4, sym::hash_to_address)     => sym::_poseidon4_hash_to_address,
990            (sym::Poseidon4, sym::hash_to_field)       => sym::_poseidon4_hash_to_field,
991            (sym::Poseidon4, sym::hash_to_group)       => sym::_poseidon4_hash_to_group,
992            (sym::Poseidon4, sym::hash_to_i8)          => sym::_poseidon4_hash_to_i8,
993            (sym::Poseidon4, sym::hash_to_i16)         => sym::_poseidon4_hash_to_i16,
994            (sym::Poseidon4, sym::hash_to_i32)         => sym::_poseidon4_hash_to_i32,
995            (sym::Poseidon4, sym::hash_to_i64)         => sym::_poseidon4_hash_to_i64,
996            (sym::Poseidon4, sym::hash_to_i128)        => sym::_poseidon4_hash_to_i128,
997            (sym::Poseidon4, sym::hash_to_u8)          => sym::_poseidon4_hash_to_u8,
998            (sym::Poseidon4, sym::hash_to_u16)         => sym::_poseidon4_hash_to_u16,
999            (sym::Poseidon4, sym::hash_to_u32)         => sym::_poseidon4_hash_to_u32,
1000            (sym::Poseidon4, sym::hash_to_u64)         => sym::_poseidon4_hash_to_u64,
1001            (sym::Poseidon4, sym::hash_to_u128)        => sym::_poseidon4_hash_to_u128,
1002            (sym::Poseidon4, sym::hash_to_scalar)      => sym::_poseidon4_hash_to_scalar,
1003            (sym::Poseidon4, sym::hash_to_address_raw) => sym::_poseidon4_hash_to_address_raw,
1004            (sym::Poseidon4, sym::hash_to_field_raw)   => sym::_poseidon4_hash_to_field_raw,
1005            (sym::Poseidon4, sym::hash_to_group_raw)   => sym::_poseidon4_hash_to_group_raw,
1006            (sym::Poseidon4, sym::hash_to_i8_raw)      => sym::_poseidon4_hash_to_i8_raw,
1007            (sym::Poseidon4, sym::hash_to_i16_raw)     => sym::_poseidon4_hash_to_i16_raw,
1008            (sym::Poseidon4, sym::hash_to_i32_raw)     => sym::_poseidon4_hash_to_i32_raw,
1009            (sym::Poseidon4, sym::hash_to_i64_raw)     => sym::_poseidon4_hash_to_i64_raw,
1010            (sym::Poseidon4, sym::hash_to_i128_raw)    => sym::_poseidon4_hash_to_i128_raw,
1011            (sym::Poseidon4, sym::hash_to_u8_raw)      => sym::_poseidon4_hash_to_u8_raw,
1012            (sym::Poseidon4, sym::hash_to_u16_raw)     => sym::_poseidon4_hash_to_u16_raw,
1013            (sym::Poseidon4, sym::hash_to_u32_raw)     => sym::_poseidon4_hash_to_u32_raw,
1014            (sym::Poseidon4, sym::hash_to_u64_raw)     => sym::_poseidon4_hash_to_u64_raw,
1015            (sym::Poseidon4, sym::hash_to_u128_raw)    => sym::_poseidon4_hash_to_u128_raw,
1016            (sym::Poseidon4, sym::hash_to_scalar_raw)  => sym::_poseidon4_hash_to_scalar_raw,
1017
1018            (sym::Poseidon8, sym::hash_to_address)     => sym::_poseidon8_hash_to_address,
1019            (sym::Poseidon8, sym::hash_to_field)       => sym::_poseidon8_hash_to_field,
1020            (sym::Poseidon8, sym::hash_to_group)       => sym::_poseidon8_hash_to_group,
1021            (sym::Poseidon8, sym::hash_to_i8)          => sym::_poseidon8_hash_to_i8,
1022            (sym::Poseidon8, sym::hash_to_i16)         => sym::_poseidon8_hash_to_i16,
1023            (sym::Poseidon8, sym::hash_to_i32)         => sym::_poseidon8_hash_to_i32,
1024            (sym::Poseidon8, sym::hash_to_i64)         => sym::_poseidon8_hash_to_i64,
1025            (sym::Poseidon8, sym::hash_to_i128)        => sym::_poseidon8_hash_to_i128,
1026            (sym::Poseidon8, sym::hash_to_u8)          => sym::_poseidon8_hash_to_u8,
1027            (sym::Poseidon8, sym::hash_to_u16)         => sym::_poseidon8_hash_to_u16,
1028            (sym::Poseidon8, sym::hash_to_u32)         => sym::_poseidon8_hash_to_u32,
1029            (sym::Poseidon8, sym::hash_to_u64)         => sym::_poseidon8_hash_to_u64,
1030            (sym::Poseidon8, sym::hash_to_u128)        => sym::_poseidon8_hash_to_u128,
1031            (sym::Poseidon8, sym::hash_to_scalar)      => sym::_poseidon8_hash_to_scalar,
1032            (sym::Poseidon8, sym::hash_to_address_raw) => sym::_poseidon8_hash_to_address_raw,
1033            (sym::Poseidon8, sym::hash_to_field_raw)   => sym::_poseidon8_hash_to_field_raw,
1034            (sym::Poseidon8, sym::hash_to_group_raw)   => sym::_poseidon8_hash_to_group_raw,
1035            (sym::Poseidon8, sym::hash_to_i8_raw)      => sym::_poseidon8_hash_to_i8_raw,
1036            (sym::Poseidon8, sym::hash_to_i16_raw)     => sym::_poseidon8_hash_to_i16_raw,
1037            (sym::Poseidon8, sym::hash_to_i32_raw)     => sym::_poseidon8_hash_to_i32_raw,
1038            (sym::Poseidon8, sym::hash_to_i64_raw)     => sym::_poseidon8_hash_to_i64_raw,
1039            (sym::Poseidon8, sym::hash_to_i128_raw)    => sym::_poseidon8_hash_to_i128_raw,
1040            (sym::Poseidon8, sym::hash_to_u8_raw)      => sym::_poseidon8_hash_to_u8_raw,
1041            (sym::Poseidon8, sym::hash_to_u16_raw)     => sym::_poseidon8_hash_to_u16_raw,
1042            (sym::Poseidon8, sym::hash_to_u32_raw)     => sym::_poseidon8_hash_to_u32_raw,
1043            (sym::Poseidon8, sym::hash_to_u64_raw)     => sym::_poseidon8_hash_to_u64_raw,
1044            (sym::Poseidon8, sym::hash_to_u128_raw)    => sym::_poseidon8_hash_to_u128_raw,
1045            (sym::Poseidon8, sym::hash_to_scalar_raw)  => sym::_poseidon8_hash_to_scalar_raw,
1046
1047            (sym::SHA3_256, sym::hash_to_address)     => sym::_sha3_256_hash_to_address,
1048            (sym::SHA3_256, sym::hash_to_field)       => sym::_sha3_256_hash_to_field,
1049            (sym::SHA3_256, sym::hash_to_group)       => sym::_sha3_256_hash_to_group,
1050            (sym::SHA3_256, sym::hash_to_i8)          => sym::_sha3_256_hash_to_i8,
1051            (sym::SHA3_256, sym::hash_to_i16)         => sym::_sha3_256_hash_to_i16,
1052            (sym::SHA3_256, sym::hash_to_i32)         => sym::_sha3_256_hash_to_i32,
1053            (sym::SHA3_256, sym::hash_to_i64)         => sym::_sha3_256_hash_to_i64,
1054            (sym::SHA3_256, sym::hash_to_i128)        => sym::_sha3_256_hash_to_i128,
1055            (sym::SHA3_256, sym::hash_to_u8)          => sym::_sha3_256_hash_to_u8,
1056            (sym::SHA3_256, sym::hash_to_u16)         => sym::_sha3_256_hash_to_u16,
1057            (sym::SHA3_256, sym::hash_to_u32)         => sym::_sha3_256_hash_to_u32,
1058            (sym::SHA3_256, sym::hash_to_u64)         => sym::_sha3_256_hash_to_u64,
1059            (sym::SHA3_256, sym::hash_to_u128)        => sym::_sha3_256_hash_to_u128,
1060            (sym::SHA3_256, sym::hash_to_scalar)      => sym::_sha3_256_hash_to_scalar,
1061            (sym::SHA3_256, sym::hash_to_address_raw) => sym::_sha3_256_hash_to_address_raw,
1062            (sym::SHA3_256, sym::hash_to_field_raw)   => sym::_sha3_256_hash_to_field_raw,
1063            (sym::SHA3_256, sym::hash_to_group_raw)   => sym::_sha3_256_hash_to_group_raw,
1064            (sym::SHA3_256, sym::hash_to_i8_raw)      => sym::_sha3_256_hash_to_i8_raw,
1065            (sym::SHA3_256, sym::hash_to_i16_raw)     => sym::_sha3_256_hash_to_i16_raw,
1066            (sym::SHA3_256, sym::hash_to_i32_raw)     => sym::_sha3_256_hash_to_i32_raw,
1067            (sym::SHA3_256, sym::hash_to_i64_raw)     => sym::_sha3_256_hash_to_i64_raw,
1068            (sym::SHA3_256, sym::hash_to_i128_raw)    => sym::_sha3_256_hash_to_i128_raw,
1069            (sym::SHA3_256, sym::hash_to_u8_raw)      => sym::_sha3_256_hash_to_u8_raw,
1070            (sym::SHA3_256, sym::hash_to_u16_raw)     => sym::_sha3_256_hash_to_u16_raw,
1071            (sym::SHA3_256, sym::hash_to_u32_raw)     => sym::_sha3_256_hash_to_u32_raw,
1072            (sym::SHA3_256, sym::hash_to_u64_raw)     => sym::_sha3_256_hash_to_u64_raw,
1073            (sym::SHA3_256, sym::hash_to_u128_raw)    => sym::_sha3_256_hash_to_u128_raw,
1074            (sym::SHA3_256, sym::hash_to_scalar_raw)  => sym::_sha3_256_hash_to_scalar_raw,
1075            (sym::SHA3_256, sym::hash_to_bits)         => sym::_sha3_256_hash_to_bits,
1076            (sym::SHA3_256, sym::hash_to_bits_raw)     => sym::_sha3_256_hash_to_bits_raw,
1077
1078            (sym::SHA3_384, sym::hash_to_address)     => sym::_sha3_384_hash_to_address,
1079            (sym::SHA3_384, sym::hash_to_field)       => sym::_sha3_384_hash_to_field,
1080            (sym::SHA3_384, sym::hash_to_group)       => sym::_sha3_384_hash_to_group,
1081            (sym::SHA3_384, sym::hash_to_i8)          => sym::_sha3_384_hash_to_i8,
1082            (sym::SHA3_384, sym::hash_to_i16)         => sym::_sha3_384_hash_to_i16,
1083            (sym::SHA3_384, sym::hash_to_i32)         => sym::_sha3_384_hash_to_i32,
1084            (sym::SHA3_384, sym::hash_to_i64)         => sym::_sha3_384_hash_to_i64,
1085            (sym::SHA3_384, sym::hash_to_i128)        => sym::_sha3_384_hash_to_i128,
1086            (sym::SHA3_384, sym::hash_to_u8)          => sym::_sha3_384_hash_to_u8,
1087            (sym::SHA3_384, sym::hash_to_u16)         => sym::_sha3_384_hash_to_u16,
1088            (sym::SHA3_384, sym::hash_to_u32)         => sym::_sha3_384_hash_to_u32,
1089            (sym::SHA3_384, sym::hash_to_u64)         => sym::_sha3_384_hash_to_u64,
1090            (sym::SHA3_384, sym::hash_to_u128)        => sym::_sha3_384_hash_to_u128,
1091            (sym::SHA3_384, sym::hash_to_scalar)      => sym::_sha3_384_hash_to_scalar,
1092            (sym::SHA3_384, sym::hash_to_address_raw) => sym::_sha3_384_hash_to_address_raw,
1093            (sym::SHA3_384, sym::hash_to_field_raw)   => sym::_sha3_384_hash_to_field_raw,
1094            (sym::SHA3_384, sym::hash_to_group_raw)   => sym::_sha3_384_hash_to_group_raw,
1095            (sym::SHA3_384, sym::hash_to_i8_raw)      => sym::_sha3_384_hash_to_i8_raw,
1096            (sym::SHA3_384, sym::hash_to_i16_raw)     => sym::_sha3_384_hash_to_i16_raw,
1097            (sym::SHA3_384, sym::hash_to_i32_raw)     => sym::_sha3_384_hash_to_i32_raw,
1098            (sym::SHA3_384, sym::hash_to_i64_raw)     => sym::_sha3_384_hash_to_i64_raw,
1099            (sym::SHA3_384, sym::hash_to_i128_raw)    => sym::_sha3_384_hash_to_i128_raw,
1100            (sym::SHA3_384, sym::hash_to_u8_raw)      => sym::_sha3_384_hash_to_u8_raw,
1101            (sym::SHA3_384, sym::hash_to_u16_raw)     => sym::_sha3_384_hash_to_u16_raw,
1102            (sym::SHA3_384, sym::hash_to_u32_raw)     => sym::_sha3_384_hash_to_u32_raw,
1103            (sym::SHA3_384, sym::hash_to_u64_raw)     => sym::_sha3_384_hash_to_u64_raw,
1104            (sym::SHA3_384, sym::hash_to_u128_raw)    => sym::_sha3_384_hash_to_u128_raw,
1105            (sym::SHA3_384, sym::hash_to_scalar_raw)  => sym::_sha3_384_hash_to_scalar_raw,
1106            (sym::SHA3_384, sym::hash_to_bits)         => sym::_sha3_384_hash_to_bits,
1107            (sym::SHA3_384, sym::hash_to_bits_raw)     => sym::_sha3_384_hash_to_bits_raw,
1108
1109            (sym::SHA3_512, sym::hash_to_address)     => sym::_sha3_512_hash_to_address,
1110            (sym::SHA3_512, sym::hash_to_field)       => sym::_sha3_512_hash_to_field,
1111            (sym::SHA3_512, sym::hash_to_group)       => sym::_sha3_512_hash_to_group,
1112            (sym::SHA3_512, sym::hash_to_i8)          => sym::_sha3_512_hash_to_i8,
1113            (sym::SHA3_512, sym::hash_to_i16)         => sym::_sha3_512_hash_to_i16,
1114            (sym::SHA3_512, sym::hash_to_i32)         => sym::_sha3_512_hash_to_i32,
1115            (sym::SHA3_512, sym::hash_to_i64)         => sym::_sha3_512_hash_to_i64,
1116            (sym::SHA3_512, sym::hash_to_i128)        => sym::_sha3_512_hash_to_i128,
1117            (sym::SHA3_512, sym::hash_to_u8)          => sym::_sha3_512_hash_to_u8,
1118            (sym::SHA3_512, sym::hash_to_u16)         => sym::_sha3_512_hash_to_u16,
1119            (sym::SHA3_512, sym::hash_to_u32)         => sym::_sha3_512_hash_to_u32,
1120            (sym::SHA3_512, sym::hash_to_u64)         => sym::_sha3_512_hash_to_u64,
1121            (sym::SHA3_512, sym::hash_to_u128)        => sym::_sha3_512_hash_to_u128,
1122            (sym::SHA3_512, sym::hash_to_scalar)      => sym::_sha3_512_hash_to_scalar,
1123            (sym::SHA3_512, sym::hash_to_address_raw) => sym::_sha3_512_hash_to_address_raw,
1124            (sym::SHA3_512, sym::hash_to_field_raw)   => sym::_sha3_512_hash_to_field_raw,
1125            (sym::SHA3_512, sym::hash_to_group_raw)   => sym::_sha3_512_hash_to_group_raw,
1126            (sym::SHA3_512, sym::hash_to_i8_raw)      => sym::_sha3_512_hash_to_i8_raw,
1127            (sym::SHA3_512, sym::hash_to_i16_raw)     => sym::_sha3_512_hash_to_i16_raw,
1128            (sym::SHA3_512, sym::hash_to_i32_raw)     => sym::_sha3_512_hash_to_i32_raw,
1129            (sym::SHA3_512, sym::hash_to_i64_raw)     => sym::_sha3_512_hash_to_i64_raw,
1130            (sym::SHA3_512, sym::hash_to_i128_raw)    => sym::_sha3_512_hash_to_i128_raw,
1131            (sym::SHA3_512, sym::hash_to_u8_raw)      => sym::_sha3_512_hash_to_u8_raw,
1132            (sym::SHA3_512, sym::hash_to_u16_raw)     => sym::_sha3_512_hash_to_u16_raw,
1133            (sym::SHA3_512, sym::hash_to_u32_raw)     => sym::_sha3_512_hash_to_u32_raw,
1134            (sym::SHA3_512, sym::hash_to_u64_raw)     => sym::_sha3_512_hash_to_u64_raw,
1135            (sym::SHA3_512, sym::hash_to_u128_raw)    => sym::_sha3_512_hash_to_u128_raw,
1136            (sym::SHA3_512, sym::hash_to_scalar_raw)  => sym::_sha3_512_hash_to_scalar_raw,
1137            (sym::SHA3_512, sym::hash_to_bits)         => sym::_sha3_512_hash_to_bits,
1138            (sym::SHA3_512, sym::hash_to_bits_raw)     => sym::_sha3_512_hash_to_bits_raw,
1139
1140            (sym::ECDSA, sym::verify_digest)          => sym::_ecdsa_verify_digest,
1141            (sym::ECDSA, sym::verify_digest_eth)      => sym::_ecdsa_verify_digest_eth,
1142            (sym::ECDSA, sym::verify_keccak256)       => sym::_ecdsa_verify_keccak256,
1143            (sym::ECDSA, sym::verify_keccak256_raw)   => sym::_ecdsa_verify_keccak256_raw,
1144            (sym::ECDSA, sym::verify_keccak256_eth)   => sym::_ecdsa_verify_keccak256_eth,
1145            (sym::ECDSA, sym::verify_keccak384)       => sym::_ecdsa_verify_keccak384,
1146            (sym::ECDSA, sym::verify_keccak384_raw)   => sym::_ecdsa_verify_keccak384_raw,
1147            (sym::ECDSA, sym::verify_keccak384_eth)   => sym::_ecdsa_verify_keccak384_eth,
1148            (sym::ECDSA, sym::verify_keccak512)       => sym::_ecdsa_verify_keccak512,
1149            (sym::ECDSA, sym::verify_keccak512_raw)   => sym::_ecdsa_verify_keccak512_raw,
1150            (sym::ECDSA, sym::verify_keccak512_eth)   => sym::_ecdsa_verify_keccak512_eth,
1151            (sym::ECDSA, sym::verify_sha3_256)        => sym::_ecdsa_verify_sha3_256,
1152            (sym::ECDSA, sym::verify_sha3_256_raw)    => sym::_ecdsa_verify_sha3_256_raw,
1153            (sym::ECDSA, sym::verify_sha3_256_eth)    => sym::_ecdsa_verify_sha3_256_eth,
1154            (sym::ECDSA, sym::verify_sha3_384)        => sym::_ecdsa_verify_sha3_384,
1155            (sym::ECDSA, sym::verify_sha3_384_raw)    => sym::_ecdsa_verify_sha3_384_raw,
1156            (sym::ECDSA, sym::verify_sha3_384_eth)    => sym::_ecdsa_verify_sha3_384_eth,
1157            (sym::ECDSA, sym::verify_sha3_512)        => sym::_ecdsa_verify_sha3_512,
1158            (sym::ECDSA, sym::verify_sha3_512_raw)    => sym::_ecdsa_verify_sha3_512_raw,
1159            (sym::ECDSA, sym::verify_sha3_512_eth)    => sym::_ecdsa_verify_sha3_512_eth,
1160
1161            (_, sym::get) => Symbol::intern("__unresolved_get"),
1162            (_, sym::set) => Symbol::intern("__unresolved_set"),
1163
1164            (sym::Mapping, sym::get_or_use) => sym::_mapping_get_or_use,
1165            (sym::Mapping, sym::remove) => sym::_mapping_remove,
1166            (sym::Mapping, sym::contains) => sym::_mapping_contains,
1167
1168            (sym::Optional, sym::unwrap) => sym::_optional_unwrap,
1169            (sym::Optional, sym::unwrap_or) => sym::_optional_unwrap_or,
1170
1171            (sym::Vector, sym::push) => sym::_vector_push,
1172            (sym::Vector, sym::len) => sym::_vector_len,
1173            (sym::Vector, sym::clear) => sym::_vector_clear,
1174            (sym::Vector, sym::pop) => sym::_vector_pop,
1175            (sym::Vector, sym::swap_remove) => sym::_vector_swap_remove,
1176
1177            (sym::group, sym::to_x_coordinate) => sym::_group_to_x_coordinate,
1178            (sym::group, sym::to_y_coordinate) => sym::_group_to_y_coordinate,
1179
1180            (sym::ProgramCore, sym::checksum) => sym::_program_checksum,
1181            (sym::ProgramCore, sym::edition) => sym::_program_edition,
1182            (sym::ProgramCore, sym::program_owner) => sym::_program_owner,
1183
1184            (sym::signature, sym::verify) => sym::_signature_verify,
1185            (sym::Future, sym::Await) => sym::_future_await,
1186
1187            (sym::Serialize, sym::to_bits) => sym::_serialize_to_bits,
1188            (sym::Serialize, sym::to_bits_raw) => sym::_serialize_to_bits_raw,
1189
1190            (sym::CheatCode, sym::print_mapping) => sym::_cheat_code_print_mapping,
1191            (sym::CheatCode, sym::set_block_height) => sym::_cheat_code_set_block_height,
1192            (sym::CheatCode, sym::set_block_timestamp) => sym::_cheat_code_set_block_timestamp,
1193            (sym::CheatCode, sym::set_signer) => sym::_cheat_code_set_signer,
1194            _ => return None,
1195        })
1196    }
1197
1198    /// Returns the number of arguments required by the instruction.
1199    pub fn num_args(&self) -> usize {
1200        match self {
1201            Self::ChaChaRand(_) => 0,
1202            Self::GroupGen => 0,
1203            Self::SelfAddress => 0,
1204            Self::SelfCaller => 0,
1205            Self::SelfChecksum => 0,
1206            Self::SelfEdition => 0,
1207            Self::SelfId => 0,
1208            Self::SelfProgramOwner => 0,
1209            Self::SelfSigner => 0,
1210            Self::BlockHeight => 0,
1211            Self::BlockTimestamp => 0,
1212            Self::NetworkId => 0,
1213
1214            Self::Commit(_, _) => 2,
1215            Self::Hash(_, _) => 1,
1216            Self::ECDSAVerify(_) => 3,
1217
1218            Self::Get => 2,
1219            Self::Set => 3,
1220
1221            Self::MappingGetOrUse => 3,
1222            Self::MappingRemove => 2,
1223            Self::MappingContains => 2,
1224
1225            Self::OptionalUnwrap => 1,
1226            Self::OptionalUnwrapOr => 2,
1227
1228            Self::VectorPush => 2,
1229            Self::VectorLen => 1,
1230            Self::VectorClear => 1,
1231            Self::VectorPop => 1,
1232            Self::VectorSwapRemove => 2,
1233
1234            Self::GroupToXCoordinate => 1,
1235            Self::GroupToYCoordinate => 1,
1236
1237            Self::SignatureVerify => 3,
1238            Self::FutureAwait => 1,
1239
1240            Self::ProgramChecksum => 1,
1241            Self::ProgramEdition => 1,
1242            Self::ProgramOwner => 1,
1243
1244            Self::Serialize(_) => 1,
1245            Self::Deserialize(_, _) => 1,
1246
1247            Self::CheatCodePrintMapping => 1,
1248            Self::CheatCodeSetBlockHeight => 1,
1249            Self::CheatCodeSetBlockTimestamp => 1,
1250            Self::CheatCodeSetSigner => 1,
1251        }
1252    }
1253
1254    /// Returns whether or not this function is finalize command.
1255    pub fn is_finalize_command(&self) -> bool {
1256        match self {
1257            Intrinsic::FutureAwait
1258            | Intrinsic::ChaChaRand(_)
1259            | Intrinsic::ECDSAVerify(_)
1260            | Intrinsic::Get
1261            | Intrinsic::MappingGetOrUse
1262            | Intrinsic::Set
1263            | Intrinsic::MappingRemove
1264            | Intrinsic::MappingContains
1265            | Intrinsic::ProgramChecksum
1266            | Intrinsic::ProgramEdition
1267            | Intrinsic::ProgramOwner
1268            | Intrinsic::VectorPush
1269            | Intrinsic::VectorLen
1270            | Intrinsic::VectorClear
1271            | Intrinsic::VectorPop
1272            | Intrinsic::VectorSwapRemove => true,
1273            Intrinsic::Commit(_, _)
1274            | Intrinsic::Hash(_, _)
1275            | Intrinsic::OptionalUnwrap
1276            | Intrinsic::OptionalUnwrapOr
1277            | Intrinsic::GroupToXCoordinate
1278            | Intrinsic::GroupToYCoordinate
1279            | Intrinsic::GroupGen
1280            | Intrinsic::SelfAddress
1281            | Intrinsic::SelfCaller
1282            | Intrinsic::SelfChecksum
1283            | Intrinsic::SelfEdition
1284            | Intrinsic::SelfId
1285            | Intrinsic::SelfProgramOwner
1286            | Intrinsic::SelfSigner
1287            | Intrinsic::BlockHeight
1288            | Intrinsic::BlockTimestamp
1289            | Intrinsic::NetworkId
1290            | Intrinsic::SignatureVerify
1291            | Intrinsic::Serialize(_)
1292            | Intrinsic::Deserialize(_, _)
1293            | Intrinsic::CheatCodePrintMapping
1294            | Intrinsic::CheatCodeSetBlockHeight
1295            | Intrinsic::CheatCodeSetBlockTimestamp
1296            | Intrinsic::CheatCodeSetSigner => false,
1297        }
1298    }
1299
1300    /// Returns whether or not this function has side effects
1301    pub fn is_pure(&self) -> bool {
1302        match self {
1303            Intrinsic::FutureAwait
1304            | Intrinsic::Set
1305            | Intrinsic::VectorPush
1306            | Intrinsic::VectorClear
1307            | Intrinsic::CheatCodePrintMapping
1308            | Intrinsic::CheatCodeSetBlockHeight
1309            | Intrinsic::CheatCodeSetBlockTimestamp
1310            | Intrinsic::CheatCodeSetSigner
1311            | Intrinsic::VectorPop
1312            // Pedersen64 and Pedersen128 operations can fail for large inputs.
1313            | Intrinsic::Hash(
1314                HashVariant::HashPED64
1315                | HashVariant::HashPED64Raw
1316                | HashVariant::HashPED128
1317                | HashVariant::HashPED128Raw,
1318                _,
1319            )
1320            // Mapping operations have side effects
1321            | Intrinsic::MappingRemove
1322            | Intrinsic::Get // _mapping_get, not _vector_get; but we're conservative
1323            | Intrinsic::MappingGetOrUse
1324            | Intrinsic::MappingContains
1325            | Intrinsic::VectorSwapRemove => false,
1326
1327            Intrinsic::ChaChaRand(_)
1328            | Intrinsic::ECDSAVerify(_)
1329            | Intrinsic::ProgramChecksum
1330            | Intrinsic::ProgramEdition
1331            | Intrinsic::ProgramOwner
1332            | Intrinsic::VectorLen
1333            | Intrinsic::Commit(_, _)
1334            | Intrinsic::Hash(_, _)
1335            | Intrinsic::OptionalUnwrap
1336            | Intrinsic::OptionalUnwrapOr
1337            | Intrinsic::GroupToXCoordinate
1338            | Intrinsic::GroupToYCoordinate
1339            | Intrinsic::GroupGen
1340            | Intrinsic::SelfAddress
1341            | Intrinsic::SelfCaller
1342            | Intrinsic::SelfChecksum
1343            | Intrinsic::SelfEdition
1344            | Intrinsic::SelfId
1345            | Intrinsic::SelfProgramOwner
1346            | Intrinsic::SelfSigner
1347            | Intrinsic::BlockHeight
1348            | Intrinsic::BlockTimestamp
1349            | Intrinsic::NetworkId
1350            | Intrinsic::SignatureVerify
1351            | Intrinsic::Serialize(_)
1352            | Intrinsic::Deserialize(_, _) => true,
1353        }
1354    }
1355}