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.
// 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>| {
column.index()
+ match column.column_type() {
Any::Advice => 0,
Any::Instance => cs.num_advice_columns,
Any::Fixed => cs.num_advice_columns + cs.num_instance_columns,
Any::Instance => 0,
Any::Advice => cs.num_instance_columns,
Any::Fixed => cs.num_instance_columns + cs.num_advice_columns,
}
};
@ -124,12 +124,15 @@ impl CircuitLayout {
ShapeStyle::from(&WHITE).filled(),
))?;
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(),
))?;
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),
],
ShapeStyle::from(&BLUE.mix(0.2)).filled(),
@ -138,9 +141,9 @@ impl CircuitLayout {
let index = selector.index();
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 File

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