Rutefig/237 fix python front end (#240)

This commit is contained in:
Rute Figueiredo
2024-05-08 22:32:35 +01:00
committed by GitHub
parent c81ab2888d
commit 93282e00b9
9 changed files with 162 additions and 163 deletions

View File

@@ -600,15 +600,12 @@ mod tests {
}
#[test]
#[ignore]
#[should_panic(expected = "Signal not found")]
fn test_expose_non_existing_signal() {
let mut context = setup_circuit_context::<i32, i32>();
let non_existing_signal =
Queriable::Forward(ForwardSignal::new_with_phase(0, "".to_owned()), false); // Create a signal not added to the circuit
context.expose(non_existing_signal, ExposeOffset::First);
todo!("remove the ignore after fixing the check for non existing signals")
}
#[test]

View File

@@ -1,7 +1,7 @@
from __future__ import annotations
from dataclasses import dataclass, field
from enum import Enum, auto
from typing import List, Dict, Optional
from typing import List, Dict, Optional, Union
from chiquito.util import F, uuid
from chiquito.expr import Expr, Const, Neg, to_expr, ToExpr
@@ -205,7 +205,7 @@ def table() -> LookupTable:
return LookupTable()
ToConstraint = Constraint | Expr | int | F
ToConstraint = Union[Constraint, Expr, int, F]
def to_constraint(v: ToConstraint) -> Constraint:

View File

@@ -126,7 +126,7 @@ class ASTCircuit:
"last_step": self.last_step,
"num_steps": self.num_steps,
"q_enable": self.q_enable,
"id": self.id,
"id": self.id.__str__(),
}
def add_forward(self: ASTCircuit, name: str, phase: int) -> ForwardSignal:

View File

@@ -1,5 +1,5 @@
from __future__ import annotations
from typing import List, Dict
from typing import List, Dict, Union
from enum import Enum
from typing import Callable, Any
@@ -295,4 +295,4 @@ class StepType:
self.step_type.lookups.append(lookup)
LookupBuilder = LookupTableBuilder | InPlaceLookupBuilder
LookupBuilder = Union[LookupTableBuilder, InPlaceLookupBuilder]

View File

@@ -1,5 +1,5 @@
from __future__ import annotations
from typing import List
from typing import List, Union
from dataclasses import dataclass
from chiquito.util import F
@@ -141,7 +141,7 @@ class Pow(Expr):
return {"Pow": [self.expr.__json__(), self.pow]}
ToExpr = Expr | int | F
ToExpr = Union[Expr, int, F]
def to_expr(v: ToExpr) -> Expr:

View File

@@ -134,5 +134,5 @@ class StepTypeNext(Queriable):
def __json__(self):
return {
"StepTypeNext": {"id": self.step_type.id, "annotation": self.step_type.name}
"StepTypeNext": {"id": f"{self.step_type.id}", "annotation": self.step_type.name}
}

View File

@@ -14,11 +14,9 @@ class F(bn128.FQ):
# Convert the integer to a byte array
montgomery_form = self.n * R % F.field_modulus
byte_array = montgomery_form.to_bytes(32, "little")
# Split into four 64-bit integers
ints = [
int.from_bytes(byte_array[i * 8 : i * 8 + 8], "little") for i in range(4)
]
return ints
# return the hex string
return byte_array.hex()
class CustomEncoder(json.JSONEncoder):
@@ -29,5 +27,5 @@ class CustomEncoder(json.JSONEncoder):
# int field is the u128 version of uuid.
def uuid() -> int:
return uuid1(node=int.from_bytes([10, 10, 10, 10, 10, 10], byteorder="little")).int
def uuid() -> str:
return uuid1(node=int.from_bytes([10, 10, 10, 10, 10, 10], byteorder="little")).int.__str__()

View File

