red-colors 0.1.0 → 0.3.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/data/colormaps/cividis.json +258 -0
  4. data/data/colormaps/coolwarm.json +107 -0
  5. data/data/colormaps/crest.json +258 -0
  6. data/data/colormaps/flare.json +258 -0
  7. data/data/colormaps/gist_earth.json +49 -0
  8. data/data/colormaps/gist_ncar.json +55 -0
  9. data/data/colormaps/icefire.json +258 -0
  10. data/data/colormaps/inferno.json +258 -0
  11. data/data/colormaps/magma.json +258 -0
  12. data/data/colormaps/mako.json +258 -0
  13. data/data/colormaps/nipy_spectral.json +71 -0
  14. data/data/colormaps/pink.json +200 -0
  15. data/data/colormaps/plasma.json +258 -0
  16. data/data/colormaps/rocket.json +258 -0
  17. data/data/colormaps/turbo.json +258 -0
  18. data/data/colormaps/twilight.json +512 -0
  19. data/data/colormaps/viridis.json +258 -0
  20. data/data/colormaps/vlag.json +258 -0
  21. data/lib/colors.rb +17 -5
  22. data/lib/colors/abstract_color.rb +4 -0
  23. data/lib/colors/colormap.rb +143 -0
  24. data/lib/colors/colormap_data.rb +44 -0
  25. data/lib/colors/colormap_data/matplotlib_builtin.rb +990 -0
  26. data/lib/colors/colormap_data/seaborn_builtin.rb +10 -0
  27. data/lib/colors/colormap_registry.rb +62 -0
  28. data/lib/colors/convert.rb +269 -0
  29. data/lib/colors/helper.rb +2 -1
  30. data/lib/colors/husl.rb +7 -100
  31. data/lib/colors/linear_segmented_colormap.rb +137 -0
  32. data/lib/colors/listed_colormap.rb +45 -0
  33. data/lib/colors/named_colors.rb +10 -20
  34. data/lib/colors/rgb.rb +20 -10
  35. data/lib/colors/rgba.rb +14 -8
  36. data/lib/colors/utils.rb +18 -0
  37. data/lib/colors/version.rb +1 -1
  38. data/lib/colors/xterm256.rb +56 -0
  39. data/lib/colors/xyy.rb +48 -0
  40. data/lib/colors/xyz.rb +2 -55
  41. data/red-colors.gemspec +3 -1
  42. data/test/test-husl.rb +45 -53
  43. data/test/test-linear-segmented-colormap.rb +138 -0
  44. data/test/test-listed-colormap.rb +134 -0
  45. data/test/test-rgb.rb +76 -1
  46. data/test/test-xterm256.rb +76 -0
  47. data/test/test-xyz.rb +1 -1
  48. metadata +50 -15
data/test/test-rgb.rb CHANGED
@@ -234,7 +234,7 @@ class ColorsRGBTest < Test::Unit::TestCase
234
234
  Colors::RGB.new(0x33, 0x33, 0x33).to_hex_string)
235
235
  end
236
236
 
237
- test("to_rgb") do
237
+ test("#to_rgb") do
238
238
  black = Colors::RGB.new(0, 0, 0)
239
239
  assert_same(black, black.to_rgb)
240
240
  end
@@ -291,4 +291,79 @@ class ColorsRGBTest < Test::Unit::TestCase
291
291
  assert_equal(Colors::HSL.new(0r, 0r, 1r),
292
292
  Colors::RGB.new(1r, 1r, 1r).to_hsl)
293
293
  end
