File Manager

Current Path : /usr/lib/ruby/gems/3.0.0/gems/rbs-1.0.4/core/
Upload File :
Current File : //usr/lib/ruby/gems/3.0.0/gems/rbs-1.0.4/core/numeric.rbs

# Numeric is the class from which all higher-level numeric classes should
# inherit.
#
# Numeric allows instantiation of heap-allocated objects. Other core numeric
# classes such as Integer are implemented as immediates, which means that each
# Integer is a single immutable object which is always passed by value.
#
#     a = 1
#     1.object_id == a.object_id   #=> true
#
# There can only ever be one instance of the integer `1`, for example. Ruby
# ensures this by preventing instantiation. If duplication is attempted, the
# same instance is returned.
#
#     Integer.new(1)                   #=> NoMethodError: undefined method `new' for Integer:Class
#     1.dup                            #=> 1
#     1.object_id == 1.dup.object_id   #=> true
#
# For this reason, Numeric should be used when defining other numeric classes.
#
# Classes which inherit from Numeric must implement `coerce`, which returns a
# two-member Array containing an object that has been coerced into an instance
# of the new class and `self` (see #coerce).
#
# Inheriting classes should also implement arithmetic operator methods (`+`,
# `-`, `*` and `/`) and the `<=>` operator (see Comparable). These methods may
# rely on `coerce` to ensure interoperability with instances of other numeric
# classes.
#
#     class Tally < Numeric
#       def initialize(string)
#         @string = string
#       end
#
#       def to_s
#         @string
#       end
#
#       def to_i
#         @string.size
#       end
#
#       def coerce(other)
#         [self.class.new('|' * other.to_i), self]
#       end
#
#       def <=>(other)
#         to_i <=> other.to_i
#       end
#
#       def +(other)
#         self.class.new('|' * (to_i + other.to_i))
#       end
#
#       def -(other)
#         self.class.new('|' * (to_i - other.to_i))
#       end
#
#       def *(other)
#         self.class.new('|' * (to_i * other.to_i))
#       end
#
#       def /(other)
#         self.class.new('|' * (to_i / other.to_i))
#       end
#     end
#
#     tally = Tally.new('||')
#     puts tally * 2            #=> "||||"
#     puts tally > 1            #=> true
#
class Numeric
  include Comparable

  public

  # `x.modulo(y)` means `x-y*(x/y).floor`.
  #
  # Equivalent to `num.divmod(numeric)[1]`.
  #
  # See Numeric#divmod.
  #
  def %: (Numeric) -> Numeric

  # Unary Plus---Returns the receiver.
  #
  def +@: () -> Numeric

  # Unary Minus---Returns the receiver, negated.
  #
  def -@: () -> Numeric

  # Returns zero if `number` equals `other`, otherwise returns `nil`.
  #
  def <=>: (Numeric other) -> Integer

  # Returns the absolute value of `num`.
  #
  #     12.abs         #=> 12
  #     (-34.56).abs   #=> 34.56
  #     -34.56.abs     #=> 34.56
  #
  # Numeric#magnitude is an alias for Numeric#abs.
  #
  def abs: () -> Numeric

  # Returns square of self.
  #
  def abs2: () -> Numeric

  # Returns 0 if the value is positive, pi otherwise.
  #
  def angle: () -> Numeric

  # Returns 0 if the value is positive, pi otherwise.
  #
  alias arg angle

  # Returns the smallest number greater than or equal to `num` with a precision of
  # `ndigits` decimal digits (default: 0).
  #
  # Numeric implements this by converting its value to a Float and invoking
  # Float#ceil.
  #
  def ceil: () -> Integer
          | (Integer digits) -> (Integer | Numeric)

  # If `numeric` is the same type as `num`, returns an array `[numeric, num]`.
  # Otherwise, returns an array with both `numeric` and `num` represented as Float
  # objects.
  #
  # This coercion mechanism is used by Ruby to handle mixed-type numeric
  # operations: it is intended to find a compatible common type between the two
  # operands of the operator.
  #
  #     1.coerce(2.5)   #=> [2.5, 1.0]
  #     1.2.coerce(3)   #=> [3.0, 1.2]
  #     1.coerce(2)     #=> [2, 1]
  #
  def coerce: (Numeric) -> [ Numeric, Numeric ]

  # Returns self.
  #
  def conj: () -> Numeric

  # Returns self.
  #
  def conjugate: () -> Numeric

  # Returns the denominator (always positive).
  #
  def denominator: () -> Integer

  # Uses `/` to perform division, then converts the result to an integer. Numeric
  # does not define the `/` operator; this is left to subclasses.
  #
  # Equivalent to `num.divmod(numeric)[0]`.
  #
  # See Numeric#divmod.
  #
  def div: (Numeric) -> Integer

  # Returns an array containing the quotient and modulus obtained by dividing
  # `num` by `numeric`.
  #
  # If `q, r = x.divmod(y)`, then
  #
  #     q = floor(x/y)
  #     x = q*y + r
  #
  # The quotient is rounded toward negative infinity, as shown in the following
  # table:
  #
  #      a    |  b  |  a.divmod(b)  |   a/b   | a.modulo(b) | a.remainder(b)
  #     ------+-----+---------------+---------+-------------+---------------
  #      13   |  4  |   3,    1     |   3     |    1        |     1
  #     ------+-----+---------------+---------+-------------+---------------
  #      13   | -4  |  -4,   -3     |  -4     |   -3        |     1
  #     ------+-----+---------------+---------+-------------+---------------
  #     -13   |  4  |  -4,    3     |  -4     |    3        |    -1
  #     ------+-----+---------------+---------+-------------+---------------
  #     -13   | -4  |   3,   -1     |   3     |   -1        |    -1
  #     ------+-----+---------------+---------+-------------+---------------
  #      11.5 |  4  |   2,    3.5   |   2.875 |    3.5      |     3.5
  #     ------+-----+---------------+---------+-------------+---------------
  #      11.5 | -4  |  -3,   -0.5   |  -2.875 |   -0.5      |     3.5
  #     ------+-----+---------------+---------+-------------+---------------
  #     -11.5 |  4  |  -3,    0.5   |  -2.875 |    0.5      |    -3.5
  #     ------+-----+---------------+---------+-------------+---------------
  #     -11.5 | -4  |   2,   -3.5   |   2.875 |   -3.5      |    -3.5
  #
  # Examples
  #
  #     11.divmod(3)        #=> [3, 2]
  #     11.divmod(-3)       #=> [-4, -1]
  #     11.divmod(3.5)      #=> [3, 0.5]
  #     (-11).divmod(3.5)   #=> [-4, 3.0]
  #     11.5.divmod(3.5)    #=> [3, 1.0]
  #
  def divmod: (Numeric) -> [ Numeric, Numeric ]

  # Returns `true` if `num` and `numeric` are the same type and have equal values.
  #  Contrast this with Numeric#==, which performs type conversions.
  #
  #     1 == 1.0        #=> true
  #     1.eql?(1.0)     #=> false
  #     1.0.eql?(1.0)   #=> true
  #
  def eql?: (untyped) -> bool

  # Returns float division.
  #
  def fdiv: (Numeric) -> Numeric

  # Returns `true` if `num` is a finite number, otherwise returns `false`.
  #
  def finite?: () -> bool

  # Returns the largest number less than or equal to `num` with a precision of
  # `ndigits` decimal digits (default: 0).
  #
  # Numeric implements this by converting its value to a Float and invoking
  # Float#floor.
  #
  def floor: () -> Integer
           | (Integer digits) -> Numeric

  # Returns the corresponding imaginary number. Not available for complex numbers.
  #
  #     -42.i  #=> (0-42i)
  #     2.0.i  #=> (0+2.0i)
  #
  def i: () -> Complex

  # Returns zero.
  #
  def imag: () -> Numeric

  # Returns zero.
  #
  def imaginary: () -> Numeric

  # Returns `nil`, -1, or 1 depending on whether the value is finite, `-Infinity`,
  # or `+Infinity`.
  #
  def infinite?: () -> Integer?

  # Returns `true` if `num` is an Integer.
  #
  #     1.0.integer?   #=> false
  #     1.integer?     #=> true
  #
  def integer?: () -> bool

  # Returns the absolute value of `num`.
  #
  #     12.abs         #=> 12
  #     (-34.56).abs   #=> 34.56
  #     -34.56.abs     #=> 34.56
  #
  # Numeric#magnitude is an alias for Numeric#abs.
  #
  alias magnitude abs

  # `x.modulo(y)` means `x-y*(x/y).floor`.
  #
  # Equivalent to `num.divmod(numeric)[1]`.
  #
  # See Numeric#divmod.
  #
  def modulo: (Numeric) -> Numeric

  # Returns `true` if `num` is less than 0.
  #
  def negative?: () -> bool

  # Returns `self` if `num` is not zero, `nil` otherwise.
  #
  # This behavior is useful when chaining comparisons:
  #
  #     a = %w( z Bb bB bb BB a aA Aa AA A )
  #     b = a.sort {|a,b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
  #     b   #=> ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
  #
  def nonzero?: () -> self?

  # Returns the numerator.
  #
  def numerator: () -> Numeric

  # Returns 0 if the value is positive, pi otherwise.
  #
  alias phase angle

  # Returns an array; [num.abs, num.arg].
  #
  def polar: () -> [ Numeric, Numeric ]

  # Returns `true` if `num` is greater than 0.
  #
  def positive?: () -> bool

  # Returns the most exact division (rational for integers, float for floats).
  #
  def quo: (Numeric) -> Numeric

  # Returns self.
  #
  def real: () -> Numeric

  # Returns `true` if `num` is a real number (i.e. not Complex).
  #
  def real?: () -> bool

  # Returns an array; [num, 0].
  #
  def rect: () -> [ Numeric, Numeric ]

  # Returns an array; [num, 0].
  #
  alias rectangular rect

  # `x.remainder(y)` means `x-y*(x/y).truncate`.
  #
  # See Numeric#divmod.
  #
  def remainder: (Numeric) -> Numeric

  # Returns `num` rounded to the nearest value with a precision of `ndigits`
  # decimal digits (default: 0).
  #
  # Numeric implements this by converting its value to a Float and invoking
  # Float#round.
  #
  def round: () -> Integer
           | (Integer digits) -> Numeric

  # Invokes the given block with the sequence of numbers starting at `num`,
  # incremented by `step` (defaulted to `1`) on each call.
  #
  # The loop finishes when the value to be passed to the block is greater than
  # `limit` (if `step` is positive) or less than `limit` (if `step` is negative),
  # where `limit` is defaulted to infinity.
  #
  # In the recommended keyword argument style, either or both of `step` and
  # `limit` (default infinity) can be omitted.  In the fixed position argument
  # style, zero as a step (i.e. `num.step(limit, 0)`) is not allowed for
  # historical compatibility reasons.
  #
  # If all the arguments are integers, the loop operates using an integer counter.
  #
  # If any of the arguments are floating point numbers, all are converted to
  # floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
  # where *n = (limit - num)/step*.
  #
  # Otherwise, the loop starts at `num`, uses either the less-than (`<`) or
  # greater-than (`>`) operator to compare the counter against `limit`, and
  # increments itself using the `+` operator.
  #
  # If no block is given, an Enumerator is returned instead. Especially, the
  # enumerator is an Enumerator::ArithmeticSequence if both `limit` and `step` are
  # kind of Numeric or `nil`.
  #
  # For example:
  #
  #     p 1.step.take(4)
  #     p 10.step(by: -1).take(4)
  #     3.step(to: 5) {|i| print i, " " }
  #     1.step(10, 2) {|i| print i, " " }
  #     Math::E.step(to: Math::PI, by: 0.2) {|f| print f, " " }
  #
  # Will produce:
  #
  #     [1, 2, 3, 4]
  #     [10, 9, 8, 7]
  #     3 4 5
  #     1 3 5 7 9
  #     2.718281828459045 2.9182818284590453 3.118281828459045
  #
  def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
          | (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
          | (?by: Numeric, ?to: Numeric) { (Numeric) -> void } -> self
          | (?by: Numeric, ?to: Numeric) -> Enumerator[Numeric, self]

  # Returns the value as a complex.
  #
  def to_c: () -> Complex

  # Invokes the child class's `to_i` method to convert `num` to an integer.
  #
  #     1.0.class          #=> Float
  #     1.0.to_int.class   #=> Integer
  #     1.0.to_i.class     #=> Integer
  #
  def to_int: () -> Integer

  # Returns `num` truncated (toward zero) to a precision of `ndigits` decimal
  # digits (default: 0).
  #
  # Numeric implements this by converting its value to a Float and invoking
  # Float#truncate.
  #
  def truncate: () -> Integer
              | (Integer ndigits) -> (Integer | Numeric)

  # Returns `true` if `num` has a zero value.
  #
  def zero?: () -> bool
end

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com