code: def _validate(self):
          
          variable_names, _unused = getExprNames(self._expr, {})
          expr_indices = []
          for name in variable_names:
              if name == 'inf':
                  continue
              match = _VARIABLE_NAME_RE.match(name)
              if not match:
                  raise ValueError("%r is not a valid variable name" % name)
              expr_indices.append(int(match.group(2)))
  
          expr_indices.sort()
          expected_indices = list(range(len(self.inputs)))
          if expr_indices != expected_indices:
              raise ValueError(
                  "Expected %s for variable indices, but got %s" % (
                      expected_indices, expr_indices,
                  )
              )
          super(NumericalExpression, self)._validate()
docs: Ensure that our expression string has variables of the form x_0, x_1,
          ... x_(N - 1), where N is the length of our inputs.