red-colors 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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