class_docstr: The domain ``ZZ`` representing the integers `\mathbb{Z}`.
  
  The :py:class:`IntegerRing` class represents the ring of integers as a
  :py:class:`~.Domain` in the domain system. :py:class:`IntegerRing` is a
  super class of :py:class:`PythonIntegerRing` and
  :py:class:`GMPYIntegerRing` one of which will be the implementation for
  :ref:`ZZ` depending on whether or not ``gmpy`` or ``gmpy2`` is installed.
  
  See also
  ========
  
  Domain
class_docstr_tok: ["The","domain","``","ZZ","``","representing","the","integers","`","\\mathbb","{","Z","}","`",".","The",":","py",":","class",":","`","IntegerRing","`","class","represents","the","ring","of","integers","as","a",":","py",":","class",":","`","~.Domain","`","in","the","domain","system",".",":","py",":","class",":","`","IntegerRing","`","is","a","super","class","of",":","py",":","class",":","`","PythonIntegerRing","`","and",":","py",":","class",":","`","GMPYIntegerRing","`","one","of","which","will","be","the","implementation","for",":","ref",":","`","ZZ","`","depending","on","whether","or","not","``","gmpy","``","or","``","gmpy2","``","is","installed",".","See","also","========","Domain"]
docstr: Logarithm of *a* to the base *b*.
  
  Parameters
  ==========
  
  a: number
  b: number
  
  Returns
  =======
  
  $\\lfloor\log(a, b)\\rfloor$:
      Floor of the logarithm of *a* to the base *b*
  
  Examples
  ========
  
  >>> from sympy import ZZ
  >>> ZZ.log(ZZ(8), ZZ(2))
  3
  >>> ZZ.log(ZZ(9), ZZ(2))
  3
  
  Notes
  =====
  
  This function uses ``math.log`` which is based on ``float`` so it will
  fail for large integer arguments.
docstr_tok: ["Logarithm","of","*","a","*","to","the","base","*","b","*",".","Parameters","==========","a",":","number","b",":","number","Returns","=======","$","\\\\lfloor\\log","(","a",",","b",")","\\\\rfloor","$",":","Floor","of","the","logarithm","of","*","a","*","to","the","base","*","b","*","Examples","========",">",">",">","from","sympy","import","ZZ",">",">",">","ZZ.log","(","ZZ","(","8",")",",","ZZ","(","2",")",")","3",">",">",">","ZZ.log","(","ZZ","(","9",")",",","ZZ","(","2",")",")","3","Notes","=====","This","function","uses","``","math.log","``","which","is","based","on","``","float","``","so","it","will","fail","for","large","integer","arguments","."]
code: def log(self, a, b):
      r"""Logarithm of *a* to the base *b*.
  
      Parameters
      ==========
  
      a: number
      b: number
  
      Returns
      =======
  
      $\\lfloor\log(a, b)\\rfloor$:
          Floor of the logarithm of *a* to the base *b*
  
      Examples
      ========
  
      >>> from sympy import ZZ
      >>> ZZ.log(ZZ(8), ZZ(2))
      3
      >>> ZZ.log(ZZ(9), ZZ(2))
      3
  
      Notes
      =====
  
      This function uses ``math.log`` which is based on ``float`` so it will
      fail for large integer arguments.
      """
      return self.dtype(int(math.log(int(a), b)))
  
imports: from sympy.external.gmpy import MPZ, GROUND_TYPES
  from sympy.core.numbers import int_valued
  from sympy.polys.domains.groundtypes import SymPyInteger, factorial, gcdex, gcd, lcm, sqrt, is_square, sqrtrem
  from sympy.polys.domains.characteristiczero import CharacteristicZero
  from sympy.polys.domains.ring import Ring
  from sympy.polys.domains.simpledomain import SimpleDomain
  from sympy.polys.polyerrors import CoercionFailed
  from sympy.utilities import public
  import math
label_desc: Use image node_id 9 for calling the IntegerRing obj's underlying member method code with example usage: obj.log(a, b) and returns: self