class_docstr: Mixin class for classes that define a `__mul__` method, and want to be
  raised to integer powers in the natural way that follows. Implements
  powering via binary expansion, for efficiency.
  
  By default, only integer powers $\geq 2$ are supported. To support the
  first, zeroth, or negative powers, override the corresponding methods,
  `_first_power`, `_zeroth_power`, `_negative_power`, below.
class_docstr_tok: ["Mixin","class","for","classes","that","define","a","`","__mul__","`","method",",","and","want","to","be","raised","to","integer","powers","in","the","natural","way","that","follows",".","Implements","powering","via","binary","expansion",",","for","efficiency",".","By","default",",","only","integer","powers","$","\\geq","2","$","are","supported",".","To","support","the","first",",","zeroth",",","or","negative","powers",",","override","the","corresponding","methods",",","`","_first_power","`",",","`","_zeroth_power","`",",","`","_negative_power","`",",","below","."]
docstr: Return a copy of self.
docstr_tok: ["Return","a","copy","of","self","."]
code: def _first_power(self):
      """Return a copy of self."""
      raise NotImplementedError
  
imports: from __future__ import annotations
  from sympy.external.gmpy import GROUND_TYPES
  from sympy.core import S, Add, Mul, Pow, Eq, Expr, expand_mul, expand_multinomial
  from sympy.core.exprtools import decompose_power, decompose_power_rat
  from sympy.core.numbers import _illegal
  from sympy.polys.polyerrors import PolynomialError, GeneratorsError
  from sympy.polys.polyoptions import build_options
  import re
label_desc: Use image node_id 4 for calling the IntegerPowerable obj's underlying member method code with example usage: obj._first_power() without return types