figurate_numbers 1.4.2 β†’ 1.5.1

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: 615bd4bfc8ce65a4075fb7b9456ed793e8bedaa3157a6875accdd59f86b592ec
4
+ data.tar.gz: 4f3f33115e5c40912b0730be116757ff0211703e89e2e0b27315d35f276283ec
5
5
  SHA512:
6
- metadata.gz: 725f757198c2c298a12331410c98bcf1a6c001675c9fc8f6244f0dec7023bba66f88a05eaaa2bae4e97edb9f08992ec168cf8fc660dafcd0ddd82ebbd37c9fa3
7
- data.tar.gz: 62e57fdb8abf8546e6f5cca8c97eee63fbc9d9acba3f86299fed7619e75a97817c5de6dfdabea91927765f24557fa41df9c9797388969c2d9771177e7c914410
6
+ metadata.gz: 6c097387a659972438771724497a87c1bcd28f1a6714fa619d97dc7bd2dda137ae4f0531745834637423ae1da6d3588482ff0cefe2d9da203968e63477cdb723
7
+ data.tar.gz: d483f180c9aea3c43520301fca605c8118be359e47b73e2817f2cae9afe2733b375ca3f78ab551cc3be276f8e30953b1e3585163064b2ebbd3b510cd245f2536
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/README.md CHANGED
@@ -27,15 +27,17 @@ Figurate Numbers implements 241 infinite sequences using the Enumerator class in
27
27
 
28
28
  The sequences are organized following the structure of the *Figurate Numbers* book:
29
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)*
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
+ - βš™οΈ **ArithTransform**: p-adic transformations and other arithmetic operations
34
35
 
35
- > πŸ“š Explore the detailed list of figurate numbers [here πŸ”.](docs/METHODS.md)
36
36
 
37
37
  ## 🧰 How to use in Ruby
38
38
 
39
+ ### Version 1.5.0
40
+
39
41
  ```rb
40
42
  require 'figurate_numbers'
41
43
 
@@ -48,45 +50,51 @@ f.next
48
50
  f.next
49
51
  f.next
50
52
  ```
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
+ Starting from version **1.5.0**, `figurate_numbers` not only supports global access via `FigurateNumbers` and the use of specific classes for separate access, but also introduces new p-adic transformations and other mathematical operations that can be applied directly to sequences.
53
54
 
54
55
  ```rb
55
- PlaneFigurateNumbers.polygonal(3)
56
+ PlaneFigurateNumbers.polygonal(19)
56
57
  SpaceFigurateNumbers.rhombic_dodecahedral
57
58
  MultiDimensionalFigurateNumbers.six_dimensional_hyperoctahedron
59
+ seq = MultiDimensionalFigurateNumbers.five_dimensional_hypercube.take(15)
60
+ ArithTransform.ring_padic_val(seq, 3)
58
61
  ```
62
+ > πŸ“š Explore the detailed list of figurate numbers and arithmetic transformations [here πŸ”.](https://github.com/edelveart/figurate_numbers/blob/main/docs/METHODS.md)
59
63
 
60
64
  ## 🎢 How to use in Sonic Pi
61
65
 
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
+ Simply copy the entry point path from the `lib/figurate_numbers.rb` file where the *gem* is installed.
66
67
 
67
68
  ```rb
68
69
  require "<PATH>"
70
+
69
71
  pol_num = FigurateNumbers.polygonal(8)
70
72
  350.times do
71
73
  play pol_num.next % 12 * 7 # Some mathematical function or transformation
72
74
  sleep 0.125
73
75
  end
74
- ```
75
76
 
76
- Simply copy the entry point path from the `lib/figurate_numbers.rb` file where the *gem* is installed.
77
+ amp_seq = SpaceFigurateNumbers.centered_hendecagonal_pyramidal
78
+ 100.times do
79
+ sample :bd_sone, amp: ArithTransform.padic_norm(amp_seq.next, 3) # p-adic amplitude control
80
+ sleep 0.25
81
+ end
82
+ ```
77
83
 
78
84
  ### Version 1.3.0 (legacy)
79
85
 
86
+ The main change introduced after version **1.3.0** is that you must now import the file using **require** instead of **run_file**; otherwise, it will not function.
87
+
80
88
  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
89
 
82
- ## πŸ“š List of Implemented Sequences in `figurate_numbers`
90
+ ## πŸ“š List of Sequences in `figurate_numbers` and Arithmetic Transformations Methods
83
91
 
84
- Explore the complete list of figurate number sequences and their Ruby methods:
92
+ Explore the complete list of figurate number sequences:
85
93
 
86
- - [View all implemented methods and sequences πŸ”](docs/METHODS.md)
94
+ - [View all implemented methods and sequences πŸ”](https://github.com/edelveart/figurate_numbers/blob/main/docs/METHODS.md)
87
95
 
88
96
  ## πŸ“ Book Errata
89
97
 
90
98
  Corrections to formulas and data found in *Figurate Numbers* (2012):
91
99
 
92
- - [See full list of known errata πŸ”](docs/ERRATA.md)
100
+ - [See full list of known errata πŸ”](https://github.com/edelveart/figurate_numbers/blob/main/docs/ERRATA.md)
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.1'
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.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Armando Delgado Vega
@@ -18,25 +18,29 @@ email:
18
18
  executables: []
19
19
  extensions: []
20
20
  extra_rdoc_files:
21
+ - LICENSE
21
22
  - README.md
22
23
  - docs/ERRATA.md
23
24
  - docs/METHODS.md
24
25
  files:
26
+ - LICENSE
25
27
  - README.md
26
28
  - docs/ERRATA.md
27
29
  - docs/METHODS.md
28
30
  - lib/figurate_numbers.rb
31
+ - lib/figurate_numbers/arith_transform.rb
29
32
  - lib/figurate_numbers/multidimensional_figurate_numbers.rb
30
- - lib/figurate_numbers/p_adic_utils/p_adic_utils.rb
31
33
  - lib/figurate_numbers/plane_figurate_numbers.rb
32
34
  - lib/figurate_numbers/space_figurate_numbers.rb
35
+ - lib/figurate_numbers/utils/modn_utils.rb
36
+ - lib/figurate_numbers/utils/padic_utils.rb
33
37
  - lib/figurate_numbers/utils/utils.rb
34
38
  - lib/figurate_numbers/version.rb
35
39
  homepage: https://github.com/edelveart/figurate_numbers
36
40
  licenses:
37
41
  - MIT
38
42
  metadata:
39
- documentation_uri: https://www.rubydoc.info/gems/figurate_numbers
43
+ documentation_uri: https://www.rubydoc.info/gems/figurate_numbers/
40
44
  source_code_uri: https://github.com/edelveart/figurate_numbers/
41
45
  homepage_uri: https://github.com/edelveart/figurate_numbers
42
46
  rdoc_options:
@@ -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
- # # }