red-colors 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ module Colors
2
+ module ColormapRegistry
3
+ register_listed_colormap("rocket")
4
+ register_listed_colormap("mako")
5
+ register_listed_colormap("icefire")
6
+ register_listed_colormap("vlag")
7
+ register_listed_colormap("flare")
8
+ register_listed_colormap("crest")
9
+ end
10
+ end
@@ -0,0 +1,62 @@
1
+ module Colors
2
+ module ColormapRegistry
3
+ @registry = {}
4
+
5
+ def self.[](name)
6
+ return name if name.is_a?(Colormap)
7
+
8
+ name = String.try_convert(name)
9
+ if @registry.key?(name)
10
+ return @registry[name]
11
+ else
12
+ raise ArgumentError, "Unknown colormap name: %p" % name
13
+ end
14
+ end
15
+
16
+ def self.register(cmap, name: nil, override_builtin: false)
17
+ case name
18
+ when String, Symbol
19
+ name = name.to_s
20
+ when nil
21
+ name = cmap.name
22
+ if name.nil?
23
+ raise ArgumentError, "`name` cannot be omitted for unnamed colormaps"
24
+ end
25
+ else
26
+ name = String.try_convert(name)
27
+ if name.nil?
28
+ raise ArgumentError, "`name` must be convertible to a String by to_str"
29
+ end
30
+ end
31
+
32
+ if @registry.key?(name)
33
+ existing = @registry[name]
34
+ if BUILTIN_COLORMAPS.key?(name)
35
+ unless override_builtin
36
+ raise ArgumentError,
37
+ "Trying to re-register a builtin colormap: %p" % name
38
+ end
39
+ end
40
+ warn "Trying to re-register the colormap %p which already exists" % name
41
+ end
42
+
43
+ unless cmap.is_a?(Colormap)
44
+ raise ArgumentError,
45
+ "Invalid value for registering a colormap (%p for a Colormap)" % cmap
46
+ end
47
+
48
+ @registry[name] = cmap
49
+ end
50
+
51
+ def self.unregister(name)
52
+ if @registry.key?(name)
53
+ if BUILTIN_COLORMAPS.key?(name)
54
+ raise ArgumentError,
55
+ "Unable to unregister the colormap %p which is a builtin colormap" % name
56
+ end
57
+ else
58
+ @registry.delete(name)
59
+ end
60
+ end
61
+ end
62
+ end
data/lib/colors/helper.rb CHANGED
@@ -7,7 +7,8 @@ module Colors
7
7
 
8
8
  private def check_range(value, range, name)
9
9
  return value if range.cover?(value)
10
- check_fail ArgumentError, "#{name} must be in #{range}, but #{value} is given"
10
+ check_fail ArgumentError,
11
+ "#{name} must be in #{range}, but %p is given" % value
11
12
  end
12
13
 
13
14
  private def check_fail(exc_class, message)
@@ -17,7 +17,7 @@ module Colors
17
17
  else
18
18
  ary = Array.try_convert(colors)
19
19
  if ary.nil?
20
- raise ArgumentError, "colors must be convertible to an array"
20
+ raise ArgumentError, "colors must be convertible to an array: %p for %s" % [colors, name]
21
21
  else
22
22
  colors = ary
23
23
  end
@@ -115,5 +115,23 @@ module Colors
115
115
 
116
116
  return lut.map {|v| v.clamp(0, 1).to_f }
117
117
  end
118
+
119
+ private def make_reverse_colormap(name)
120
+ segmented_data_r = self.segmented_data.map { |key, data|
121
+ data_r = if data.respond_to?(:call)
122
+ make_inverse_func(data)
123
+ else
124
+ data.reverse_each.map do |x, y0, y1|
125
+ [1r - x, y1, y0]
126
+ end
127
+ end
128
+ [key, data_r]
129
+ }.to_h
130
+ LinearSegmentedColormap.new(name, segmented_data_r, n_colors: self.n_colors, gamma: self.gamma)
131
+ end
132
+
133
+ private def make_inverse_func(f)
134
+ ->(x) { f(1 - x) }
135
+ end
118
136
  end
119
137
  end
@@ -37,5 +37,9 @@ module Colors
37
37
  @initialized = true
38
38
  update_extreme_colors
39
39
  end
40
+
41
+ private def make_reverse_colormap(name)
42
+ ListedColormap.new(self.colors.reverse, name: name, n_colors: self.n_colors)
43
+ end
40
44
  end
41
45
  end
@@ -1,3 +1,3 @@
1
1
  module Colors
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/red-colors.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  "#{spec.name}.gemspec",
28
28
  ]
29
29
  spec.files += [".yardopts"]
30
+ spec.files += Dir.glob("data/colormaps/*.json")
30
31
  spec.files += Dir.glob("lib/**/*.rb")
31
32
  spec.files += Dir.glob("image/*.*")
32
33
  spec.files += Dir.glob("doc/text/*")
@@ -115,5 +115,24 @@ class ColorsLinearSegmentedColormapTest < Test::Unit::TestCase
115
115
  after
116
116
  ])
117
117
  end
118
+
119
+ def test_reversed
120
+ cm = Colors::LinearSegmentedColormap.new_from_list("four", [:red, :magenta, :green, :yellow, :blue], n_colors: 5)
121
+ cm.under_color = :black
122
+ cm.over_color = :white
123
+ rev = cm.reversed
124
+ assert_equal([
125
+ "four_r",
126
+ cm[[0, 1, 2, 3, 4]],
127
+ Colors[:black],
128
+ Colors[:white]
129
+ ],
130
+ [
131
+ rev.name,
132
+ rev[[4, 3, 2, 1, 0]],
133
+ rev.under_color,
134
+ rev.over_color
135
+ ])
136
+ end
118
137
  end
119
138
 
@@ -112,4 +112,23 @@ class ColorsListedColormapTest < Test::Unit::TestCase
112
112
  after
113
113
  ])
114
114
  end
115
+
116
+ def test_reversed
117
+ cm = Colors::ListedColormap.new([:red, :green, :blue], name: "three")
118
+ cm.under_color = :orange
119
+ cm.over_color = :yellow
120
+ rev = cm.reversed
121
+ assert_equal([
122
+ "three_r",
123
+ cm[[0, 1, 2]],
124
+ Colors[:orange],
125
+ Colors[:yellow]
126
+ ],
127
+ [
128
+ rev.name,
129
+ rev[[2, 1, 0]],
130
+ rev.under_color,
131
+ rev.over_color
132
+ ])
133
+ end
115
134
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-colors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.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: 2021-06-12 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
14
  name: matrix
@@ -106,11 +106,33 @@ 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
113
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
114
136
  - lib/colors/convert.rb
115
137
  - lib/colors/helper.rb
116
138
  - lib/colors/hsl.rb