figurate_numbers 1.4.2 β†’ 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f88663fb4b29da717f010c1f0316c6f43b84742bf90149c988f280af9642696
4
- data.tar.gz: f96d3430868d3aa1e7fa9152586c90eb83cda937f6d2a3c87434cfdd4fe13241
3
+ metadata.gz: a286c4ec17f817140054ae0c0b0aba3b3b7f8a47204fb4813eba687f6e1cba15
4
+ data.tar.gz: 85f689294ce5b0e7fc30a06ba001cb7dda5d8fb70bbcfa92e5e5ecc249540607
5
5
  SHA512:
6
- metadata.gz: 725f757198c2c298a12331410c98bcf1a6c001675c9fc8f6244f0dec7023bba66f88a05eaaa2bae4e97edb9f08992ec168cf8fc660dafcd0ddd82ebbd37c9fa3
7
- data.tar.gz: 62e57fdb8abf8546e6f5cca8c97eee63fbc9d9acba3f86299fed7619e75a97817c5de6dfdabea91927765f24557fa41df9c9797388969c2d9771177e7c914410
6
+ metadata.gz: c9ca9a1809ea6760cf8e2d6bcfead0eabc270bcfc2678e8c891921376514405d32d59e90a1187b4143e983f865765d9cfe258df736b93630189dbd695fabea1e
7
+ data.tar.gz: bacbbc4997f8da85f48962149a9b118bd1f857843c41d0a43e085560540ac4770b3ed10439758e7214e14007643bd05ac7a919d3fcfe58c9d668e610e584c91c
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Edgar Armando Delgado Vega
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/docs/ERRATA.md CHANGED
@@ -1,4 +1,4 @@
1
- ## Errata
1
+ # Errata
2
2
 
3
3
  - **Chapter 1, page 6:**
4
4
  The formula for *Square* in the table is given as:
data/docs/METHODS.md CHANGED
@@ -1,10 +1,11 @@
1
- # List of Implemented Sequences in `figurate_numbers`
1
+ # List of Sequences in `figurate_numbers` and Arithmetic Transformations Methods
2
2
 
3
3
  ### Table of Contents
