Change canonical column ordering to Instance < Advice < Fixed

Closes zcash/halo2#325.
This commit is contained in:
Jack Grigg 2021-07-20 19:54:37 +01:00
parent ca44b40009
commit 4417b4e480
2 changed files with 14 additions and 11 deletions

View File

@ -97,13 +97,13 @@ impl CircuitLayout {
// Figure out what order to render the columns in. // Figure out what order to render the columns in.
// TODO: For now, just render them in the order they were configured. // TODO: For now, just render them in the order they were configured.
let total_columns = cs.num_advice_columns + cs.num_instance_columns + cs.num_fixed_columns; let total_columns = cs.num_instance_columns + cs.num_advice_columns + cs.num_fixed_columns;
let column_index = |column: &Column<Any>| { let column_index = |column: &Column<Any>| {
column.index() column.index()
+ match column.column_type() { + match column.column_type() {
Any::Advice => 0, Any::Instance => 0,
Any::Instance => cs.num_advice_columns, Any::Advice => cs.num_instance_columns,
Any::Fixed => cs.num_advice_columns + cs.num_instance_columns, Any::Fixed => cs.num_instance_columns + cs.num_advice_columns,
} }
}; };
@ -124,12 +124,15 @@ impl CircuitLayout {
ShapeStyle::from(&WHITE).filled(), ShapeStyle::from(&WHITE).filled(),
))?; ))?;
root.draw(&Rectangle::new( root.draw(&Rectangle::new(
[(0, 0), (cs.num_advice_columns, view_bottom)], [
(cs.num_instance_columns, 0),
(cs.num_instance_columns + cs.num_advice_columns, view_bottom),
],
ShapeStyle::from(&RED.mix(0.2)).filled(), ShapeStyle::from(&RED.mix(0.2)).filled(),
))?; ))?;
root.draw(&Rectangle::new( root.draw(&Rectangle::new(
[ [
(cs.num_advice_columns + cs.num_instance_columns, 0), (cs.num_instance_columns + cs.num_advice_columns, 0),
(total_columns, view_bottom), (total_columns, view_bottom),
], ],
ShapeStyle::from(&BLUE.mix(0.2)).filled(), ShapeStyle::from(&BLUE.mix(0.2)).filled(),
@ -138,9 +141,9 @@ impl CircuitLayout {
let index = selector.index(); let index = selector.index();
root.draw(&Rectangle::new( root.draw(&Rectangle::new(
[ [
(cs.num_advice_columns + cs.num_instance_columns + index, 0), (cs.num_instance_columns + cs.num_advice_columns + index, 0),
( (
cs.num_advice_columns + cs.num_instance_columns + index + 1, cs.num_instance_columns + cs.num_advice_columns + index + 1,
view_bottom, view_bottom,
), ),
], ],

View File

@ -47,13 +47,13 @@ impl<C: ColumnType> Ord for Column<C> {
(Any::Advice, Any::Advice) (Any::Advice, Any::Advice)
| (Any::Instance, Any::Instance) | (Any::Instance, Any::Instance)
| (Any::Fixed, Any::Fixed) => self.index.cmp(&other.index), | (Any::Fixed, Any::Fixed) => self.index.cmp(&other.index),
// Across column types, sort Advice < Instance < Fixed. // Across column types, sort Instance < Advice < Fixed.
(Any::Advice, Any::Instance) (Any::Instance, Any::Advice)
| (Any::Advice, Any::Fixed) | (Any::Advice, Any::Fixed)
| (Any::Instance, Any::Fixed) => std::cmp::Ordering::Less, | (Any::Instance, Any::Fixed) => std::cmp::Ordering::Less,
(Any::Fixed, Any::Instance) (Any::Fixed, Any::Instance)
| (Any::Fixed, Any::Advice) | (Any::Fixed, Any::Advice)
| (Any::Instance, Any::Advice) => std::cmp::Ordering::Greater, | (Any::Advice, Any::Instance) => std::cmp::Ordering::Greater,
} }
} }
} }