Module: VectorNumber::Querying

Included in:
VectorNumber
Defined in:
lib/vector_number/querying.rb

Overview

Methods for querying state of the number. Mostly modeled after Complex.

Instance Method Summary collapse

Instance Method Details

#finite?Boolean

Returns true if all coefficients are finite, false otherwise.

Examples:

VectorNumber[2].finite? # => true
VectorNumber[Float::NAN].finite? # => false
VectorNumber["a"].mult(Float::INFINITY).finite? # => false

Returns:

  • (Boolean)

Since:

  • 0.1.0



54
55
56
# File 'lib/vector_number/querying.rb', line 54

def finite?
  all? { |_u, v| v.finite? }
end

#infinite?1?

Returns 1 if any coefficients are infinite, nil otherwise.

This behavior is the same as Complex‘s.

Examples:

VectorNumber[2].infinite? # => nil
VectorNumber[Float::NAN].infinite? # => 1
VectorNumber["a"].mult(-Float::INFINITY).infinite? # => 1

Returns:

  • (1, nil)

Since:

  • 0.1.0



70
71
72
# File 'lib/vector_number/querying.rb', line 70

def infinite?
  finite? ? nil : 1 # rubocop:disable Style/ReturnNilInPredicateMethodDefinition
end

#integer?false

Always returns false, as vectors are not Integers.

Returns:

  • (false)

Since:

  • 0.2.1



148
# File 'lib/vector_number/querying.rb', line 148

def integer? = false

#negative?Boolean

Returns true if number is non-zero and all non-zero coefficients are negative, and false otherwise.

Examples:

VectorNumber["a"].neg.negative? # => true
VectorNumber[-2].neg.negative? # => false
(VectorNumber["1"] - VectorNumber[1]).negative? # => false
VectorNumber[0].negative? # => false

Returns:

  • (Boolean)

Since:

  • 0.1.0



128
129
130
# File 'lib/vector_number/querying.rb', line 128

def negative?
  !zero? && all? { |_u, c| c.negative? }
end

#nonnumeric?(dimensions = 2) ⇒ Boolean

Whether this VectorNumber contains any non-numeric parts.

Examples:

VectorNumber[2].nonnumeric? # => false
VectorNumber[2, 3i].nonnumeric? # => false
VectorNumber[2, "a"].nonnumeric? # => true
VectorNumber[2, 3i].nonnumeric?(1) # => true

Parameters:

  • dimensions (Integer) (defaults to: 2)

    number of dimensions to consider “numeric”

    • 0 — zero

    • 1 — real number

    • 2 — complex number, etc.

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)

    if dimensions is negative

Since:

  • 0.2.1



42
# File 'lib/vector_number/querying.rb', line 42

def nonnumeric?(dimensions = 2) = !numeric?(dimensions)

#nonzero?VectorNumber?

Returns self if there are any non-zero coefficients, nil otherwise.

This behavior is the same as Numeric‘s.

Examples:

VectorNumber["ab", "cd"].nonzero? # => (1⋅'ab' + 1⋅'cd')
VectorNumber[].nonzero? # => nil

Returns:

Since:

  • 0.1.0



96
97
98
# File 'lib/vector_number/querying.rb', line 96

def nonzero?
  zero? ? nil : self # rubocop:disable Style/ReturnNilInPredicateMethodDefinition
end

#numeric?(dimensions = 2) ⇒ Boolean

Whether this VectorNumber can be considered strictly numeric, e.g. real or complex.

Examples:

VectorNumber[2].numeric? # => true
VectorNumber[2, 3i].numeric? # => true
VectorNumber[2, "a"].numeric? # => false
VectorNumber[2, 3i].numeric?(1) # => false

Parameters:

  • dimensions (Integer) (defaults to: 2)

    number of dimensions to consider “numeric”

    • 0 — zero

    • 1 — real number

    • 2 — complex number, etc.

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)

    if dimensions is negative

Since:

  • 0.2.0



23
24
25
26
27
# File 'lib/vector_number/querying.rb', line 23

def numeric?(dimensions = 2)
  raise ArgumentError, "`dimensions` must be non-negative" unless dimensions >= 0

  size <= dimensions && (1..dimensions).count { @data[UNIT[_1]].nonzero? } == size
end

#positive?Boolean

Returns true if number is non-zero and all non-zero coefficients are positive, and false otherwise.

Examples:

VectorNumber["a"].positive? # => true
VectorNumber[2].neg.positive? # => false
(VectorNumber["1"] - VectorNumber[1]).positive? # => false
VectorNumber[0].positive? # => false

Returns:

  • (Boolean)

Since:

  • 0.1.0



112
113
114
# File 'lib/vector_number/querying.rb', line 112

def positive?
  !zero? && all? { |_u, c| c.positive? }
end

#real?false

Always returns false, as vectors are not real numbers.

This behavior is the same as Complex‘s.

Returns:

  • (false)

See Also:

Since:

  • 0.1.0



141
# File 'lib/vector_number/querying.rb', line 141

def real? = false

#zero?Boolean

Returns true if there are no non-zero coefficients, and false otherwise.

Examples:

VectorNumber["c"].zero? # => false
VectorNumber[].zero? # => true

Returns:

  • (Boolean)

Since:

  • 0.1.0



83
# File 'lib/vector_number/querying.rb', line 83

def zero? = size.zero?