docs: def _fractional_division(
         cls,
         divisor,
         remainder,
         base,
         precision=None,
         method=RoundingMethods.ROUND_DOWN
      ):
          """
          Get the repeating and non-repeating part.
  
          :param int divisor: the divisor
          :param int remainder: the remainder
          :param int base: the base
          :param precision: maximum number of fractional digits
          :type precision: int or NoneType
          :param method: rounding method
          :type method: element of RoundignMethods.METHODS
  
          :returns: carry-out digit, non_repeating and repeating parts
          :rtype: tuple of int * list of int * list of int * int
  
          :raises BasesValueError:
  
          Complexity: O(precision) if precision is not None else O(divisor)
          """
          # pylint: disable=too-many-arguments
          quotient = []
          remainders = []
          remainder = cls._divide(
             divisor,
             remainder * base,
             quotient,
             remainders,
             base,
             precision
          )
  
          if remainder == 0:
              return (0, quotient, [], 0)
          if remainder in remainders:
              start = remainders.index(remainder)
              return (0, quotient[:start], quotient[start:], 0)
          return cls._round(
             quotient,
             divisor,
             remainder,
             base,
             method
          )