ruby-gr 0.0.5 → 0.0.6

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.
data/lib/gr/plot.rb.md ADDED
@@ -0,0 +1,207 @@
1
+ This is a memo to think about the structure of Plot/Figure.
2
+
3
+ ````ruby
4
+
5
+ module GR
6
+ # object oriented way
7
+ class PlotBase
8
+ end
9
+
10
+ class Line < PlotBase
11
+ end
12
+
13
+ class << self
14
+ def set_viewport; end
15
+
16
+ def minmax; end
17
+
18
+ def set_window; end
19
+
20
+ def draw_axes; end
21
+
22
+ def draw_polar_axes; end
23
+
24
+ def _inqtext; end
25
+
26
+ def _text; end
27
+
28
+ def draw_legend; end
29
+
30
+ def draw_colorbar; end
31
+
32
+ def colormap; end
33
+
34
+ def to_rgba; end
35
+
36
+ # Ruby is object-oriented language.
37
+ # Julia is more functional...
38
+ # def create_context
39
+ # end
40
+ # def restore_context
41
+ # end
42
+ # def figure
43
+ # end
44
+
45
+ # def hold
46
+ # end
47
+ # def usecolorscheme
48
+ # end
49
+
50
+ # Set current subplot index.
51
+ def subplot; end
52
+
53
+ # draw_grid
54
+
55
+ # xticks
56
+ # yticks
57
+ # zticks
58
+
59
+ # xticklabels
60
+ # yticklabels
61
+
62
+ def plot_img; end # should be private?
63
+
64
+ def plot_iso; end # should be private?
65
+
66
+ def plot_polar; end # should be private?
67
+
68
+ # send_meta
69
+
70
+ def plot_data; end # should be private?
71
+
72
+ def plot_args; end # should be private?
73
+
74
+ # Draw one or more line plots.
75
+ def plot_line; end
76
+ alias lineplot plot_line
77
+
78
+ # def plot_line_over oplot_line ?
79
+
80
+ # Draw one or more step or staircase plots.
81
+ def plot_step; end
82
+ alias stepplot plot_step
83
+ alias step plot_step
84
+
85
+ # Draw one or more scatter plots.
86
+ def plot_scatter; end
87
+ alias scatterplot plot_scatter
88
+ alias scatter plot_scatter
89
+
90
+ # Draw a stem plot.
91
+ def plot_stem; end
92
+ alias stemplot plot_stem
93
+ alias stem plot_stem
94
+
95
+ # Draw a bar plot.
96
+ def plot_bar; end
97
+ alias barplot plot_bar
98
+ alias bar plot_bar
99
+
100
+ def hist; end # should be private?
101
+
102
+ # Draw a histogram.
103
+ def plot_histgram; end
104
+ alias histogram plot_histgram
105
+
106
+ # Draw a polar histogram.
107
+ def plot_polarhistogram; end
108
+ alias polarhistogram plot_polarhistogram
109
+
110
+ # Draw a contour plot.
111
+ def plot_contour; end
112
+ alias contourplot plot_contour
113
+ # GR.contour is already defined in GR::FFI class.
114
+
115
+ # Draw a filled contour plot.
116
+ def plot_contourf; end
117
+ alias contourfplot plot_contour # change name?
118
+ # GR.contourf is already defined in GR::FFI class.
119
+
120
+ # Draw a hexagon binning plot.
121
+ def plot_hexbin; end
122
+ alias hexbinplot plot_hexbin
123
+ # GR.hexbin is already defined in GR::FFI class.
124
+ alias jointplot plot_hexbin
125
+
126
+ # Draw a heatmap.
127
+ def plot_heatmap; end
128
+ alias heatmap plot_heatmap
129
+
130
+ def plot_polarheatmap; end
131
+ alias polarheatmap plot_polarheatmap
132
+
133
+ # Draw a three-dimensional wireframe plot.
134
+ def plot_wireframe; end
135
+ alias wireframe plot_wireframe
136
+
137
+ # Draw a three-dimensional surface plot.
138
+ def plot_surface; end
139
+ alias surfaceplot plot_surface
140
+
141
+ def plot_volume; end
142
+ alias volumeplot plot_volume
143
+
144
+ # Draw one or more three-dimensional line plots.
145
+ def plot_line3; end
146
+ alias lineplot3 plot_line3
147
+
148
+ # Draw one or more three-dimensional scatter plots.
149
+ def plot_scatter3; end
150
+ alias scatterplot3 plot_scatter3
151
+
152
+ def redraw; end
153
+
154
+ def title; end
155
+
156
+ def xlabel; end
157
+
158
+ def ylabel; end
159
+
160
+ def legend; end
161
+
162
+ def xlim; end
163
+
164
+ def ylim; end
165
+
166
+ def savefig; end
167
+
168
+ def meshgrid; end # should be private ?
169
+
170
+ def peaks; end # should be private ?
171
+
172
+ def imshow; end
173
+
174
+ # Draw an isosurface.
175
+ def plot_isosurface; end
176
+
177
+ # Draw one or more polar plots.
178
+ def plot_polar; end
179
+
180
+ # Draw a triangular surface plot.
181
+ def plot_trisurf; end
182
+
183
+ # Draw a triangular contour plot.
184
+ def plot_tricont; end
185
+
186
+ def plot_shade; end
187
+
188
+ # def set_panzoom ?
189
+
190
+ # mainloop
191
+
192
+ # GR.plot do
193
+ #
194
+ # end
195
+ #
196
+ # GR.plot(:scatter, * * *)
197
+ def plot; end
198
+
199
+ # Object ?
200
+
201
+ # a = GR::Bar.new()
202
+ # a.draw ?
203
+ # a = GR::Bar.plot() ?
204
+ end
205
+ end
206
+
207
+ ```
data/lib/gr3.rb CHANGED
@@ -2,38 +2,52 @@
2
2
 
3
3
  # OverView of GR.rb
4
4
  #
5
- # +--------------------+
6
- # +-------------------+ | GR3 module |
7
- # | GR module | | +----------------+ |
8
- # | +---------------+ | | | GR3::FFI | |
9
- # | | GR::FFI | | | | + libGR3.so | |
10
- # | | + libGR.so | | | +----------------+ |
11
- # | +---------------+ | | | define_method |
12
- # | | define_method | | +----------------+ |
13
- # | +---------------+ | | | | GR3::GR3Base | |
14
- # | | | GR::GRBase | | | | v (Private) | |
15
- # | | v (Private) | | | +++--------------+ |
16
- # | +++-------------+ | | | Extend |
17
- # | | Extend | | v +------+ |
18
- # | v | | |Check | |
19
- # | | | <--+Error | |
20
- # +-------+-----------+ | +------+ |
21
- # ^ +---------+----------+
22
- # | +------------------+ ^
23
- # Extend | | GRCommons module | | Extend
24
- # | | +--------------+ | |
25
- # +----+ CommonUtils +----+
26
- # | | +--------------+ | |
27
- # | | +--------------+ | |
28
- # +----+ Version +----+
29
- # | | +--------------+ |
30
- # | | +--------------+ |
31
- # +----+JupyterSupport| |
32
- # | +--------------+ |
33
- # +------------------+
34
-
35
- require 'ffi'
36
-
5
+ # +--------------------+
6
+ # +-------------------+ | GR3 module |
7
+ # | GR module | | +----------------+ |
8
+ # | +---------------+ | | | GR3::FFI | |
9
+ # | | GR::FFI | | | | + libGR3.so | |
10
+ # | | + libGR.so | | | +----------------+ |
11
+ # | +---------------+ | | | define_method |
12
+ # | | define_method | | +----------------+ |
13
+ # | +---------------+ | | | | GR3::GR3Base | |
14
+ # | | | GR::GRBase | | | | v (Private) | |
15
+ # | | v (Private) | | | +++--------------+ |
16
+ # | +++-------------+ | | | Extend |
17
+ # | | Extend | | v +------+ |
18
+ # | v | | |Check | |
19
+ # | | | <--+Error | |
20
+ # +-------+-----------+ | +------+ |
21
+ # ^ +---------+----------+
22
+ # | +------------------+ ^
23
+ # Extend | | GRCommons module | | Extend
24
+ # | | +--------------+ | |
25
+ # | | | Fiddley | | |
26
+ # | | +--------------+ | |
27
+ # | | +--------------+ | |
28
+ # +----+ CommonUtils +----+
29
+ # | | +--------------+ | |
30
+ # | | +--------------+ | |
31
+ # +----+ Version +----+
32
+ # | | +--------------+ |
33
+ # | | +--------------+ |
34
+ # +----+JupyterSupport| |
35
+ # | +--------------+ |
36
+ # +------------------+
37
+ #
38
+ # Why not GR::GR3?
39
+ # * kojix2 did not want to force gr3 to be loaded when gr is loaded.
40
+ # * kojix2 did not want to write `GR3 = GR::GR3` or something.
41
+ # * This is a opinion of kojix2 and may be changed in the future.
42
+ #
43
+ # GR3 uses Numo::Narrray.
44
+ # * It is difficult to write GR3 modules with only Ruby arrays.
45
+ # * Numo::Narray has better performance and is easier to read.
46
+ # * Numo::Narray does not work with JRuby.
47
+ # * https://github.com/ruby-numo/numo-narray/issues/147
48
+ #
49
+ # This is a procedural interface to the GR3 in GR plotting library,
50
+ # https://github.com/sciapp/gr
37
51
  module GR3
38
52
  class Error < StandardError; end
39
53
 
@@ -42,19 +56,18 @@ module GR3
42
56
  end
43
57
 
44
58
  # Platforms | path
45
- # Windows | bin/libgr3.dll
59
+ # Windows | bin/libGR3.dll
46
60
  # MacOSX | lib/libGR3.so (NOT .dylib)
47
61
  # Ubuntu | lib/libGR3.so
48
62
  raise Error, 'Please set env variable GRDIR' unless ENV['GRDIR']
49
63
 
50
64
  ENV['GKS_FONTPATH'] ||= ENV['GRDIR']
51
- @ffi_lib = case RbConfig::CONFIG['host_os']
52
- when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
53
- File.expand_path('bin/libgr3.dll', ENV['GRDIR'])
54
- .gsub('/', '\\') # windows backslash
55
- else
56
- File.expand_path('lib/libGR3.so', ENV['GRDIR'])
57
- end
65
+ if Object.const_defined?(:RubyInstaller)
66
+ @ffi_lib = File.expand_path('bin/libGR3.dll', ENV['GRDIR'])
67
+ RubyInstaller::Runtime.add_dll_directory(File.dirname(@ffi_lib))
68
+ else
69
+ @ffi_lib = File.expand_path('lib/libGR3.so', ENV['GRDIR'])
70
+ end
58
71
 
59
72
  require_relative 'gr_commons'
60
73
  require_relative 'gr3/version'
@@ -69,13 +82,14 @@ module GR3
69
82
  # This module is for adding error checking to all methods in GR3
70
83
  module CheckError
71
84
  def geterror
72
- line = ::FFI::MemoryPointer.new(:int)
73
- file = ::FFI::MemoryPointer.new(:pointer)
85
+ line = GRCommons::Fiddley::MemoryPointer.new(:int)
86
+ file = GRCommons::Fiddley::MemoryPointer.new(:pointer)
74
87
  e = super(1, line, file)
75
88
  return [0, nil, nil] if e == 0
76
89
 
77
90
  line = line.read_int
78
- file = file.read_pointer.read_string
91
+ # to_ptr: Fiddley::MemoryPointer -> Fiddle::Pointer
92
+ file = file.to_ptr.ptr.to_s
79
93
  [e, line, file]
80
94
  end
81
95
 
@@ -90,11 +104,15 @@ module GR3
90
104
  mesg = FFI.gr3_geterrorstring(e)
91
105
  raise "GR3 error #{file} #{line} #{mesg}"
92
106
  end
107
+ values
93
108
  end
94
109
  end
95
110
  end
96
111
  extend CheckError
97
112
 
113
+ # Now you can see a lot of methods just calling super here.
114
+ # Why? Do they really need?
115
+ # Yes. They are written to help the yard generate the documentation.
98
116
  class << self
99
117
  # This method initializes the gr3 context.
100
118
  # @return [Integer]
@@ -124,13 +142,13 @@ module GR3
124
142
  # If gr3 is not initialized `"Not initialized"` is returned.
125
143
  # @return [String]
126
144
  def getrenderpathstring(*)
127
- super
145
+ super.to_s
128
146
  end
129
147
 
130
148
  # This function returns a string representation of a given error code.
131
149
  # @return [String]
132
150
  def geterrorstring(*)
133
- super
151
+ super.to_s
134
152
  end
135
153
 
136
154
  # This function clears the draw list.
@@ -366,9 +384,9 @@ module GR3
366
384
  # a new mesh has to be created.
367
385
  # @param nx [Integer] number of points in x-direction
368
386
  # @param ny [Integer] number of points in y-direction
369
- # @param px [Array, NArray] an array containing the x-coordinates
370
- # @param py [Array, NArray] an array containing the y-coordinates
371
- # @param pz [Array, NArray] an array of length nx * ny containing the z-coordinates
387
+ # @param x [Array, NArray] an array containing the x-coordinates
388
+ # @param y [Array, NArray] an array containing the y-coordinates
389
+ # @param z [Array, NArray] an array of length nx * ny containing the z-coordinates
372
390
  # @param option [Integer] option for the surface mesh; the GR3_SURFACE constants can be combined with bitwise or. See the table below.
373
391
  # * 0 : GR3_SURFACE_DEFAULT
374
392
  # * default behavior
@@ -383,9 +401,9 @@ module GR3
383
401
  # * 16 : GR3_SURFACE_GRZSHADED
384
402
  # * like GR3_SURFACE_GRCOLOR, but use the z-value directly as color index
385
403
  # @return [Integer]
386
- def createsurfacemesh(nx, ny, px, py, pz, option = 0)
404
+ def createsurfacemesh(nx, ny, x, y, z, option = 0)
387
405
  inquiry_int do |mesh|
388
- super(mesh, nx, ny, px, py, pz, option)
406
+ super(mesh, nx, ny, x, y, z, option)
389
407
  end
390
408
  end
391
409
 
@@ -413,16 +431,16 @@ module GR3
413
431
  end
414
432
 
415
433
  # Create a surface plot with gr3 and draw it with gks as cellarray.
416
- # @param px [Array, NArray] an array containing the x-coordinates
417
- # @param py [Array, NArray] an array containing the y-coordinates
418
- # @param pz [Array, NArray] an array of length nx * ny containing the z-coordinates
434
+ # @param x [Array, NArray] an array containing the x-coordinates
435
+ # @param y [Array, NArray] an array containing the y-coordinates
436
+ # @param z [Array, NArray] an array of length nx * ny containing the z-coordinates
419
437
  # @param option [Integer] see the option parameter of gr_surface.
420
438
  # OPTION_COLORED_MESH and OPTION_Z_SHADED_MESH are supported.
421
- def surface(px, py, pz, _option)
422
- nx = px.length
423
- ny = py.length
439
+ def surface(x, y, z, option)
440
+ nx = x.length
441
+ ny = y.length
424
442
  # TODO: Check out_of_bounds
425
- super(nx, ny, px, py, pz, ption)
443
+ super(nx, ny, x, y, z, option)
426
444
  end
427
445
 
428
446
  # drawtubemesh
@@ -675,10 +693,10 @@ module GR3
675
693
 
676
694
  def volume(data, algorithm)
677
695
  inquiry %i[double double] do |dmin, dmax|
678
- amin.write_double(-1)
696
+ dmin.write_double(-1)
679
697
  dmax.write_double(-1)
680
698
  # TODO: raise error when no NArray
681
- data = Numo::DFloat.cast(data) if data.is_a Array
699
+ data = Numo::DFloat.cast(data) if data.is_a? Array
682
700
  nx, ny, nz = data.shape
683
701
  super(nx, ny, nz, data, algorithm, dmin, dmax)
684
702
  end
@@ -731,38 +749,38 @@ module GR3
731
749
  end
732
750
 
733
751
  # InitAttribute
734
- IA_END_OF_LIST = 0
735
- IA_FRAMEBUFFER_WIDTH = 1
752
+ IA_END_OF_LIST = 0
753
+ IA_FRAMEBUFFER_WIDTH = 1
736
754
  IA_FRAMEBUFFER_HEIGHT = 2
737
755
 
738
756
  # Error
739
- ERROR_NONE = 0
740
- ERROR_INVALID_VALUE = 1
741
- ERROR_INVALID_ATTRIBUTE = 2
742
- ERROR_INIT_FAILED = 3
743
- ERROR_OPENGL_ERR = 4
744
- ERROR_OUT_OF_MEM = 5
745
- ERROR_NOT_INITIALIZED = 6
746
- ERROR_CAMERA_NOT_INITIALIZED = 7
747
- ERROR_UNKNOWN_FILE_EXTENSION = 8
748
- ERROR_CANNOT_OPEN_FILE = 9
749
- ERROR_EXPORT = 10
757
+ ERROR_NONE = 0
758
+ ERROR_INVALID_VALUE = 1
759
+ ERROR_INVALID_ATTRIBUTE = 2
760
+ ERROR_INIT_FAILED = 3
761
+ ERROR_OPENGL_ERR = 4
762
+ ERROR_OUT_OF_MEM = 5
763
+ ERROR_NOT_INITIALIZED = 6
764
+ ERROR_CAMERA_NOT_INITIALIZED = 7
765
+ ERROR_UNKNOWN_FILE_EXTENSION = 8
766
+ ERROR_CANNOT_OPEN_FILE = 9
767
+ ERROR_EXPORT = 10
750
768
 
751
769
  # Quality
752
- QUALITY_OPENGL_NO_SSAA = 0
753
- QUALITY_OPENGL_2X_SSAA = 2
754
- QUALITY_OPENGL_4X_SSAA = 4
755
- QUALITY_OPENGL_8X_SSAA = 8
770
+ QUALITY_OPENGL_NO_SSAA = 0
771
+ QUALITY_OPENGL_2X_SSAA = 2
772
+ QUALITY_OPENGL_4X_SSAA = 4
773
+ QUALITY_OPENGL_8X_SSAA = 8
756
774
  QUALITY_OPENGL_16X_SSAA = 16
757
- QUALITY_POVRAY_NO_SSAA = 0 + 1
758
- QUALITY_POVRAY_2X_SSAA = 2 + 1
759
- QUALITY_POVRAY_4X_SSAA = 4 + 1
760
- QUALITY_POVRAY_8X_SSAA = 8 + 1
775
+ QUALITY_POVRAY_NO_SSAA = 0 + 1
776
+ QUALITY_POVRAY_2X_SSAA = 2 + 1
777
+ QUALITY_POVRAY_4X_SSAA = 4 + 1
778
+ QUALITY_POVRAY_8X_SSAA = 8 + 1
761
779
  QUALITY_POVRAY_16X_SSAA = 16 + 1
762
780
 
763
781
  # Drawable
764
782
  DRAWABLE_OPENGL = 1
765
- DRAWABLE_GKS = 2
783
+ DRAWABLE_GKS = 2
766
784
 
767
785
  # SurfaceOption
768
786
  SURFACE_DEFAULT = 0