Require expression to be linear in specified variables.
(self, *vars, allow_affine=False, self_name=None, vars_name=None, error=AssertionError)
| 268 | return self |
| 269 | |
| 270 | def require_linearity(self, *vars, allow_affine=False, self_name=None, vars_name=None, error=AssertionError): |
| 271 | """Require expression to be linear in specified variables.""" |
| 272 | if self.has(*vars): |
| 273 | if self_name is None: |
| 274 | self_name = str(self) |
| 275 | if vars_name is None: |
| 276 | vars_name = [str(var) for var in vars] |
| 277 | raise error(f"{self_name} is nonlinear in {vars_name}.") |
| 278 | elif not allow_affine: |
| 279 | if self_name is None: |
| 280 | self_name = str(self) |
| 281 | if vars_name is None: |
| 282 | vars_name = [str(var) for var in vars] |
| 283 | raise error(f"{self_name} must be strictly linear in {vars_name}.") |
| 284 | |
| 285 | def require_first_order(self, *ops, **kw): |
| 286 | """Require expression to be maximally first order in specified operators.""" |