4
4
  - 🟦 [Plane Figurate Numbers](#1-plane-figurate-numbers)
5
5
  - πŸŸ₯ [Space Figurate Numbers](#2-space-figurate-numbers)
6
6
  - 🟨 [Multidimensional Figurate Numbers](#3-multidimensional-figurate-numbers)
7
- - 🧬 [Zoo of figurate-related numbers](#6-zoo-of-figurate-related-numbers)
7
+ - 🧬 [Zoo of figurate-related numbers](#4-zoo-of-figurate-related-numbers)
8
+ - βš™οΈ [Arithmetic Transformations](#5-arithmetic-transformations)
8
9
 
9
10
  > Note that `=` means that you can call the same sequence with different names.
10
11
 
@@ -252,7 +253,7 @@
252
253
  69. `generalized_k_dimensional_centered_hyperoctahedron(k, left_index = 0)[provisional symmetry]`
253
254
  70. `generalized_nexus(k, left_index = 0) [even or odd dimension only changes sign]`
254
255
 
255
- ### 6. Zoo of figurate-related numbers
256
+ ### 4. Zoo of figurate-related numbers
256
257
 
257
258
  1. `cuban_numbers = cuban_prime_numbers`
258
259
  2. `quartan_numbers [Needs to improve the algorithmic complexity for n > 70]`
@@ -260,3 +261,14 @@
260
261
  4. `carmichael_numbers [Needs to improve the algorithmic complexity for n > 20]`
261
262
  4. `stern_prime_numbers(infty = false) [Quick calculations up to 8 terms]`
262
263
  5. `apocalyptic_numbers`
264
+
265
+ ### 5. Arithmetic Transformations
266
+
267
+ 1. `ArithTransform.n_residue(n, pow, mod)`
268
+ 2. `ArithTransform.pc_inversion(n, mod)`
269
+ 3. `ArithTransform.padic_val(n, p)`
270
+ 4. `ArithTransform.ring_padic_val(seq, p)`
271
+ 5. `ArithTransform.padic_norm(n, p)`
272
+ 6. `ArithTransform.ring_padic_norm(seq, p)`
273
+ 7. `ArithTransform.padic_expansion(n, p, precision = 11, reverse: false)`
274
+ 8. `ArithTransform.ring_padic_expansion(seq, p, precision = 11, reverse: false)`
@@ -0,0 +1,47 @@
1
+ require_relative './utils/padic_utils'
2
+ require_relative './utils/modn_utils'
3
+
4
+ module FigurateNumbers
5
+ # Provides arithmetic methods for transforming and analyzing figurate number sequences.
6
+ module ArithTransform
7
+ extend self
8
+
9
+ def n_residue(n, pow, mod)
10
+ ModNUtils.q_residues(n, pow, mod)
11
+ end
12
+
13
+ def pc_inversion(n, mod)
14
+ ModNUtils.inversion(n, mod)
15
+ end
16
+
17
+ def padic_val(n, p)
18
+ PAdicUtils.padic_valuation(n, p)
19
+ end
20
+
21
+ def ring_padic_val(seq, p)
22
+ seq.map do |delta|
23
+ PAdicUtils.padic_valuation(delta, p)
24
+ end
25
+ end
26
+
27
+ def padic_norm(n, p)
28
+ PAdicUtils.padic_norm(n, p)
29
+ end
30
+
31
+ def ring_padic_norm(seq, p)
32
+ seq.map do |delta|
33
+ PAdicUtils.padic_norm(delta, p)
34
+ end
35
+ end
36
+
37
+ def padic_expansion(n, p, precision = 11, reverse: false)
38
+ PAdicUtils.padic_expansion(n, p, precision, reverse)
39
+ end
40
+
41
+ def ring_padic_expansion(seq, p, precision = 11, reverse: false)
42
+ seq.map do |delta|
43
+ PAdicUtils.padic_expansion(delta, p, precision, reverse)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,23 @@
1
+ module FigurateNumbers
2
+ # Provides modular arithmetic methods (mod n) for transforming figurate number sequences.
3
+ module ModNUtils
4
+ extend self
5
+
6
+ def n_power(n, power)
7
+ n.pow(power)
8
+ end
9
+
10
+ def mod_reduc(n, mod)
11
+ n % mod
12
+ end
13
+
14
+ def q_residues(n, power, mod)
15
+ mod_reduc(n_power(n, power), mod)
16
+ end
17
+
18
+ def inversion(n, mod)
19
+ inv = n * -1
20
+ mod_reduc(inv, mod)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,54 @@
1
+ require 'prime'
2
+
3
+ module FigurateNumbers
4
+ # Module providing p-adic methods for transforming
5
+ # sequences of figurate numbers.
6
+ module PAdicUtils
7
+ extend self
8
+
9
+ def padic_valuation(base_ten_number, p)
10
+ raise "#{p} is not a prime number" unless Prime.prime?(p)
11
+
12
+ index = 0
13
+ return index if base_ten_number < 1
14
+
15
+ while base_ten_number % (p**index) == 0 # rubocop:disable Style/NumericPredicate,Style/WhileUntilModifier
16
+ index += 1
17
+ end
18
+ index - 1
19
+ end
20
+
21
+ def padic_norm(base_ten_number, p)
22
+ return 0 if base_ten_number == 0 # rubocop:disable Style/NumericPredicate
23
+
24
+ power = padic_valuation(base_ten_number, p)
25
+ 1.0 / p**power
26
+ end
27
+
28
+ def padic_expansion(base_ten_number, p, precision = 11, reverse_trim = false) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Style/OptionalBooleanParameter
29
+ inverse_limit_arr = []
30
+ (1...precision).each do |index|
31
+ power = p**index
32
+ inverse_limits = ((base_ten_number % power) + power) % power
33
+ inverse_limit_arr << inverse_limits
34
+ end
35
+ p_adic_expansion_array = [inverse_limit_arr[0]]
36
+
37
+ (0...(precision - 2)).each do |index|
38
+ a1 = inverse_limit_arr[index + 1]
39
+ a0 = inverse_limit_arr[index]
40
+ power = p**(index + 1)
41
+ digits = (a1 - a0) / power
42
+ p_adic_expansion_array << digits
43
+ end
44
+
45
+ if reverse_trim
46
+ reversed = p_adic_expansion_array.reverse
47
+ first_nonzero_index = reversed.index { |digit| digit != 0 } || 0
48
+ reversed[first_nonzero_index..-1]
49
+ else
50
+ p_adic_expansion_array
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FigurateNumbers
4
- VERSION = '1.4.2'
4
+ VERSION = '1.5.0'
5
5
  end
@@ -2,13 +2,16 @@ require_relative 'figurate_numbers/version'
2
2
  require_relative 'figurate_numbers/plane_figurate_numbers'
3
3
  require_relative 'figurate_numbers/space_figurate_numbers'
4
4
  require_relative 'figurate_numbers/multidimensional_figurate_numbers'
5
+ require_relative 'figurate_numbers/arith_transform'
5
6
 
6
7
  module FigurateNumbers
7
8
  extend PlaneFigurateNumbers
8
9
  extend SpaceFigurateNumbers
9
10
  extend MultiDimensionalFigurateNumbers
11
+ extend ArithTransform
10
12
  end
11
13
 
12
14
  PlaneFigurateNumbers = FigurateNumbers::PlaneFigurateNumbers
13
15
  SpaceFigurateNumbers = FigurateNumbers::SpaceFigurateNumbers
14
16
  MultiDimensionalFigurateNumbers = FigurateNumbers::MultiDimensionalFigurateNumbers
17
+ ArithTransform = FigurateNumbers::ArithTransform
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: figurate_numbers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Armando Delgado Vega
@@ -18,25 +18,27 @@ email:
18
18
  executables: []
19
19
  extensions: []
20
20
  extra_rdoc_files:
21
- - README.md
21
+ - "./LICENSE"
22
22
  - docs/ERRATA.md
23
23
  - docs/METHODS.md
24
24
  files:
25
- - README.md
25
+ - "./LICENSE"
26
26
  - docs/ERRATA.md
27
27
  - docs/METHODS.md
28
28
  - lib/figurate_numbers.rb
29
+ - lib/figurate_numbers/arith_transform.rb
29
30
  - lib/figurate_numbers/multidimensional_figurate_numbers.rb
30
- - lib/figurate_numbers/p_adic_utils/p_adic_utils.rb
31
31
  - lib/figurate_numbers/plane_figurate_numbers.rb
32
32
  - lib/figurate_numbers/space_figurate_numbers.rb
33
+ - lib/figurate_numbers/utils/modn_utils.rb
34
+ - lib/figurate_numbers/utils/padic_utils.rb
33
35
  - lib/figurate_numbers/utils/utils.rb
34
36
  - lib/figurate_numbers/version.rb
35
37
  homepage: https://github.com/edelveart/figurate_numbers
36
38
  licenses:
37
39
  - MIT
38
40
  metadata:
39
- documentation_uri: https://www.rubydoc.info/gems/figurate_numbers
41
+ documentation_uri: https://www.rubydoc.info/gems/figurate_numbers/
40
42
  source_code_uri: https://github.com/edelveart/figurate_numbers/
41
43
  homepage_uri: https://github.com/edelveart/figurate_numbers
42
44
  rdoc_options:
data/README.md DELETED
@@ -1,92 +0,0 @@
1
- <h1 align="center"> Figurate Numbers </h1>
2
-
3
- **Figurate Numbers** is the most comprehensive and specialized library for figurate numbers, developed in Ruby to date.
4
- It implements **241 infinite number sequences** inspired by the groundbreaking work [*Figurate Numbers*](https://books.google.com.pe/books/about/Figurate_Numbers.html?id=ERS7CgAAQBAJ&redir_esc=y) by Elena Deza and Michel Deza, published in 2012.
5
-
6
- <p align="center">
7
- <img src="https://img.shields.io/gem/v/figurate_numbers" alt="Gem Version">
8
- <img src="https://img.shields.io/gem/dt/figurate_numbers" alt="Gem Total Downloads">
9
- <img src="https://img.shields.io/github/stars/edelveart/figurate_numbers" alt="GitHub Repo stars">
10
- <img src="https://img.shields.io/github/license/edelveart/figurate_numbers" alt="GitHub License">
11
- </p>
12
-
13
- [![figurate numbers image](https://raw.githubusercontent.com/edelveart/figurate_numbers/main/figurate_numbers.png)](https://rubygems.org/gems/figurate_numbers)
14
-
15
-
16
- ## πŸ’Ž Installation
17
-
18
- Install it from the gem repository:
19
-
20
- ```rb
21
- gem install figurate_numbers
22
- ```
23
-
24
- ## 🧊 Features
25
-
26
- Figurate Numbers implements 241 infinite sequences using the Enumerator class in Ruby, each categorized by its geometric dimension. It is ideal for use in mathematical modeling, algorithmic composition, and integration with tools like Sonic Pi.
27
-
28
- The sequences are organized following the structure of the *Figurate Numbers* book:
29
-
30
- - 🟦 **PlaneFigurateNumbers** – 79 sequences (2D)
31
- - πŸŸ₯ **SpaceFigurateNumbers** – 86 sequences (3D)
32
- - 🟨 **MultiDimensionalFigurateNumbers** – 70 sequences (4D and beyond)
33
- - 🧬 **Zoo of figurate-related numbers** – 6 additional sequences *(included in the MultiDimensional module)*
34
-
35
- > πŸ“š Explore the detailed list of figurate numbers [here πŸ”.](docs/METHODS.md)
36
-
37
- ## 🧰 How to use in Ruby
38
-
39
- ```rb
40
- require 'figurate_numbers'
41
-
42
- ## Using take(integer)
43
- FigurateNumbers.pentatope.take(10)
44
-
45
- ## Storing and iterating
46
- f = FigurateNumbers.centered_octagonal_pyramid
47
- f.next
48
- f.next
49
- f.next
50
- ```
51
-
52
- Starting with version **1.4.0**, you can also call methods directly from their respective classes. This allows you to work with figurate numbers grouped by their geometric dimension:
53
-
54
- ```rb
55
- PlaneFigurateNumbers.polygonal(3)
56
- SpaceFigurateNumbers.rhombic_dodecahedral
57
- MultiDimensionalFigurateNumbers.six_dimensional_hyperoctahedron
58
- ```
59
-
60
- ## 🎢 How to use in Sonic Pi
61
-
62
- ### Version 1.4.0
63
-
64
- Starting from version **1.4.0**, you can use the library globally through `FigurateNumbers`to access all sequences, or you can use the specific classes mentioned above for separate access.
65
- The main change compared to version **1.3.0** is that you now need to import the file using **require** instead of **run_file**; otherwise, it will not function.
66
-
67
- ```rb
68
- require "<PATH>"
69
- pol_num = FigurateNumbers.polygonal(8)
70
- 350.times do
71
- play pol_num.next % 12 * 7 # Some mathematical function or transformation
72
- sleep 0.125
73
- end
74
- ```
75
-
76
- Simply copy the entry point path from the `lib/figurate_numbers.rb` file where the *gem* is installed.
77
-
78
- ### Version 1.3.0 (legacy)
79
-
80
- See discussion in the [**Sonic Pi community thread right here!**](https://in-thread.sonic-pi.net/t/figurate-numbers-for-sonic-pi-new-ruby-gem-for-infinite-number-sequences-and-patterns/8962)
81
-
82
- ## πŸ“š List of Implemented Sequences in `figurate_numbers`
83
-
84
- Explore the complete list of figurate number sequences and their Ruby methods:
85
-
86
- - [View all implemented methods and sequences πŸ”](docs/METHODS.md)
87
-
88
- ## πŸ“ Book Errata
89
-
90
- Corrections to formulas and data found in *Figurate Numbers* (2012):
91
-
92
- - [See full list of known errata πŸ”](docs/ERRATA.md)
@@ -1,27 +0,0 @@
1
- # module PAdicUtils
2
- # def self.potence(exponent)
3
- # # Este mΓ©todo modificarΓ‘ el arreglo de nΓΊmeros aplicando la potencia
4
- # map { |num| num**exponent }
5
- # end
6
- # def self.p_adic_valuation(base_ten_number, base_p_number)
7
- # m = 0
8
- # return m if base_ten_number < 1
9
- # while base_ten_number % (base_p_number ** m) == 0
10
- # m += 1
11
- # end
12
- # m - 1
13
- # end
14
-
15
- # def self.to_p_adic_valuation(arr, p)
16
- # arr.lazy.collect { |fignum| p_adic_valuation(fignum, p) }
17
- # end
18
- # end
19
-
20
-
21
- # puts PAdicUtils.p_adic_valuation(96, 2)
22
- # # export const pAdicValuation = (baseTenNumber: number, baseNumber: number): number => {
23
- # # let index = 0;
24
- # # if (baseTenNumber < 1) return index;
25
- # # while (baseTenNumber % (baseNumber ** index) === 0) index++;
26
- # # return index - 1;
27
- # # }