package plonky2_verifier import ( . "gnark-plonky2-verifier/field" ) type gate interface { EvalUnfiltered(vars EvaluationVars) []QuadraticExtension } func (p *PlonkChip) computeFilter( row int, groupRange Range, s QuadraticExtension, manySelector bool, ) QuadraticExtension { product := p.qeAPI.ONE_QE for i := groupRange.start; i < groupRange.end; i++ { if i == uint64(row) { continue } product = p.qeAPI.MulExtension(product, p.qeAPI.SubExtension(p.qeAPI.FieldToQE(NewFieldElement(i)), s)) } if manySelector { product = p.qeAPI.MulExtension(product, p.qeAPI.SubExtension(p.qeAPI.FieldToQE(NewFieldElement(UNUSED_SELECTOR)), s)) } return product } func (p *PlonkChip) evalFiltered( g gate, vars EvaluationVars, row int, selectorIndex int, groupRange Range, numSelectors int, ) []QuadraticExtension { filter := p.computeFilter(row, groupRange, vars.localConstants[selectorIndex], numSelectors > 1) vars.RemovePrefix(numSelectors) unfiltered := g.EvalUnfiltered(vars) for i := range unfiltered { unfiltered[i] = p.qeAPI.MulExtension(unfiltered[i], filter) } return unfiltered }