294
+
295
+ data(
296
+ "red" => { rgb: "#ff0000", husl: [ 12.16, 1.0, 0.532] },
297
+ "yellow" => { rgb: "#ffff00", husl: [ 85.90, 1.0, 0.971] },
298
+ "green" => { rgb: "#00ff00", husl: [127.72, 1.0, 0.877] },
299
+ "cyan" => { rgb: "#00ffff", husl: [192.20, 1.0, 0.911] },
300
+ "blue" => { rgb: "#0000ff", husl: [265.87, 1.0, 0.323] },
301
+ "magenta" => { rgb: "#ff00ff", husl: [307.71, 1.0, 0.603] }
302
+ )
303
+ def test_to_husl(data)
304
+ husl_components, hex_string = data.values_at(:husl, :rgb)
305
+ husl = Colors::HUSL.new(*husl_components)
306
+ rgb = Colors::RGB.parse(hex_string)
307
+ assert_near(husl, rgb.to_husl, 0.03)
308
+ end
309
+
310
+ data do
311
+ data_set = {}
312
+ # colors 16-231 are a 6x6x6 color cube
313
+ (0...6).each do |r|
314
+ (0...6).each do |g|
315
+ (0...6).each do |b|
316
+ code = 6*(6*r + g) + b + 16
317
+ red = (r > 0) ? 40*r + 55 : r
318
+ green = (g > 0) ? 40*g + 55 : g
319
+ blue = (b > 0) ? 40*b + 55 : b
320
+ label = "Color #{code} is rgb(#{red}, #{green}, #{blue})"
321
+ data_set[label] = [code, Colors::RGB.new(red, green, blue)]
322
+ end
323
+ end
324
+ end
325
+ # colors 232-256 are grayscale colors
326
+ (0...24).each do |y|
327
+ code = 232 + y
328
+ level = 10*y + 8
329
+ label = "Color #{code} is gray(#{level})"
330
+ data_set[label] = [code, Colors::RGB.new(level, level, level)]
331
+ end
332
+ # Some colors to check cloest color finder
333
+ [
334
+ [ 0, 0, 8, 16 ],
335
+ [ 0, 8, 0, 16 ],
336
+ [ 11, 0, 0, 16 ],
337
+ [ 0, 0, 12, 232 ],
338
+ [ 0, 12, 0, 232 ],
339
+ [ 12, 0, 0, 232 ],
340
+
341
+ [ 0, 0, 75, 17 ],
342
+ [ 0, 75, 0, 22 ],
343
+ [ 75, 0, 0, 52 ],
344
+
345
+ [ 0, 128, 128, 30 ],
346
+ [ 102, 102, 102, 241 ],
347
+ [ 103, 103, 103, 242 ],
348
+ [ 208, 238, 238, 254 ],
349
+ [ 208, 208, 238, 189 ],
350
+
351
+ # TODO: Reconsider the following cases
352
+ [ 0, 0, 55, 233 ],
353
+ [ 0, 55, 0, 233 ],
354
+ [ 55, 0, 0, 233 ],
355
+ [ 0, 0, 74, 234 ],
356
+ [ 0, 74, 0, 234 ],
357
+ [ 74, 0, 0, 234 ],
358
+ ].each do |r, g, b, code|
359
+ label = "rgb(#{r}, #{g}, #{b}) is color #{code}"
360
+ data_set[label] = [code, Colors::RGB.new(r, g, b)]
361
+ end
362
+ data_set
363
+ end
364
+ def test_to_xterm256
365
+ code, rgb = data
366
+ assert_equal(Colors::Xterm256.new(code),
367
+ rgb.to_xterm256)
368
+ end
294
369
  end
@@ -0,0 +1,76 @@
1
+ class ColorsXterm256Test < Test::Unit::TestCase
2
+ include TestHelper
3
+
4
+ sub_test_case(".new") do
5
+ sub_test_case("with color code") do
6
+ test("the regular case") do
7
+ codes = [16, 255]
8
+ colors = codes.map {|i| Colors::Xterm256.new(i) }
9
+ assert_equal(codes,
10
+ colors.map(&:code))
11
+ end
12
+
13
+ data do
14
+ (0..15).map { |code|
15
+ ["ANSI color #{code}", code]
16
+ }.to_h
17
+ end
18
+ def test_ansi_color_code(code)
19
+ assert_raise(ArgumentError) do
20
+ Colors::Xterm256.new(code)
21
+ end
22
+ end
23
+
24
+ test("the negative argument") do
25
+ assert_raise(ArgumentError) do
26
+ Colors::Xterm256.new(-1)
27
+ end
28
+ end
29
+
30
+ test("too large argument") do
31
+ assert_raise(ArgumentError) do
32
+ Colors::Xterm256.new(256)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ test("==") do
39
+ assert { Colors::Xterm256.new(16) == Colors::Xterm256.new(16) }
40
+ assert { Colors::Xterm256.new(132) == Colors::Xterm256.new(132) }
41
+ end
42
+
43
+ test("!=") do
44
+ assert { Colors::Xterm256.new(16) != Colors::Xterm256.new(17) }
45
+ end
46
+
47
+ data do
48
+ data_set = {}
49
+ # colors 16-231 are a 6x6x6 color cube
50
+ (0...6).each do |r|
51
+ (0...6).each do |g|
52
+ (0...6).each do |b|
53
+ code = 6*(6*r + g) + b + 16
54
+ red = (r > 0) ? 40*r + 55 : r
55
+ green = (g > 0) ? 40*g + 55 : g
56
+ blue = (b > 0) ? 40*b + 55 : b
57
+ label = "Color #{code} is rgb(#{red}, #{green}, #{blue})"
58
+ data_set[label] = [code, Colors::RGB.new(red, green, blue)]
59
+ end
60
+ end
61
+ end
62
+ # colors 232-256 are grayscale colors
63
+ (0...24).each do |y|
64
+ code = 232 + y
65
+ level = 10*y + 8
66
+ label = "Color #{code} is gray(#{level})"
67
+ data_set[label] = [code, Colors::RGB.new(level, level, level)]
68
+ end
69
+ data_set
70
+ end
71
+ def test_to_rgb(data)
72
+ code, rgb = data
73
+ assert_equal(rgb,
74
+ Colors::Xterm256.new(code).to_rgb)
75
+ end
76
+ end
data/test/test-xyz.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class ColorsXYZTest < Test::Unit::TestCase
2
2
  sub_test_case("#luv_components") do
