pub struct Air {
pub name: Identifier,
pub trace_segment_widths: Vec<u16>,
pub periodic_columns: BTreeMap<QualifiedIdentifier, PeriodicColumn>,
pub public_inputs: BTreeMap<Identifier, PublicInput>,
pub num_random_values: u16,
pub constraints: Constraints,
pub buses: BTreeMap<Identifier, Bus>,
}
Expand description
The intermediate representation of a complete AirScript program
This structure is produced from an air_parser::ast::Program that has been through semantic analysis, constant propagation, and inlining. It is equivalent to an air_parser::ast::Program, except that it has been translated into an algebraic graph representation, on which further analysis, optimization, and code generation are performed.
Fields§
§name: Identifier
The name of the air_parser::ast::Program from which this IR was derived
trace_segment_widths: Vec<u16>
The widths (number of columns) of each segment of the trace, in segment order (i.e. the index in this vector matches the index of the segment in the program).
periodic_columns: BTreeMap<QualifiedIdentifier, PeriodicColumn>
The periodic columns referenced by this program.
These are taken straight from the air_parser::ast::Program without modification.
public_inputs: BTreeMap<Identifier, PublicInput>
The public inputs referenced by this program.
These are taken straight from the air_parser::ast::Program without modification.
num_random_values: u16
The total number of elements in the random values array
constraints: Constraints
The constraints enforced by this program, in their algebraic graph representation.
buses: BTreeMap<Identifier, Bus>
The buses referenced by this program.
Only their name, type, and the first and last boundary constraints are stored here.
Implementations§
Source§impl Air
impl Air
Sourcepub fn new(name: Identifier) -> Air
pub fn new(name: Identifier) -> Air
Create a new, empty Air container
An empty Air is meaningless until it has been populated with constraints and associated metadata. This is typically done by converting an air_parser::ast::Program to this struct using the crate::passes::AstToAir translation pass.
Sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns the name of the air_parser::ast::Program this Air was derived from, as a str
pub fn public_inputs(&self) -> impl Iterator<Item = &PublicInput>
pub fn periodic_columns(&self) -> impl Iterator<Item = &PeriodicColumn>
Sourcepub fn num_boundary_constraints(&self, trace_segment: usize) -> usize
pub fn num_boundary_constraints(&self, trace_segment: usize) -> usize
Return the number of boundary constraints
Sourcepub fn boundary_constraints(&self, trace_segment: usize) -> &[ConstraintRoot]
pub fn boundary_constraints(&self, trace_segment: usize) -> &[ConstraintRoot]
Return the set of ConstraintRoot corresponding to the boundary constraints
Sourcepub fn integrity_constraints(&self, trace_segment: usize) -> &[ConstraintRoot]
pub fn integrity_constraints(&self, trace_segment: usize) -> &[ConstraintRoot]
Return the set of ConstraintRoot corresponding to the integrity constraints
Sourcepub fn integrity_constraint_degrees(
&self,
trace_segment: usize,
) -> Vec<IntegrityConstraintDegree>
pub fn integrity_constraint_degrees( &self, trace_segment: usize, ) -> Vec<IntegrityConstraintDegree>
Return the set of IntegrityConstraintDegree corresponding to each integrity constraint
Sourcepub fn validity_constraints(
&self,
trace_segment: usize,
) -> impl Iterator<Item = &ConstraintRoot>
pub fn validity_constraints( &self, trace_segment: usize, ) -> impl Iterator<Item = &ConstraintRoot>
Return an Iterator over the validity constraints for the given trace segment
Sourcepub fn transition_constraints(
&self,
trace_segment: usize,
) -> impl Iterator<Item = &ConstraintRoot>
pub fn transition_constraints( &self, trace_segment: usize, ) -> impl Iterator<Item = &ConstraintRoot>
Return an Iterator over the transition constraints for the given trace segment
Sourcepub fn constraint_graph(&self) -> &AlgebraicGraph
pub fn constraint_graph(&self) -> &AlgebraicGraph
Return a reference to the raw AlgebraicGraph corresponding to the constraints
Sourcepub fn constraint_graph_mut(&mut self) -> &mut AlgebraicGraph
pub fn constraint_graph_mut(&mut self) -> &mut AlgebraicGraph
Return a mutable reference to the raw AlgebraicGraph corresponding to the constraints
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Air
impl RefUnwindSafe for Air
impl Send for Air
impl Sync for Air
impl Unpin for Air
impl UnwindSafe for Air
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);