From fe3b697e4c439abc56b02b14ad8fc11640215e48 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Fri, 18 Oct 2024 18:52:52 +0200 Subject: [PATCH 1/3] KakarotSerde: implement get_identifier --- Cargo.lock | 2 + crates/exex/Cargo.toml | 2 +- crates/exex/src/lib.rs | 1 + crates/exex/src/serde.rs | 208 +++++ crates/exex/test_data/valid_program.json | 1075 ++++++++++++++++++++++ 5 files changed, 1287 insertions(+), 1 deletion(-) create mode 100644 crates/exex/src/serde.rs create mode 100644 crates/exex/test_data/valid_program.json diff --git a/Cargo.lock b/Cargo.lock index 715a5c3..52b3edd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1496,6 +1496,7 @@ version = "1.0.1" source = "git+https://github.com/lambdaclass/cairo-vm.git?tag=v1.0.1#93f1f54f38059af89850b1c06d4c901300f9b94d" dependencies = [ "anyhow", + "arbitrary", "bincode 2.0.0-rc.3", "bitvec", "generic-array", @@ -8703,6 +8704,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa1b9e01ccb217ab6d475c5cda05dbb22c30029f7bb52b192a010a00d77a3d74" dependencies = [ + "arbitrary", "lambdaworks-crypto", "lambdaworks-math", "num-bigint", diff --git a/crates/exex/Cargo.toml b/crates/exex/Cargo.toml index 22282f5..a56b7f8 100644 --- a/crates/exex/Cargo.toml +++ b/crates/exex/Cargo.toml @@ -10,7 +10,7 @@ workspace = true [dependencies] # Cairo-VM deps -cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm.git", tag = "v1.0.1" } +cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm.git", tag = "v1.0.1", features = ["test_utils"] } kakarot-pool = { workspace = true } diff --git a/crates/exex/src/lib.rs b/crates/exex/src/lib.rs index 97cd488..b77379e 100644 --- a/crates/exex/src/lib.rs +++ b/crates/exex/src/lib.rs @@ -3,3 +3,4 @@ pub mod execution; pub mod exex; pub mod hints; pub mod model; +pub mod serde; diff --git a/crates/exex/src/serde.rs b/crates/exex/src/serde.rs new file mode 100644 index 0000000..b3e9f86 --- /dev/null +++ b/crates/exex/src/serde.rs @@ -0,0 +1,208 @@ +use cairo_vm::{ + serde::deserialize_program::Identifier, + vm::{runners::cairo_runner::CairoRunner, vm_memory::memory::Memory}, +}; +use thiserror::Error; + +/// Represents errors that can occur during the serialization and deserialization processes between +/// Cairo VM programs and Rust representations. +#[derive(Debug, Error)] +pub enum KakarotSerdeError { + /// Error variant indicating that no identifier matching the specified name was found. + #[error("Expected one struct named '{struct_name}', found 0 matches. Expected type: {expected_type:?}")] + IdentifierNotFound { + /// The name of the struct that was not found. + struct_name: String, + /// The expected type of the struct (if applicable). + expected_type: Option, + }, + + /// Error variant indicating that multiple identifiers matching the specified name were found. + #[error("Expected one struct named '{struct_name}', found {count} matches. Expected type: {expected_type:?}")] + MultipleIdentifiersFound { + /// The name of the struct for which multiple identifiers were found. + struct_name: String, + /// The expected type of the struct (if applicable). + expected_type: Option, + /// The number of matching identifiers found. + count: usize, + }, +} + +/// A structure representing the Kakarot serialization and deserialization context for Cairo +/// programs. +/// +/// This struct encapsulates the components required to serialize and deserialize +/// Kakarot programs, including: +/// - The Cairo runner responsible for executing the program +/// - The memory +#[allow(missing_debug_implementations)] +pub struct KakarotSerde { + /// The Cairo runner used to execute Kakarot programs. + /// + /// This runner interacts with the Cairo virtual machine, providing the necessary + /// infrastructure for running and managing the execution of Cairo programs. + /// It is responsible for handling program execution flow, managing state, and + /// providing access to program identifiers. + runner: CairoRunner, + + /// The memory used to store memory cells inside segments and relocation rules. + /// + /// This is used to have direct access to the memory cells and their values. + #[allow(dead_code)] + memory: Memory, +} + +impl KakarotSerde { + /// Retrieves a unique identifier from the Cairo program based on the specified struct name and + /// expected type. + /// + /// This function searches for identifiers that match the provided struct name and type within + /// the Cairo program's identifier mappings. It returns an error if no identifiers or + /// multiple identifiers are found. + pub fn get_identifier( + &self, + struct_name: &str, + expected_type: Option, + ) -> Result { + // Retrieve identifiers from the program and filter them based on the struct name and + // expected type + let identifiers = self + .runner + .get_program() + .iter_identifiers() + .filter(|(key, value)| { + key.contains(struct_name) && + key.split('.').last() == struct_name.split('.').last() && + value.type_ == expected_type + }) + .map(|(_, value)| value) + .collect::>(); + + // Match on the number of found identifiers + match identifiers.len() { + // No identifiers found + 0 => Err(KakarotSerdeError::IdentifierNotFound { + struct_name: struct_name.to_string(), + expected_type, + }), + // Exactly one identifier found, return it + 1 => Ok(identifiers[0].clone()), + // More than one identifier found + count => Err(KakarotSerdeError::MultipleIdentifiersFound { + struct_name: struct_name.to_string(), + expected_type, + count, + }), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use cairo_vm::types::{layout_name::LayoutName, program::Program}; + + #[test] + fn test_program_identifier_valid() { + // Load the valid program content from a JSON file + let program_content = include_bytes!("../test_data/valid_program.json"); + + // Create a Program instance from the loaded bytes, specifying "main" as the entry point + let program = Program::from_bytes(program_content, Some("main")).unwrap(); + + // Initialize a CairoRunner with the created program and default parameters + let runner = CairoRunner::new(&program, LayoutName::plain, false, false).unwrap(); + + // Create a new instance of KakarotSerde, passing in the runner and a new Memory instance + let kakarot_serde = KakarotSerde { runner, memory: Memory::new() }; + + // Check if the identifier "main" with expected type "function" is correctly retrieved + assert_eq!( + kakarot_serde.get_identifier("main", Some("function".to_string())).unwrap(), + Identifier { + pc: Some(13), + type_: Some("function".to_string()), + value: None, + full_name: None, + members: None, + cairo_type: None + } + ); + + // Check if the identifier "__temp0" with expected type "reference" is correctly retrieved + assert_eq!( + kakarot_serde.get_identifier("__temp0", Some("reference".to_string())).unwrap(), + Identifier { + pc: None, + type_: Some("reference".to_string()), + value: None, + full_name: Some("__main__.check_range.__temp0".to_string()), + members: None, + cairo_type: Some("felt".to_string()) + } + ); + } + + #[test] + fn test_program_identifier_erroneous_identifier() { + // Load the valid program content from a JSON file + let program_content = include_bytes!("../test_data/valid_program.json"); + + // Create a Program instance from the loaded bytes, specifying "main" as the entry point + let program = Program::from_bytes(program_content, Some("main")).unwrap(); + + // Initialize a CairoRunner with the created program and default parameters + let runner = CairoRunner::new(&program, LayoutName::plain, false, false).unwrap(); + + // Create a new instance of KakarotSerde, passing in the runner and a new Memory instance + let kakarot_serde = KakarotSerde { runner, memory: Memory::new() }; + + // Test for a non-existent identifier + let result = + kakarot_serde.get_identifier("non_existent_struct", Some("function".to_string())); + // Check if the error is valid and validate its parameters + if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { + assert_eq!(struct_name, "non_existent_struct"); + assert_eq!(expected_type, Some("function".to_string())); + } else { + panic!("Expected KakarotSerdeError::IdentifierNotFound"); + } + + // Test for an identifier used incorrectly (not the last segment of the full name) + let result = kakarot_serde.get_identifier("check_range", Some("struct".to_string())); + // Check if the error is valid and validate its parameters + if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { + assert_eq!(struct_name, "check_range"); + assert_eq!(expected_type, Some("struct".to_string())); + } else { + panic!("Expected KakarotSerdeError::IdentifierNotFound"); + } + + // Test for a valid identifier but with an incorrect type + let result = kakarot_serde.get_identifier("main", Some("struct".to_string())); + // Check if the error is valid and validate its parameters + if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { + assert_eq!(struct_name, "main"); + assert_eq!(expected_type, Some("struct".to_string())); + } else { + panic!("Expected KakarotSerdeError::IdentifierNotFound"); + } + + // Test for an identifier with multiple matches + let result = kakarot_serde.get_identifier("ImplicitArgs", Some("struct".to_string())); + // Check if the error is valid and validate its parameters + if let Err(KakarotSerdeError::MultipleIdentifiersFound { + struct_name, + expected_type, + count, + }) = result + { + assert_eq!(struct_name, "ImplicitArgs"); + assert_eq!(expected_type, Some("struct".to_string())); + assert_eq!(count, 3); + } else { + panic!("Expected KakarotSerdeError::MultipleIdentifiersFound"); + } + } +} diff --git a/crates/exex/test_data/valid_program.json b/crates/exex/test_data/valid_program.json new file mode 100644 index 0000000..15357ee --- /dev/null +++ b/crates/exex/test_data/valid_program.json @@ -0,0 +1,1075 @@ +{ + "attributes": [], + "builtins": [ + "output", + "range_check" + ], + "data": [ + "0x400380007ffc7ffd", + "0x482680017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x400380007ffc7ffd", + "0x480680017fff8000", + "0xffffffffffffffff", + "0x48287ffd80007fff", + "0x400280017ffc7fff", + "0x482680017ffc8000", + "0x2", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x7", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff5", + "0x480a7ffc7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe" + ], + "debug_info": { + "file_contents": {}, + "instruction_locations": { + "0": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 0 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 1, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 31, + "end_line": 3, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 3 + } + }, + "1": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 0 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 36, + "end_line": 4, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 39, + "end_line": 2, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 14, + "end_line": 5, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 5 + }, + "While trying to retrieve the implicit argument 'output_ptr' in:" + ], + "start_col": 21, + "start_line": 2 + }, + "While expanding the reference 'output_ptr' in:" + ], + "start_col": 22, + "start_line": 4 + } + }, + "3": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 1 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 14, + "end_line": 5, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 5 + } + }, + "4": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 0 + }, + "reference_ids": { + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 28, + "end_line": 8, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 8 + } + }, + "5": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 0 + }, + "reference_ids": { + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 47, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 36, + "start_line": 9 + } + }, + "7": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 1 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 53, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 36, + "start_line": 9 + } + }, + "8": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 2 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 53, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 9 + } + }, + "9": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 2 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 46, + "end_line": 10, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 16, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 11 + }, + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 + }, + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 27, + "start_line": 10 + } + }, + "11": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 3 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 38, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 15, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 12, + "start_line": 11 + }, + "While expanding the reference 'num' in:" + ], + "start_col": 35, + "start_line": 5 + } + }, + "12": { + "accessible_scopes": [ + "__main__", + "__main__.check_range" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 4 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 16, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 11 + } + }, + "13": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 0 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } + }, + "hints": [], + "inst": { + "end_col": 51, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 21, + "start_line": 15 + }, + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 + }, + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 30, + "start_line": 14 + } + }, + "14": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 1 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } + }, + "hints": [], + "inst": { + "end_col": 34, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 33, + "start_line": 15 + } + }, + "16": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 2 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } + }, + "hints": [], + "inst": { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 21, + "start_line": 15 + } + }, + "18": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 8 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } + }, + "hints": [], + "inst": { + "end_col": 28, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 39, + "end_line": 2, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 24, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 16 + }, + "While trying to retrieve the implicit argument 'output_ptr' in:" + ], + "start_col": 21, + "start_line": 2 + }, + "While expanding the reference 'output_ptr' in:" + ], + "start_col": 11, + "start_line": 14 + } + }, + "19": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 9 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } + }, + "hints": [], + "inst": { + "end_col": 18, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 23, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 20, + "start_line": 16 + }, + "While expanding the reference 'num' in:" + ], + "start_col": 9, + "start_line": 15 + } + }, + "20": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 10 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } + }, + "hints": [], + "inst": { + "end_col": 24, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 16 + } + }, + "22": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 13 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 12, + "__main__.main.range_check_ptr": 10 + } + }, + "hints": [], + "inst": { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 51, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 13, + "end_line": 17, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 17 + }, + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 30, + "start_line": 14 + }, + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 21, + "start_line": 15 + }, + "While trying to update the implicit return value 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 + } + }, + "23": { + "accessible_scopes": [ + "__main__", + "__main__.main" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 14 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 12, + "__main__.main.range_check_ptr": 10 + } + }, + "hints": [], + "inst": { + "end_col": 13, + "end_line": 17, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 17 + } + } + } + }, + "hints": {}, + "identifiers": { + "__main__.check_range": { + "decorators": [], + "pc": 4, + "type": "function" + }, + "__main__.check_range.Args": { + "full_name": "__main__.check_range.Args", + "members": { + "num": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.ImplicitArgs": { + "full_name": "__main__.check_range.ImplicitArgs", + "members": { + "range_check_ptr": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.Return": { + "full_name": "__main__.check_range.Return", + "members": { + "num": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.check_range.__temp0": { + "cairo_type": "felt", + "full_name": "__main__.check_range.__temp0", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 1 + }, + "pc": 7, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.__temp1": { + "cairo_type": "felt", + "full_name": "__main__.check_range.__temp1", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.num": { + "cairo_type": "felt", + "full_name": "__main__.check_range.num", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-3), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.check_range.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-4), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 9, + "value": "cast([fp + (-4)] + 2, felt)" + } + ], + "type": "reference" + }, + "__main__.main": { + "decorators": [], + "pc": 13, + "type": "function" + }, + "__main__.main.Args": { + "full_name": "__main__.main.Args", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.main.ImplicitArgs": { + "full_name": "__main__.main.ImplicitArgs", + "members": { + "output_ptr": { + "cairo_type": "felt*", + "offset": 0 + }, + "range_check_ptr": { + "cairo_type": "felt", + "offset": 1 + } + }, + "size": 2, + "type": "struct" + }, + "__main__.main.Return": { + "full_name": "__main__.main.Return", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.main.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.main.num": { + "cairo_type": "felt", + "full_name": "__main__.main.num", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.main.output_ptr": { + "cairo_type": "felt*", + "full_name": "__main__.main.output_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 13 + }, + "pc": 22, + "value": "[cast(ap + (-1), felt**)]" + } + ], + "type": "reference" + }, + "__main__.main.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.main.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-2), felt*)]" + } + ], + "type": "reference" + }, + "__main__.serialize_word": { + "destination": "starkware.cairo.common.serialize.serialize_word", + "type": "alias" + }, + "starkware.cairo.common.serialize.serialize_word": { + "decorators": [], + "pc": 0, + "type": "function" + }, + "starkware.cairo.common.serialize.serialize_word.Args": { + "full_name": "starkware.cairo.common.serialize.serialize_word.Args", + "members": { + "word": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.ImplicitArgs": { + "full_name": "starkware.cairo.common.serialize.serialize_word.ImplicitArgs", + "members": { + "output_ptr": { + "cairo_type": "felt*", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.Return": { + "full_name": "starkware.cairo.common.serialize.serialize_word.Return", + "members": {}, + "size": 0, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "starkware.cairo.common.serialize.serialize_word.output_ptr": { + "cairo_type": "felt*", + "full_name": "starkware.cairo.common.serialize.serialize_word.output_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 1, + "value": "cast([fp + (-4)] + 1, felt*)" + } + ], + "type": "reference" + }, + "starkware.cairo.common.serialize.serialize_word.word": { + "cairo_type": "felt", + "full_name": "starkware.cairo.common.serialize.serialize_word.word", + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-3), felt*)]" + } + ], + "type": "reference" + } + }, + "main_scope": "__main__", + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "reference_manager": { + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 1, + "value": "cast([fp + (-4)] + 1, felt*)" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-4), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 1 + }, + "pc": 7, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 9, + "value": "cast([fp + (-4)] + 2, felt)" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 13 + }, + "pc": 22, + "value": "[cast(ap + (-1), felt**)]" + } + ] + } +} \ No newline at end of file From be1012ec771dde29fb5134f4451e5a3ed84fdef4 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Fri, 18 Oct 2024 18:54:30 +0200 Subject: [PATCH 2/3] fmt --- crates/exex/Cargo.toml | 4 +- crates/exex/test_data/valid_program.json | 2028 +++++++++++----------- 2 files changed, 993 insertions(+), 1039 deletions(-) diff --git a/crates/exex/Cargo.toml b/crates/exex/Cargo.toml index a56b7f8..e233731 100644 --- a/crates/exex/Cargo.toml +++ b/crates/exex/Cargo.toml @@ -10,7 +10,9 @@ workspace = true [dependencies] # Cairo-VM deps -cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm.git", tag = "v1.0.1", features = ["test_utils"] } +cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm.git", tag = "v1.0.1", features = [ + "test_utils", +] } kakarot-pool = { workspace = true } diff --git a/crates/exex/test_data/valid_program.json b/crates/exex/test_data/valid_program.json index 15357ee..9374250 100644 --- a/crates/exex/test_data/valid_program.json +++ b/crates/exex/test_data/valid_program.json @@ -1,1075 +1,1027 @@ { - "attributes": [], - "builtins": [ - "output", - "range_check" - ], - "data": [ - "0x400380007ffc7ffd", - "0x482680017ffc8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x400380007ffc7ffd", - "0x480680017fff8000", - "0xffffffffffffffff", - "0x48287ffd80007fff", - "0x400280017ffc7fff", - "0x482680017ffc8000", - "0x2", - "0x480a7ffd7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x7", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff5", - "0x480a7ffc7fff8000", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x48127ff97fff8000", - "0x208b7fff7fff7ffe" - ], - "debug_info": { - "file_contents": {}, - "instruction_locations": { - "0": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 0 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 1, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 31, - "end_line": 3, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 3 - } - }, - "1": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 0 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 36, - "end_line": 4, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 39, - "end_line": 2, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 14, - "end_line": 5, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 5 - }, - "While trying to retrieve the implicit argument 'output_ptr' in:" - ], - "start_col": 21, - "start_line": 2 - }, - "While expanding the reference 'output_ptr' in:" - ], - "start_col": 22, - "start_line": 4 - } - }, - "3": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 1 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 14, - "end_line": 5, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 5 - } - }, - "4": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 0 - }, - "reference_ids": { - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 28, - "end_line": 8, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 8 - } - }, - "5": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 0 - }, - "reference_ids": { - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 47, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 36, - "start_line": 9 - } - }, - "7": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 1 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 53, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 36, - "start_line": 9 - } - }, - "8": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 2 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 53, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 9 - } - }, - "9": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 2 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 46, - "end_line": 10, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 16, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 11 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 27, - "start_line": 10 - } - }, - "11": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 3 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 38, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 15, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 12, - "start_line": 11 - }, - "While expanding the reference 'num' in:" - ], - "start_col": 35, - "start_line": 5 - } - }, - "12": { - "accessible_scopes": [ - "__main__", - "__main__.check_range" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 4 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 16, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 11 - } - }, - "13": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 0 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 51, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 21, - "start_line": 15 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 30, - "start_line": 14 - } - }, - "14": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 1 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 34, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 33, - "start_line": 15 - } - }, - "16": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 2 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 21, - "start_line": 15 - } - }, - "18": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 8 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } + "attributes": [], + "builtins": ["output", "range_check"], + "data": [ + "0x400380007ffc7ffd", + "0x482680017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x400380007ffc7ffd", + "0x480680017fff8000", + "0xffffffffffffffff", + "0x48287ffd80007fff", + "0x400280017ffc7fff", + "0x482680017ffc8000", + "0x2", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x7", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff5", + "0x480a7ffc7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe" + ], + "debug_info": { + "file_contents": {}, + "instruction_locations": { + "0": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 0 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 1, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 31, + "end_line": 3, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 3 + } + }, + "1": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 0 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 36, + "end_line": 4, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 39, + "end_line": 2, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 14, + "end_line": 5, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 5 }, - "hints": [], - "inst": { - "end_col": 28, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 39, - "end_line": 2, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 24, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 16 - }, - "While trying to retrieve the implicit argument 'output_ptr' in:" - ], - "start_col": 21, - "start_line": 2 - }, - "While expanding the reference 'output_ptr' in:" - ], - "start_col": 11, - "start_line": 14 - } + "While trying to retrieve the implicit argument 'output_ptr' in:" + ], + "start_col": 21, + "start_line": 2 }, - "19": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 9 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } + "While expanding the reference 'output_ptr' in:" + ], + "start_col": 22, + "start_line": 4 + } + }, + "3": { + "accessible_scopes": [ + "starkware.cairo.common.serialize", + "starkware.cairo.common.serialize.serialize_word" + ], + "flow_tracking_data": { + "ap_tracking": { + "group": 0, + "offset": 1 + }, + "reference_ids": { + "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, + "starkware.cairo.common.serialize.serialize_word.word": 0 + } + }, + "hints": [], + "inst": { + "end_col": 14, + "end_line": 5, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "start_col": 5, + "start_line": 5 + } + }, + "4": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 0 + }, + "reference_ids": { + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 28, + "end_line": 8, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 8 + } + }, + "5": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 0 + }, + "reference_ids": { + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 47, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 36, + "start_line": 9 + } + }, + "7": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 1 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 53, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 36, + "start_line": 9 + } + }, + "8": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 2 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 4 + } + }, + "hints": [], + "inst": { + "end_col": 53, + "end_line": 9, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 9 + } + }, + "9": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 2 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 46, + "end_line": 10, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 16, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 11 }, - "hints": [], - "inst": { - "end_col": 18, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 23, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 20, - "start_line": 16 - }, - "While expanding the reference 'num' in:" - ], - "start_col": 9, - "start_line": 15 - } + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 }, - "20": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 10 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 24, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 16 - } + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 27, + "start_line": 10 + } + }, + "11": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 3 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 38, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 15, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 12, + "start_line": 11 }, - "22": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 13 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 12, - "__main__.main.range_check_ptr": 10 - } + "While expanding the reference 'num' in:" + ], + "start_col": 35, + "start_line": 5 + } + }, + "12": { + "accessible_scopes": ["__main__", "__main__.check_range"], + "flow_tracking_data": { + "ap_tracking": { + "group": 1, + "offset": 4 + }, + "reference_ids": { + "__main__.check_range.__temp0": 5, + "__main__.check_range.__temp1": 6, + "__main__.check_range.num": 3, + "__main__.check_range.range_check_ptr": 7 + } + }, + "hints": [], + "inst": { + "end_col": 16, + "end_line": 11, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 11 + } + }, + "13": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 0 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } + }, + "hints": [], + "inst": { + "end_col": 51, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 21, + "start_line": 15 }, - "hints": [], - "inst": { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 51, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 13, - "end_line": 17, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 17 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 30, - "start_line": 14 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 21, - "start_line": 15 - }, - "While trying to update the implicit return value 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - } + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 }, - "23": { - "accessible_scopes": [ - "__main__", - "__main__.main" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 14 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 12, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 13, - "end_line": 17, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 17 - } - } + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 30, + "start_line": 14 } - }, - "hints": {}, - "identifiers": { - "__main__.check_range": { - "decorators": [], - "pc": 4, - "type": "function" + }, + "14": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 1 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } }, - "__main__.check_range.Args": { - "full_name": "__main__.check_range.Args", - "members": { - "num": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" + "hints": [], + "inst": { + "end_col": 34, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 33, + "start_line": 15 + } + }, + "16": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 2 + }, + "reference_ids": { + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 9 + } + }, + "hints": [], + "inst": { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 21, + "start_line": 15 + } + }, + "18": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 8 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } }, - "__main__.check_range.ImplicitArgs": { - "full_name": "__main__.check_range.ImplicitArgs", - "members": { - "range_check_ptr": { - "cairo_type": "felt", - "offset": 0 - } + "hints": [], + "inst": { + "end_col": 28, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 39, + "end_line": 2, + "input_file": { + "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" + }, + "parent_location": [ + { + "end_col": 24, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 16 + }, + "While trying to retrieve the implicit argument 'output_ptr' in:" + ], + "start_col": 21, + "start_line": 2 }, - "size": 1, - "type": "struct" + "While expanding the reference 'output_ptr' in:" + ], + "start_col": 11, + "start_line": 14 + } + }, + "19": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 9 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } }, - "__main__.check_range.Return": { - "full_name": "__main__.check_range.Return", - "members": { - "num": { - "cairo_type": "felt", - "offset": 0 - } + "hints": [], + "inst": { + "end_col": 18, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 23, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 20, + "start_line": 16 }, - "size": 1, - "type": "struct" + "While expanding the reference 'num' in:" + ], + "start_col": 9, + "start_line": 15 + } + }, + "20": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 10 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 8, + "__main__.main.range_check_ptr": 10 + } }, - "__main__.check_range.SIZEOF_LOCALS": { - "type": "const", - "value": 0 + "hints": [], + "inst": { + "end_col": 24, + "end_line": 16, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 16 + } + }, + "22": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 13 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 12, + "__main__.main.range_check_ptr": 10 + } }, - "__main__.check_range.__temp0": { - "cairo_type": "felt", - "full_name": "__main__.check_range.__temp0", - "references": [ + "hints": [], + "inst": { + "end_col": 33, + "end_line": 5, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 35, + "end_line": 15, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ { - "ap_tracking_data": { - "group": 1, - "offset": 1 + "end_col": 51, + "end_line": 14, + "input_file": { + "filename": "main1.cairo" + }, + "parent_location": [ + { + "end_col": 13, + "end_line": 17, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 17 }, - "pc": 7, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" + "While trying to retrieve the implicit argument 'range_check_ptr' in:" + ], + "start_col": 30, + "start_line": 14 + }, + "While expanding the reference 'range_check_ptr' in:" + ], + "start_col": 21, + "start_line": 15 + }, + "While trying to update the implicit return value 'range_check_ptr' in:" + ], + "start_col": 18, + "start_line": 5 + } + }, + "23": { + "accessible_scopes": ["__main__", "__main__.main"], + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 14 + }, + "reference_ids": { + "__main__.main.num": 11, + "__main__.main.output_ptr": 12, + "__main__.main.range_check_ptr": 10 + } }, - "__main__.check_range.__temp1": { - "cairo_type": "felt", - "full_name": "__main__.check_range.__temp1", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" + "hints": [], + "inst": { + "end_col": 13, + "end_line": 17, + "input_file": { + "filename": "main1.cairo" + }, + "start_col": 5, + "start_line": 17 + } + } + } + }, + "hints": {}, + "identifiers": { + "__main__.check_range": { + "decorators": [], + "pc": 4, + "type": "function" + }, + "__main__.check_range.Args": { + "full_name": "__main__.check_range.Args", + "members": { + "num": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.ImplicitArgs": { + "full_name": "__main__.check_range.ImplicitArgs", + "members": { + "range_check_ptr": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.Return": { + "full_name": "__main__.check_range.Return", + "members": { + "num": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.check_range.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.check_range.__temp0": { + "cairo_type": "felt", + "full_name": "__main__.check_range.__temp0", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 1 + }, + "pc": 7, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.__temp1": { + "cairo_type": "felt", + "full_name": "__main__.check_range.__temp1", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.num": { + "cairo_type": "felt", + "full_name": "__main__.check_range.num", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-3), felt*)]" + } + ], + "type": "reference" + }, + "__main__.check_range.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.check_range.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 1, + "offset": 0 + }, + "pc": 4, + "value": "[cast(fp + (-4), felt*)]" }, - "__main__.check_range.num": { - "cairo_type": "felt", - "full_name": "__main__.check_range.num", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-3), felt*)]" - } - ], - "type": "reference" + { + "ap_tracking_data": { + "group": 1, + "offset": 2 + }, + "pc": 9, + "value": "cast([fp + (-4)] + 2, felt)" + } + ], + "type": "reference" + }, + "__main__.main": { + "decorators": [], + "pc": 13, + "type": "function" + }, + "__main__.main.Args": { + "full_name": "__main__.main.Args", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.main.ImplicitArgs": { + "full_name": "__main__.main.ImplicitArgs", + "members": { + "output_ptr": { + "cairo_type": "felt*", + "offset": 0 }, - "__main__.check_range.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.check_range.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-4), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 9, - "value": "cast([fp + (-4)] + 2, felt)" - } - ], - "type": "reference" + "range_check_ptr": { + "cairo_type": "felt", + "offset": 1 + } + }, + "size": 2, + "type": "struct" + }, + "__main__.main.Return": { + "full_name": "__main__.main.Return", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.main.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.main.num": { + "cairo_type": "felt", + "full_name": "__main__.main.num", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.main.output_ptr": { + "cairo_type": "felt*", + "full_name": "__main__.main.output_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-4), felt**)]" }, - "__main__.main": { - "decorators": [], - "pc": 13, - "type": "function" + { + "ap_tracking_data": { + "group": 2, + "offset": 13 + }, + "pc": 22, + "value": "[cast(ap + (-1), felt**)]" + } + ], + "type": "reference" + }, + "__main__.main.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.main.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 13, + "value": "[cast(fp + (-3), felt*)]" }, - "__main__.main.Args": { - "full_name": "__main__.main.Args", - "members": {}, - "size": 0, - "type": "struct" + { + "ap_tracking_data": { + "group": 2, + "offset": 8 + }, + "pc": 18, + "value": "[cast(ap + (-2), felt*)]" + } + ], + "type": "reference" + }, + "__main__.serialize_word": { + "destination": "starkware.cairo.common.serialize.serialize_word", + "type": "alias" + }, + "starkware.cairo.common.serialize.serialize_word": { + "decorators": [], + "pc": 0, + "type": "function" + }, + "starkware.cairo.common.serialize.serialize_word.Args": { + "full_name": "starkware.cairo.common.serialize.serialize_word.Args", + "members": { + "word": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.ImplicitArgs": { + "full_name": "starkware.cairo.common.serialize.serialize_word.ImplicitArgs", + "members": { + "output_ptr": { + "cairo_type": "felt*", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.Return": { + "full_name": "starkware.cairo.common.serialize.serialize_word.Return", + "members": {}, + "size": 0, + "type": "struct" + }, + "starkware.cairo.common.serialize.serialize_word.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "starkware.cairo.common.serialize.serialize_word.output_ptr": { + "cairo_type": "felt*", + "full_name": "starkware.cairo.common.serialize.serialize_word.output_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-4), felt**)]" }, - "__main__.main.ImplicitArgs": { - "full_name": "__main__.main.ImplicitArgs", - "members": { - "output_ptr": { - "cairo_type": "felt*", - "offset": 0 - }, - "range_check_ptr": { - "cairo_type": "felt", - "offset": 1 - } - }, - "size": 2, - "type": "struct" + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 1, + "value": "cast([fp + (-4)] + 1, felt*)" + } + ], + "type": "reference" + }, + "starkware.cairo.common.serialize.serialize_word.word": { + "cairo_type": "felt", + "full_name": "starkware.cairo.common.serialize.serialize_word.word", + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 + }, + "pc": 0, + "value": "[cast(fp + (-3), felt*)]" + } + ], + "type": "reference" + } + }, + "main_scope": "__main__", + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "reference_manager": { + "references": [ + { + "ap_tracking_data": { + "group": 0, + "offset": 0 }, - "__main__.main.Return": { - "full_name": "__main__.main.Return", - "members": {}, - "size": 0, - "type": "struct" + "pc": 0, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 0, + "offset": 0 }, - "__main__.main.SIZEOF_LOCALS": { - "type": "const", - "value": 0 + "pc": 0, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 0, + "offset": 0 }, - "__main__.main.num": { - "cairo_type": "felt", - "full_name": "__main__.main.num", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" + "pc": 1, + "value": "cast([fp + (-4)] + 1, felt*)" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 0 }, - "__main__.main.output_ptr": { - "cairo_type": "felt*", - "full_name": "__main__.main.output_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 13 - }, - "pc": 22, - "value": "[cast(ap + (-1), felt**)]" - } - ], - "type": "reference" + "pc": 4, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 0 }, - "__main__.main.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.main.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-2), felt*)]" - } - ], - "type": "reference" + "pc": 4, + "value": "[cast(fp + (-4), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 1 }, - "__main__.serialize_word": { - "destination": "starkware.cairo.common.serialize.serialize_word", - "type": "alias" + "pc": 7, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 2 }, - "starkware.cairo.common.serialize.serialize_word": { - "decorators": [], - "pc": 0, - "type": "function" + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 1, + "offset": 2 }, - "starkware.cairo.common.serialize.serialize_word.Args": { - "full_name": "starkware.cairo.common.serialize.serialize_word.Args", - "members": { - "word": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" + "pc": 9, + "value": "cast([fp + (-4)] + 2, felt)" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 0 }, - "starkware.cairo.common.serialize.serialize_word.ImplicitArgs": { - "full_name": "starkware.cairo.common.serialize.serialize_word.ImplicitArgs", - "members": { - "output_ptr": { - "cairo_type": "felt*", - "offset": 0 - } - }, - "size": 1, - "type": "struct" + "pc": 13, + "value": "[cast(fp + (-4), felt**)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 0 }, - "starkware.cairo.common.serialize.serialize_word.Return": { - "full_name": "starkware.cairo.common.serialize.serialize_word.Return", - "members": {}, - "size": 0, - "type": "struct" + "pc": 13, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 8 }, - "starkware.cairo.common.serialize.serialize_word.SIZEOF_LOCALS": { - "type": "const", - "value": 0 + "pc": 18, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 8 }, - "starkware.cairo.common.serialize.serialize_word.output_ptr": { - "cairo_type": "felt*", - "full_name": "starkware.cairo.common.serialize.serialize_word.output_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 1, - "value": "cast([fp + (-4)] + 1, felt*)" - } - ], - "type": "reference" + "pc": 18, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 13 }, - "starkware.cairo.common.serialize.serialize_word.word": { - "cairo_type": "felt", - "full_name": "starkware.cairo.common.serialize.serialize_word.word", - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-3), felt*)]" - } - ], - "type": "reference" - } - }, - "main_scope": "__main__", - "prime": "0x800000000000011000000000000000000000000000000000000000000000001", - "reference_manager": { - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 1, - "value": "cast([fp + (-4)] + 1, felt*)" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-4), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 1 - }, - "pc": 7, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 9, - "value": "cast([fp + (-4)] + 2, felt)" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 13 - }, - "pc": 22, - "value": "[cast(ap + (-1), felt**)]" - } - ] - } -} \ No newline at end of file + "pc": 22, + "value": "[cast(ap + (-1), felt**)]" + } + ] + } +} From 376311ef8237fe939805c6273e6298ccf95c2725 Mon Sep 17 00:00:00 2001 From: Thomas Coratger Date: Tue, 22 Oct 2024 12:11:23 +0200 Subject: [PATCH 3/3] fix comments --- crates/exex/src/serde.rs | 58 +- crates/exex/test_data/valid_program.json | 1027 ---------------------- 2 files changed, 38 insertions(+), 1047 deletions(-) delete mode 100644 crates/exex/test_data/valid_program.json diff --git a/crates/exex/src/serde.rs b/crates/exex/src/serde.rs index b3e9f86..3bd7a5e 100644 --- a/crates/exex/src/serde.rs +++ b/crates/exex/src/serde.rs @@ -103,10 +103,9 @@ mod tests { use super::*; use cairo_vm::types::{layout_name::LayoutName, program::Program}; - #[test] - fn test_program_identifier_valid() { + fn setup_kakarot_serde() -> KakarotSerde { // Load the valid program content from a JSON file - let program_content = include_bytes!("../test_data/valid_program.json"); + let program_content = include_bytes!("../../../cairo/programs/os.json"); // Create a Program instance from the loaded bytes, specifying "main" as the entry point let program = Program::from_bytes(program_content, Some("main")).unwrap(); @@ -114,14 +113,20 @@ mod tests { // Initialize a CairoRunner with the created program and default parameters let runner = CairoRunner::new(&program, LayoutName::plain, false, false).unwrap(); - // Create a new instance of KakarotSerde, passing in the runner and a new Memory instance - let kakarot_serde = KakarotSerde { runner, memory: Memory::new() }; + // Return an instance of KakarotSerde + KakarotSerde { runner, memory: Memory::new() } + } + + #[test] + fn test_program_identifier_valid() { + // Setup the KakarotSerde instance + let kakarot_serde = setup_kakarot_serde(); // Check if the identifier "main" with expected type "function" is correctly retrieved assert_eq!( kakarot_serde.get_identifier("main", Some("function".to_string())).unwrap(), Identifier { - pc: Some(13), + pc: Some(3478), type_: Some("function".to_string()), value: None, full_name: None, @@ -137,7 +142,7 @@ mod tests { pc: None, type_: Some("reference".to_string()), value: None, - full_name: Some("__main__.check_range.__temp0".to_string()), + full_name: Some("starkware.cairo.common.memcpy.memcpy.__temp0".to_string()), members: None, cairo_type: Some("felt".to_string()) } @@ -145,22 +150,14 @@ mod tests { } #[test] - fn test_program_identifier_erroneous_identifier() { - // Load the valid program content from a JSON file - let program_content = include_bytes!("../test_data/valid_program.json"); - - // Create a Program instance from the loaded bytes, specifying "main" as the entry point - let program = Program::from_bytes(program_content, Some("main")).unwrap(); - - // Initialize a CairoRunner with the created program and default parameters - let runner = CairoRunner::new(&program, LayoutName::plain, false, false).unwrap(); - - // Create a new instance of KakarotSerde, passing in the runner and a new Memory instance - let kakarot_serde = KakarotSerde { runner, memory: Memory::new() }; + fn test_non_existent_identifier() { + // Setup the KakarotSerde instance + let kakarot_serde = setup_kakarot_serde(); // Test for a non-existent identifier let result = kakarot_serde.get_identifier("non_existent_struct", Some("function".to_string())); + // Check if the error is valid and validate its parameters if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { assert_eq!(struct_name, "non_existent_struct"); @@ -168,9 +165,16 @@ mod tests { } else { panic!("Expected KakarotSerdeError::IdentifierNotFound"); } + } + + #[test] + fn test_incorrect_identifier_usage() { + // Setup the KakarotSerde instance + let kakarot_serde = setup_kakarot_serde(); // Test for an identifier used incorrectly (not the last segment of the full name) let result = kakarot_serde.get_identifier("check_range", Some("struct".to_string())); + // Check if the error is valid and validate its parameters if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { assert_eq!(struct_name, "check_range"); @@ -178,9 +182,16 @@ mod tests { } else { panic!("Expected KakarotSerdeError::IdentifierNotFound"); } + } + + #[test] + fn test_valid_identifier_incorrect_type() { + // Setup the KakarotSerde instance + let kakarot_serde = setup_kakarot_serde(); // Test for a valid identifier but with an incorrect type let result = kakarot_serde.get_identifier("main", Some("struct".to_string())); + // Check if the error is valid and validate its parameters if let Err(KakarotSerdeError::IdentifierNotFound { struct_name, expected_type }) = result { assert_eq!(struct_name, "main"); @@ -188,9 +199,16 @@ mod tests { } else { panic!("Expected KakarotSerdeError::IdentifierNotFound"); } + } + + #[test] + fn test_identifier_with_multiple_matches() { + // Setup the KakarotSerde instance + let kakarot_serde = setup_kakarot_serde(); // Test for an identifier with multiple matches let result = kakarot_serde.get_identifier("ImplicitArgs", Some("struct".to_string())); + // Check if the error is valid and validate its parameters if let Err(KakarotSerdeError::MultipleIdentifiersFound { struct_name, @@ -200,7 +218,7 @@ mod tests { { assert_eq!(struct_name, "ImplicitArgs"); assert_eq!(expected_type, Some("struct".to_string())); - assert_eq!(count, 3); + assert_eq!(count, 63); } else { panic!("Expected KakarotSerdeError::MultipleIdentifiersFound"); } diff --git a/crates/exex/test_data/valid_program.json b/crates/exex/test_data/valid_program.json deleted file mode 100644 index 9374250..0000000 --- a/crates/exex/test_data/valid_program.json +++ /dev/null @@ -1,1027 +0,0 @@ -{ - "attributes": [], - "builtins": ["output", "range_check"], - "data": [ - "0x400380007ffc7ffd", - "0x482680017ffc8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x400380007ffc7ffd", - "0x480680017fff8000", - "0xffffffffffffffff", - "0x48287ffd80007fff", - "0x400280017ffc7fff", - "0x482680017ffc8000", - "0x2", - "0x480a7ffd7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x7", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff5", - "0x480a7ffc7fff8000", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x48127ff97fff8000", - "0x208b7fff7fff7ffe" - ], - "debug_info": { - "file_contents": {}, - "instruction_locations": { - "0": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 0 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 1, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 31, - "end_line": 3, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 3 - } - }, - "1": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 0 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 36, - "end_line": 4, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 39, - "end_line": 2, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 14, - "end_line": 5, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 5 - }, - "While trying to retrieve the implicit argument 'output_ptr' in:" - ], - "start_col": 21, - "start_line": 2 - }, - "While expanding the reference 'output_ptr' in:" - ], - "start_col": 22, - "start_line": 4 - } - }, - "3": { - "accessible_scopes": [ - "starkware.cairo.common.serialize", - "starkware.cairo.common.serialize.serialize_word" - ], - "flow_tracking_data": { - "ap_tracking": { - "group": 0, - "offset": 1 - }, - "reference_ids": { - "starkware.cairo.common.serialize.serialize_word.output_ptr": 2, - "starkware.cairo.common.serialize.serialize_word.word": 0 - } - }, - "hints": [], - "inst": { - "end_col": 14, - "end_line": 5, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "start_col": 5, - "start_line": 5 - } - }, - "4": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 0 - }, - "reference_ids": { - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 28, - "end_line": 8, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 8 - } - }, - "5": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 0 - }, - "reference_ids": { - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 47, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 36, - "start_line": 9 - } - }, - "7": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 1 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 53, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 36, - "start_line": 9 - } - }, - "8": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 2 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 4 - } - }, - "hints": [], - "inst": { - "end_col": 53, - "end_line": 9, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 9 - } - }, - "9": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 2 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 46, - "end_line": 10, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 16, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 11 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 27, - "start_line": 10 - } - }, - "11": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 3 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 38, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 15, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 12, - "start_line": 11 - }, - "While expanding the reference 'num' in:" - ], - "start_col": 35, - "start_line": 5 - } - }, - "12": { - "accessible_scopes": ["__main__", "__main__.check_range"], - "flow_tracking_data": { - "ap_tracking": { - "group": 1, - "offset": 4 - }, - "reference_ids": { - "__main__.check_range.__temp0": 5, - "__main__.check_range.__temp1": 6, - "__main__.check_range.num": 3, - "__main__.check_range.range_check_ptr": 7 - } - }, - "hints": [], - "inst": { - "end_col": 16, - "end_line": 11, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 11 - } - }, - "13": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 0 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 51, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 21, - "start_line": 15 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 30, - "start_line": 14 - } - }, - "14": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 1 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 34, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 33, - "start_line": 15 - } - }, - "16": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 2 - }, - "reference_ids": { - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 9 - } - }, - "hints": [], - "inst": { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 21, - "start_line": 15 - } - }, - "18": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 8 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 28, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 39, - "end_line": 2, - "input_file": { - "filename": "/Users/lambda/Library/Python/3.8/lib/python/site-packages/starkware/cairo/common/serialize.cairo" - }, - "parent_location": [ - { - "end_col": 24, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 16 - }, - "While trying to retrieve the implicit argument 'output_ptr' in:" - ], - "start_col": 21, - "start_line": 2 - }, - "While expanding the reference 'output_ptr' in:" - ], - "start_col": 11, - "start_line": 14 - } - }, - "19": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 9 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 18, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 23, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 20, - "start_line": 16 - }, - "While expanding the reference 'num' in:" - ], - "start_col": 9, - "start_line": 15 - } - }, - "20": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 10 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 8, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 24, - "end_line": 16, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 16 - } - }, - "22": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 13 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 12, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 33, - "end_line": 5, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 35, - "end_line": 15, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 51, - "end_line": 14, - "input_file": { - "filename": "main1.cairo" - }, - "parent_location": [ - { - "end_col": 13, - "end_line": 17, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 17 - }, - "While trying to retrieve the implicit argument 'range_check_ptr' in:" - ], - "start_col": 30, - "start_line": 14 - }, - "While expanding the reference 'range_check_ptr' in:" - ], - "start_col": 21, - "start_line": 15 - }, - "While trying to update the implicit return value 'range_check_ptr' in:" - ], - "start_col": 18, - "start_line": 5 - } - }, - "23": { - "accessible_scopes": ["__main__", "__main__.main"], - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 14 - }, - "reference_ids": { - "__main__.main.num": 11, - "__main__.main.output_ptr": 12, - "__main__.main.range_check_ptr": 10 - } - }, - "hints": [], - "inst": { - "end_col": 13, - "end_line": 17, - "input_file": { - "filename": "main1.cairo" - }, - "start_col": 5, - "start_line": 17 - } - } - } - }, - "hints": {}, - "identifiers": { - "__main__.check_range": { - "decorators": [], - "pc": 4, - "type": "function" - }, - "__main__.check_range.Args": { - "full_name": "__main__.check_range.Args", - "members": { - "num": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.check_range.ImplicitArgs": { - "full_name": "__main__.check_range.ImplicitArgs", - "members": { - "range_check_ptr": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.check_range.Return": { - "full_name": "__main__.check_range.Return", - "members": { - "num": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.check_range.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "__main__.check_range.__temp0": { - "cairo_type": "felt", - "full_name": "__main__.check_range.__temp0", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 1 - }, - "pc": 7, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.check_range.__temp1": { - "cairo_type": "felt", - "full_name": "__main__.check_range.__temp1", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.check_range.num": { - "cairo_type": "felt", - "full_name": "__main__.check_range.num", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-3), felt*)]" - } - ], - "type": "reference" - }, - "__main__.check_range.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.check_range.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-4), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 9, - "value": "cast([fp + (-4)] + 2, felt)" - } - ], - "type": "reference" - }, - "__main__.main": { - "decorators": [], - "pc": 13, - "type": "function" - }, - "__main__.main.Args": { - "full_name": "__main__.main.Args", - "members": {}, - "size": 0, - "type": "struct" - }, - "__main__.main.ImplicitArgs": { - "full_name": "__main__.main.ImplicitArgs", - "members": { - "output_ptr": { - "cairo_type": "felt*", - "offset": 0 - }, - "range_check_ptr": { - "cairo_type": "felt", - "offset": 1 - } - }, - "size": 2, - "type": "struct" - }, - "__main__.main.Return": { - "full_name": "__main__.main.Return", - "members": {}, - "size": 0, - "type": "struct" - }, - "__main__.main.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "__main__.main.num": { - "cairo_type": "felt", - "full_name": "__main__.main.num", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.main.output_ptr": { - "cairo_type": "felt*", - "full_name": "__main__.main.output_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 13 - }, - "pc": 22, - "value": "[cast(ap + (-1), felt**)]" - } - ], - "type": "reference" - }, - "__main__.main.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.main.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-2), felt*)]" - } - ], - "type": "reference" - }, - "__main__.serialize_word": { - "destination": "starkware.cairo.common.serialize.serialize_word", - "type": "alias" - }, - "starkware.cairo.common.serialize.serialize_word": { - "decorators": [], - "pc": 0, - "type": "function" - }, - "starkware.cairo.common.serialize.serialize_word.Args": { - "full_name": "starkware.cairo.common.serialize.serialize_word.Args", - "members": { - "word": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "starkware.cairo.common.serialize.serialize_word.ImplicitArgs": { - "full_name": "starkware.cairo.common.serialize.serialize_word.ImplicitArgs", - "members": { - "output_ptr": { - "cairo_type": "felt*", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "starkware.cairo.common.serialize.serialize_word.Return": { - "full_name": "starkware.cairo.common.serialize.serialize_word.Return", - "members": {}, - "size": 0, - "type": "struct" - }, - "starkware.cairo.common.serialize.serialize_word.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "starkware.cairo.common.serialize.serialize_word.output_ptr": { - "cairo_type": "felt*", - "full_name": "starkware.cairo.common.serialize.serialize_word.output_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 1, - "value": "cast([fp + (-4)] + 1, felt*)" - } - ], - "type": "reference" - }, - "starkware.cairo.common.serialize.serialize_word.word": { - "cairo_type": "felt", - "full_name": "starkware.cairo.common.serialize.serialize_word.word", - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-3), felt*)]" - } - ], - "type": "reference" - } - }, - "main_scope": "__main__", - "prime": "0x800000000000011000000000000000000000000000000000000000000000001", - "reference_manager": { - "references": [ - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 0, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 0, - "offset": 0 - }, - "pc": 1, - "value": "cast([fp + (-4)] + 1, felt*)" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 0 - }, - "pc": 4, - "value": "[cast(fp + (-4), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 1 - }, - "pc": 7, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 1, - "offset": 2 - }, - "pc": 9, - "value": "cast([fp + (-4)] + 2, felt)" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-4), felt**)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 13, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 8 - }, - "pc": 18, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 13 - }, - "pc": 22, - "value": "[cast(ap + (-1), felt**)]" - } - ] - } -}