@@ -41,7 +41,7 @@ class StepInstance:
# For assignments, return "uuid: (Queriable, F)" rather than "Queriable: F", because JSON doesn't accept Dict as key.
def __json__(self: StepInstance):
return {
"step_type_uuid": self.step_type_uuid,
"step_type_uuid": self.step_type_uuid.__str__(),
"assignments": {
lhs.uuid(): [lhs, rhs] for (lhs, rhs) in self.assignments.items()
},

View File

@@ -2,6 +2,7 @@ use pyo3::{
prelude::*,
types::{PyDict, PyList, PyLong, PyString},
};
use serde_json::{from_str, Value};
use crate::{
frontend::dsl::{StepTypeHandler, SuperCircuitContext},
@@ -47,8 +48,10 @@ thread_local! {
/// as the key. Return the Rust UUID to Python. The last field of the tuple, `TraceWitness`, is left
/// as None, for `chiquito_add_witness_to_rust_id` to insert.
pub fn chiquito_ast_to_halo2(ast_json: &str) -> UUID {
let value: Value = from_str(ast_json).expect("Invalid JSON");
// Attempt to convert `Value` into `SBPIR`
let circuit: SBPIR<Fr, ()> =
serde_json::from_str(ast_json).expect("Json deserialization to Circuit failed.");
serde_json::from_value(value).expect("Deserialization to Circuit failed.");
let config = config(SingleRowCellManager {}, SimpleStepSelectorBuilder {});
let (chiquito, assignment_generator) = compile(config, &circuit);
@@ -212,13 +215,18 @@ impl<'de> Visitor<'de> for CircuitVisitor {
let mut q_enable = None;
let mut id = None;
println!("------ Visiting map -------");
while let Some(key) = map.next_key::<String>()? {
println!("key = {}", key);
match key.as_str() {
"step_types" => {
println!("------ Visiting step_types -------");
if step_types.is_some() {
return Err(de::Error::duplicate_field("step_types"));
}
step_types = Some(map.next_value::<HashMap<UUID, StepType<Fr>>>()?);
println!("step_types = {:#?}", step_types);
}
"forward_signals" => {
if forward_signals.is_some() {
@@ -261,13 +269,33 @@ impl<'de> Visitor<'de> for CircuitVisitor {
if first_step.is_some() {
return Err(de::Error::duplicate_field("first_step"));
}
first_step = Some(map.next_value::<Option<StepTypeUUID>>()?);
let first_step_opt: Option<String> = map.next_value()?; // Deserialize the value as an optional string
first_step = Some(first_step_opt.map_or(Ok(None), |first_step_str| {
StepTypeUUID::from_str_radix(&first_step_str, 10)
.map(Some)
.map_err(|e| {
de::Error::custom(format!(
"Failed to parse first_step '{}': {}",
first_step_str, e
))
})
})?);
}
"last_step" => {
if last_step.is_some() {
return Err(de::Error::duplicate_field("last_step"));
}
last_step = Some(map.next_value::<Option<StepTypeUUID>>()?);
let last_step_opt: Option<String> = map.next_value()?; // Deserialize the value as an optional string
last_step = Some(last_step_opt.map_or(Ok(None), |last_step_str| {
StepTypeUUID::from_str_radix(&last_step_str, 10)
.map(Some)
.map_err(|e| {
de::Error::custom(format!(
"Failed to parse last_step '{}': {}",
last_step_str, e
))
})
})?);
}
"num_steps" => {
if num_steps.is_some() {
@@ -285,7 +313,10 @@ impl<'de> Visitor<'de> for CircuitVisitor {
if id.is_some() {
return Err(de::Error::duplicate_field("id"));
}
id = Some(map.next_value()?);
let id_str: String = map.next_value()?;
id = Some(id_str.parse::<u128>().map_err(|e| {
de::Error::custom(format!("Failed to parse id '{}': {}", id_str, e))
})?);
}
_ => {
return Err(de::Error::unknown_field(
@@ -376,7 +407,10 @@ impl<'de> Visitor<'de> for StepTypeVisitor {
if id.is_some() {
return Err(de::Error::duplicate_field("id"));
}
id = Some(map.next_value()?);
let id_str: String = map.next_value()?;
id = Some(id_str.parse::<u128>().map_err(|e| {
de::Error::custom(format!("Failed to parse id '{}': {}", id_str, e))
})?);
}
"name" => {
if name.is_some() {
@@ -629,6 +663,7 @@ impl<'de> Visitor<'de> for QueriableVisitor {
let key: String = map
.next_key()?
.ok_or_else(|| de::Error::custom("map is empty"))?;
match key.as_str() {
"Internal" => map.next_value().map(Queriable::Internal),
"Forward" => map
@@ -637,9 +672,11 @@ impl<'de> Visitor<'de> for QueriableVisitor {
"Shared" => map
.next_value()
.map(|(signal, rotation)| Queriable::Shared(signal, rotation)),
"Fixed" => map
.next_value()
.map(|(signal, rotation)| Queriable::Fixed(signal, rotation)),
"Fixed" => {
println!("Processing Fixed");
map.next_value()
.map(|(signal, rotation)| Queriable::Fixed(signal, rotation))
}
"StepTypeNext" => map.next_value().map(Queriable::StepTypeNext),
_ => Err(de::Error::unknown_variant(
&key,
@@ -703,7 +740,10 @@ macro_rules! impl_visitor_internal_fixed_steptypehandler {
if id.is_some() {
return Err(de::Error::duplicate_field("id"));
}
id = Some(map.next_value()?);
let id_str: String = map.next_value()?; // Get the UUID as a string
id = Some(id_str.parse::<u128>().map_err(|e| {
de::Error::custom(format!("Failed to parse id '{}': {}", id_str, e))
})?);
}
"annotation" => {
if annotation.is_some() {
@@ -759,7 +799,10 @@ macro_rules! impl_visitor_forward_shared {
if id.is_some() {
return Err(de::Error::duplicate_field("id"));
}
id = Some(map.next_value()?);
let id_str: String = map.next_value()?; // Get the UUID as a string
id = Some(id_str.parse::<u128>().map_err(|e| {
de::Error::custom(format!("Failed to parse id '{}': {}", id_str, e))
})?);
}
"phase" => {
if phase.is_some() {
@@ -848,7 +891,12 @@ impl<'de> Visitor<'de> for StepInstanceVisitor {
if step_type_uuid.is_some() {
return Err(de::Error::duplicate_field("step_type_uuid"));
}
step_type_uuid = Some(map.next_value()?);
let uuid_str: String = map.next_value()?; // Get the UUID as a string
step_type_uuid = Some(
uuid_str
.parse::<u128>() // Assuming the string is in decimal format
.map_err(de::Error::custom)?,
);
}
"assignments" => {
if assignments.is_some() {
@@ -920,119 +968,89 @@ impl<'de> Deserialize<'de> for SBPIR<Fr, ()> {
mod tests {
use super::*;
#[ignore]
#[test]
#[ignore]
fn test_trace_witness() {
let json = r#"
{
"step_instances": [
{
"step_type_uuid": 270606747459021742275781620564109167114,
"step_type_uuid": "270606747459021742275781620564109167114",
"assignments": {
"270606737951642240564318377467548666378": [
{
"Forward": [
{
"id": 270606737951642240564318377467548666378,
"id": "270606737951642240564318377467548666378",
"phase": 0,
"annotation": "a"
},
false
]
},
[
55,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000055"
],
"270606743497613616562965561253747624458": [
{
"Forward": [
{
"id": 270606743497613616562965561253747624458,
"id": "270606743497613616562965561253747624458",
"phase": 0,
"annotation": "b"
},
false
]
},
[
89,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000089"
],
"270606753004993118272949371872716917258": [
{
"Internal": {
"id": 270606753004993118272949371872716917258,
"id": "270606753004993118272949371872716917258",
"annotation": "c"
}
},
[
144,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000144"
]
}
},
{
"step_type_uuid": 270606783111694873693576112554652600842,
"step_type_uuid": "270606783111694873693576112554652600842",
"assignments": {
"270606737951642240564318377467548666378": [
{
"Forward": [
{
"id": 270606737951642240564318377467548666378,
"id": "270606737951642240564318377467548666378",
"phase": 0,
"annotation": "a"
},
false
]
},
[
89,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000089"
],
"270606743497613616562965561253747624458": [
{
"Forward": [
{
"id": 270606743497613616562965561253747624458,
"id": "270606743497613616562965561253747624458",
"phase": 0,
"annotation": "b"
},
false
]
},
[
144,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000144"
],
"270606786280821374261518951164072823306": [
{
"Internal": {
"id": 270606786280821374261518951164072823306,
"id": "270606786280821374261518951164072823306",
"annotation": "c"
}
},
[
233,
0,
0,
0
]
"0000000000000000000000000000000000000000000000000000000000000233"
]
}
}
@@ -1065,18 +1083,17 @@ mod tests {
let _: ExposeOffset = serde_json::from_str(json).unwrap();
}
#[ignore]
#[test]
fn test_circuit() {
let json = r#"
{
"step_types": {
"258869595755756204079859764249309612554": {
"id": 258869595755756204079859764249309612554,
"id": "258869595755756204079859764249309612554",
"name": "fibo_first_step",
"signals": [
{
"id": 258869599717164329791616633222308956682,
"id": "258869599717164329791616633222308956682",
"annotation": "c"
}
],
@@ -1088,7 +1105,7 @@ mod tests {
{
"Forward": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
@@ -1097,12 +1114,7 @@ mod tests {
},
{
"Neg": {
"Const": [
1,
0,
0,
0
]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
}
}
]
@@ -1115,7 +1127,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1124,12 +1136,7 @@ mod tests {
},
{
"Neg": {
"Const": [
1,
0,
0,
0
]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
}
}
]
@@ -1142,7 +1149,7 @@ mod tests {
{
"Forward": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
@@ -1152,7 +1159,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1162,7 +1169,7 @@ mod tests {
{
"Neg": {
"Internal": {
"id": 258869599717164329791616633222308956682,
"id": "258869599717164329791616633222308956682",
"annotation": "c"
}
}
@@ -1179,7 +1186,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1190,7 +1197,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
@@ -1207,7 +1214,7 @@ mod tests {
"Sum": [
{
"Internal": {
"id": 258869599717164329791616633222308956682,
"id": "258869599717164329791616633222308956682",
"annotation": "c"
}
},
@@ -1215,7 +1222,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1233,7 +1240,7 @@ mod tests {
{
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1244,7 +1251,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1262,11 +1269,11 @@ mod tests {
}
},
"258869628239302834927102989021255174666": {
"id": 258869628239302834927102989021255174666,
"id": "258869628239302834927102989021255174666",
"name": "fibo_step",
"signals": [
{
"id": 258869632200710960639812650790420089354,
"id": "258869632200710960639812650790420089354",
"annotation": "c"
}
],
@@ -1278,7 +1285,7 @@ mod tests {
{
"Forward": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
@@ -1288,7 +1295,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1298,7 +1305,7 @@ mod tests {
{
"Neg": {
"Internal": {
"id": 258869632200710960639812650790420089354,
"id": "258869632200710960639812650790420089354",
"annotation": "c"
}
}
@@ -1315,7 +1322,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1326,7 +1333,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
@@ -1343,7 +1350,7 @@ mod tests {
"Sum": [
{
"Internal": {
"id": 258869632200710960639812650790420089354,
"id": "258869632200710960639812650790420089354",
"annotation": "c"
}
},
@@ -1351,7 +1358,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1369,7 +1376,7 @@ mod tests {
{
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1380,7 +1387,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1398,7 +1405,7 @@ mod tests {
}
},
"258869646461780213207493341245063432714": {
"id": 258869646461780213207493341245063432714,
"id": "258869646461780213207493341245063432714",
"name": "padding",
"signals": [],
"constraints": [],
@@ -1410,7 +1417,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1421,7 +1428,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1439,7 +1446,7 @@ mod tests {
{
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1450,7 +1457,7 @@ mod tests {
"Neg": {
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1468,17 +1475,17 @@ mod tests {
},
"forward_signals": [
{
"id": 258869580702405326369584955980151130634,
"id": "258869580702405326369584955980151130634",
"phase": 0,
"annotation": "a"
},
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
}
@@ -1490,7 +1497,7 @@ mod tests {
{
"Forward": [
{
"id": 258869587040658327507391136965088381450,
"id": "258869587040658327507391136965088381450",
"phase": 0,
"annotation": "b"
},
@@ -1505,7 +1512,7 @@ mod tests {
{
"Forward": [
{
"id": 258869589417503202934383108674030275082,
"id": "258869589417503202934383108674030275082",
"phase": 0,
"annotation": "n"
},
@@ -1526,31 +1533,30 @@ mod tests {
"258869646461780213207493341245063432714": "padding"
},
"fixed_assignments": null,
"first_step": 258869595755756204079859764249309612554,
"last_step": 258869646461780213207493341245063432714,
"first_step": "258869595755756204079859764249309612554",
"last_step": "258869646461780213207493341245063432714",
"num_steps": 10,
"q_enable": true,
"id": 258867373405797678961444396351437277706
"id": "258867373405797678961444396351437277706"
}
"#;
let circuit: SBPIR<Fr, ()> = serde_json::from_str(json).unwrap();
println!("{:?}", circuit);
}
#[ignore]
#[test]
fn test_step_type() {
let json = r#"
{
"id":1,
"id":"1",
"name":"fibo",
"signals":[
{
"id":1,
"id":"1",
"annotation":"a"
},
{
"id":2,
"id":"2",
"annotation":"b"
}
],
@@ -1560,18 +1566,18 @@ mod tests {
"expr":{
"Sum":[
{
"Const":[1, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"Mul":[
{
"Internal":{
"id":3,
"id":"3",
"annotation":"c"
}
},
{
"Const":[3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
}
]
}
@@ -1583,14 +1589,14 @@ mod tests {
"expr":{
"Sum":[
{
"Const":[1, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"Mul":[
{
"Shared":[
{
"id":4,
"id":"4",
"phase":2,
"annotation":"d"
},
@@ -1598,7 +1604,7 @@ mod tests {
]
},
{
"Const":[3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
}
]
}
@@ -1612,14 +1618,14 @@ mod tests {
"expr":{
"Sum":[
{
"Const":[1, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"Mul":[
{
"Forward":[
{
"id":5,
"id":"5",
"phase":1,
"annotation":"e"
},
@@ -1627,7 +1633,7 @@ mod tests {
]
},
{
"Const":[3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
}
]
}
@@ -1639,21 +1645,21 @@ mod tests {
"expr":{
"Sum":[
{
"Const":[1, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"Mul":[
{
"Fixed":[
{
"id":6,
"id":"6",
"annotation":"e"
},
2
]
},
{
"Const":[3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
}
]
}
@@ -1673,7 +1679,6 @@ mod tests {
println!("{:?}", step_type);
}
#[ignore]
#[test]
fn test_constraint() {
let json = r#"
@@ -1683,14 +1688,14 @@ mod tests {
"Sum": [
{
"Internal": {
"id": 27,
"id": "27",
"annotation": "a"
}
},
{
"Fixed": [
{
"id": 28,
"id": "28",
"annotation": "b"
},
1
@@ -1699,7 +1704,7 @@ mod tests {
{
"Shared": [
{
"id": 29,
"id": "29",
"phase": 1,
"annotation": "c"
},
@@ -1709,7 +1714,7 @@ mod tests {
{
"Forward": [
{
"id": 30,
"id": "30",
"phase": 2,
"annotation": "d"
},
@@ -1718,32 +1723,32 @@ mod tests {
},
{
"StepTypeNext": {
"id": 31,
"id": "31",
"annotation": "e"
}
},
{
"Const": [3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
},
{
"Mul": [
{
"Const": [4, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000004"
},
{
"Const": [5, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000005"
}
]
},
{
"Neg": {
"Const": [2, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000002"
}
},
{
"Pow": [
{
"Const": [3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
},
4
]
@@ -1757,7 +1762,6 @@ mod tests {
println!("{:?}", transition_constraint);
}
#[ignore]
#[test]
fn test_expr() {
let json = r#"
@@ -1765,14 +1769,14 @@ mod tests {
"Sum": [
{
"Internal": {
"id": 27,
"id": "27",
"annotation": "a"
}
},
{
"Fixed": [
{
"id": 28,
"id": "28",
"annotation": "b"
},
1
@@ -1781,7 +1785,7 @@ mod tests {
{
"Shared": [
{
"id": 29,
"id": "29",
"phase": 1,
"annotation": "c"
},
@@ -1791,7 +1795,7 @@ mod tests {
{
"Forward": [
{
"id": 30,
"id": "30",
"phase": 2,
"annotation": "d"
},
@@ -1800,32 +1804,32 @@ mod tests {
},
{
"StepTypeNext": {
"id": 31,
"id": "31",
"annotation": "e"
}
},
{
"Const": [3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
},
{
"Mul": [
{
"Const": [4, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000004"
},
{
"Const": [5, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000005"
}
]
},
{
"Neg": {
"Const": [2, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000002"
}
},
{
"Pow": [
{
"Const": [3, 0, 0, 0]
"Const": "0000000000000000000000000000000000000000000000000000000000000003"
},
4
]