3
3
  test("on ITU-R BT.709 D65 white point") do
4
- l, u, v = Colors::XYZ.from_rgb(0r, 0r, 0r).luv_components(Colors::WHITE_POINT_D65)
4
+ l, u, v = Colors::RGB.new(0r, 0r, 0r).to_xyz.luv_components(Colors::WHITE_POINT_D65)
5
5
  assert_in_delta(0, l)
6
6
  assert_in_delta(0, u)
7
7
  assert_in_delta(0, v)
metadata CHANGED
@@ -1,23 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-colors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Murata
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-16 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: matrix
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :development
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: test-unit
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: yard
56
+ name: test-unit
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: kramdown
70
+ name: yard
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: numo-narray
84
+ name: kramdown
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -106,18 +106,47 @@ files:
106
106
  - LICENSE.txt
107
107
  - README.md
108
108
  - Rakefile
109
+ - data/colormaps/cividis.json
110
+ - data/colormaps/coolwarm.json
111
+ - data/colormaps/crest.json
112
+ - data/colormaps/flare.json
113
+ - data/colormaps/gist_earth.json
114
+ - data/colormaps/gist_ncar.json
115
+ - data/colormaps/icefire.json
116
+ - data/colormaps/inferno.json
117
+ - data/colormaps/magma.json
118
+ - data/colormaps/mako.json
119
+ - data/colormaps/nipy_spectral.json
120
+ - data/colormaps/pink.json
121
+ - data/colormaps/plasma.json
122
+ - data/colormaps/rocket.json
123
+ - data/colormaps/turbo.json
124
+ - data/colormaps/twilight.json
125
+ - data/colormaps/viridis.json
126
+ - data/colormaps/vlag.json
109
127
  - lib/colors.rb
110
128
  - lib/colors/abstract_color.rb
111
129
  - lib/colors/alpha_component.rb
112
130
  - lib/colors/color_data.rb
131
+ - lib/colors/colormap.rb
132
+ - lib/colors/colormap_data.rb
133
+ - lib/colors/colormap_data/matplotlib_builtin.rb
134
+ - lib/colors/colormap_data/seaborn_builtin.rb
135
+ - lib/colors/colormap_registry.rb
136
+ - lib/colors/convert.rb
113
137
  - lib/colors/helper.rb
114
138
  - lib/colors/hsl.rb
115
139
  - lib/colors/hsla.rb
116
140
  - lib/colors/husl.rb
141
+ - lib/colors/linear_segmented_colormap.rb
142
+ - lib/colors/listed_colormap.rb
117
143
  - lib/colors/named_colors.rb
118
144
  - lib/colors/rgb.rb
119
145
  - lib/colors/rgba.rb
146
+ - lib/colors/utils.rb
120
147
  - lib/colors/version.rb
148
+ - lib/colors/xterm256.rb
149
+ - lib/colors/xyy.rb
121
150
  - lib/colors/xyz.rb
122
151
  - red-colors.gemspec
123
152
  - test/helper.rb
@@ -125,9 +154,12 @@ files:
125
154
  - test/test-hsl.rb
126
155
  - test/test-hsla.rb
127
156
  - test/test-husl.rb
157
+ - test/test-linear-segmented-colormap.rb
158
+ - test/test-listed-colormap.rb
128
159
  - test/test-named-color.rb
129
160
  - test/test-rgb.rb
130
161
  - test/test-rgba.rb
162
+ - test/test-xterm256.rb
131
163
  - test/test-xyz.rb
132
164
  homepage: https://github.com/red-data-tools/red-colors
133
165
  licenses:
@@ -148,18 +180,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
180
  - !ruby/object:Gem::Version
149
181
  version: '0'
150
182
  requirements: []
151
- rubygems_version: 3.0.6
183
+ rubygems_version: 3.2.3
152
184
  signing_key:
153
185
  specification_version: 4
154
186
  summary: Red Colors provides a wide array of features for dealing with colors. This
155
187
  includes conversion between colorspaces, desaturation, and parsing colors.
156
188
  test_files:
157
- - test/test-named-color.rb
189
+ - test/helper.rb
190
+ - test/run.rb
158
191
  - test/test-hsl.rb
159
- - test/test-husl.rb
160
- - test/test-xyz.rb
161
192
  - test/test-hsla.rb
162
- - test/helper.rb
193
+ - test/test-husl.rb
194
+ - test/test-linear-segmented-colormap.rb
195
+ - test/test-listed-colormap.rb
196
+ - test/test-named-color.rb
163
197
  - test/test-rgb.rb
164
198
  - test/test-rgba.rb
165
- - test/run.rb
199
+ - test/test-xterm256.rb
200
+ - test/test-xyz.rb