ruby-gr 0.0.23 → 0.0.24
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 +4 -4
- data/README.md +7 -4
- data/lib/gr.rb +960 -834
- data/lib/gr/ffi.rb +2 -1
- data/lib/gr/plot.rb +74 -29
- data/lib/gr3.rb +286 -230
- data/lib/gr_commons/define_methods.rb +5 -5
- data/lib/gr_commons/fiddley.rb +6 -6
- data/lib/gr_commons/gr_common_utils.rb +5 -5
- data/lib/gr_commons/gr_logger.rb +106 -0
- data/lib/gr_commons/jupyter_support.rb +5 -5
- data/lib/gr_commons/search_shared_library.rb +3 -2
- data/lib/gr_commons/version.rb +1 -1
- data/lib/grm/ffi.rb +0 -1
- metadata +4 -18
- data/lib/gr/plot.rb.md +0 -172
@@ -5,8 +5,8 @@ module GRCommons
|
|
5
5
|
module DefineMethods
|
6
6
|
private
|
7
7
|
|
8
|
-
def define_ffi_methods(
|
9
|
-
|
8
|
+
def define_ffi_methods(ffi_module, prefix: '', default_type: :double)
|
9
|
+
ffi_module.ffi_methods.each do |method|
|
10
10
|
# Use delete_prefix (Ruby >= 2.5)
|
11
11
|
method_name = method.to_s.sub(/^#{prefix}/, '')
|
12
12
|
|
@@ -16,14 +16,14 @@ module GRCommons
|
|
16
16
|
args.map! do |arg|
|
17
17
|
case arg
|
18
18
|
when Array
|
19
|
-
GRCommons::GRCommonUtils.
|
19
|
+
GRCommons::GRCommonUtils.public_send(default_type, arg)
|
20
20
|
when ->(x) { defined?(Numo::NArray) && x.is_a?(Numo::NArray) }
|
21
|
-
GRCommons::GRCommonUtils.
|
21
|
+
GRCommons::GRCommonUtils.public_send(default_type, arg)
|
22
22
|
else
|
23
23
|
arg
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
26
|
+
ffi_module.public_send(method, *args)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/gr_commons/fiddley.rb
CHANGED
@@ -210,7 +210,7 @@ module GRCommons
|
|
210
210
|
end
|
211
211
|
|
212
212
|
define_method("put_array_of_int#{bits}") do |offset, ary|
|
213
|
-
put_bytes(offset, ary.pack(form
|
213
|
+
put_bytes(offset, ary.pack("#{form}*"))
|
214
214
|
end
|
215
215
|
|
216
216
|
define_method("write_array_of_int#{bits}") do |ary|
|
@@ -226,7 +226,7 @@ module GRCommons
|
|
226
226
|
end
|
227
227
|
|
228
228
|
define_method("get_array_of_int#{bits}") do |offset, num|
|
229
|
-
@ptr[offset, bytes * num].unpack(form
|
229
|
+
@ptr[offset, bytes * num].unpack("#{form}*")
|
230
230
|
end
|
231
231
|
|
232
232
|
define_method("read_array_of_int#{bits}") do |num|
|
@@ -244,7 +244,7 @@ module GRCommons
|
|
244
244
|
end
|
245
245
|
|
246
246
|
define_method("put_array_of_uint#{bits}") do |offset, ary|
|
247
|
-
put_bytes(offset, ary.pack(form2
|
247
|
+
put_bytes(offset, ary.pack("#{form2}*"))
|
248
248
|
end
|
249
249
|
|
250
250
|
define_method("write_array_of_uint#{bits}") do |ary|
|
@@ -260,7 +260,7 @@ module GRCommons
|
|
260
260
|
end
|
261
261
|
|
262
262
|
define_method("get_array_of_uint#{bits}") do |offset, num|
|
263
|
-
@ptr[offset, bytes * num].unpack(form2
|
263
|
+
@ptr[offset, bytes * num].unpack("#{form2}*")
|
264
264
|
end
|
265
265
|
|
266
266
|
define_method("read_array_of_uint#{bits}") do |num|
|
@@ -330,12 +330,12 @@ module GRCommons
|
|
330
330
|
|
331
331
|
# added
|
332
332
|
define_method('get_array_of_double') do |offset, num|
|
333
|
-
@ptr[offset, 8 * num].unpack('d
|
333
|
+
@ptr[offset, 8 * num].unpack('d*')
|
334
334
|
end
|
335
335
|
|
336
336
|
# added
|
337
337
|
define_method('get_array_of_float') do |offset, num|
|
338
|
-
@ptr[offset, 4 * num].unpack('f
|
338
|
+
@ptr[offset, 4 * num].unpack('f*')
|
339
339
|
end
|
340
340
|
|
341
341
|
# added
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'fiddley'
|
4
4
|
|
5
5
|
module GRCommons
|
6
6
|
# This module provides functionality common to GR and GR3.
|
@@ -43,7 +43,7 @@ module GRCommons
|
|
43
43
|
if narray?(data)
|
44
44
|
Numo::Int32.cast(data).to_binary
|
45
45
|
else
|
46
|
-
Fiddley::Utils.array2str(:int32, data.to_a.flatten)
|
46
|
+
Fiddley::Utils.array2str(:int32, data.to_a.flatten) # TODO
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -52,7 +52,7 @@ module GRCommons
|
|
52
52
|
if narray?(data)
|
53
53
|
Numo::UInt32.cast(data).to_binary
|
54
54
|
else
|
55
|
-
Fiddley::Utils.array2str(:uint, data.to_a.flatten)
|
55
|
+
Fiddley::Utils.array2str(:uint, data.to_a.flatten) # TODO
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -117,9 +117,9 @@ module GRCommons
|
|
117
117
|
when Hash
|
118
118
|
typ = type.keys[0]
|
119
119
|
len = type.values[0]
|
120
|
-
pt.
|
120
|
+
pt.public_send("read_array_of_#{typ}", len)
|
121
121
|
else
|
122
|
-
pt.
|
122
|
+
pt.public_send("read_#{type}")
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This script was created primarily for debugging purposes.
|
4
|
+
# Note: This script should be isolated.
|
5
|
+
# It should not be loaded when gr_commons/gr_commons is loaded.
|
6
|
+
|
7
|
+
require 'logger'
|
8
|
+
require 'rainbow'
|
9
|
+
require 'awesome_print'
|
10
|
+
|
11
|
+
module GRCommons
|
12
|
+
class << self
|
13
|
+
# Create a new GRLogger
|
14
|
+
# @params out [String]
|
15
|
+
# @return [GRLogger]
|
16
|
+
# @example
|
17
|
+
# require 'gr_commons/gr_logger'
|
18
|
+
# GRCommons.gr_log("log.txt")
|
19
|
+
def gr_log(out = $stderr)
|
20
|
+
GRCommons::GRLogger.new(out)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return the last created GRLogger
|
24
|
+
# @return [GRLogger]
|
25
|
+
def gr_logger
|
26
|
+
GRCommons::GRLogger.logger
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Outputs function calls to GR Framework to a log file.
|
31
|
+
# Mainly used for debugging.
|
32
|
+
# @note This module is for those who want to see low-level function calls in GR.
|
33
|
+
#
|
34
|
+
# = How it works
|
35
|
+
# prepend a module named Inspector to the singular class
|
36
|
+
# of the FFI module. It will inspects the GR function call of the FFI module
|
37
|
+
#
|
38
|
+
# @example
|
39
|
+
# require 'gr_commons/gr_logger'
|
40
|
+
# GRCommons.gr_log("log.txt")
|
41
|
+
class GRLogger < Logger
|
42
|
+
# Return the last created GRLogger
|
43
|
+
def self.logger
|
44
|
+
@@logger ||= GRCommons::GRLogger.new
|
45
|
+
end
|
46
|
+
|
47
|
+
def initialize(out = $stderr)
|
48
|
+
super(out, level: :info)
|
49
|
+
@@logger ||= self
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
if Object.const_defined?(:GR)
|
55
|
+
module GR
|
56
|
+
module FFI
|
57
|
+
module Inspector
|
58
|
+
GR::FFI.ffi_methods.each do |s|
|
59
|
+
define_method(s) do |*args|
|
60
|
+
GRCommons.gr_logger.info "GR::FFI.#{s}\n" + args.ai + "\n"
|
61
|
+
super(*args)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
class << self
|
66
|
+
prepend Inspector
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
if Object.const_defined?(:GR3)
|
73
|
+
module GR3
|
74
|
+
module FFI
|
75
|
+
module Inspector
|
76
|
+
GR3::FFI.ffi_methods.each do |s|
|
77
|
+
define_method(s) do |*args|
|
78
|
+
GRCommons.gr_logger.info "GR3::FFI.#{s}\n" + args.ai + "\n"
|
79
|
+
super(*args)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
class << self
|
84
|
+
prepend Inspector
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
if Object.const_defined?(:GRM)
|
91
|
+
module GRM
|
92
|
+
module FFI
|
93
|
+
module Inspector
|
94
|
+
GRM::FFI.ffi_methods.each do |s|
|
95
|
+
define_method(s) do |*args|
|
96
|
+
GRCommons.gr_logger.info "GRM::FFI.#{s}\n" + args.ai + "\n"
|
97
|
+
super(*args)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
class << self
|
102
|
+
prepend Inspector
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -19,16 +19,16 @@ module GRCommons
|
|
19
19
|
type = ENV['GKSwstype']
|
20
20
|
case type
|
21
21
|
when 'svg'
|
22
|
-
data = File.read(ENV['GKS_FILEPATH']
|
22
|
+
data = File.read("#{ENV['GKS_FILEPATH']}.svg")
|
23
23
|
IRuby.display(data, mime: 'image/svg+xml') if display
|
24
24
|
when 'png', '322', '140'
|
25
|
-
data = File.read(ENV['GKS_FILEPATH']
|
25
|
+
data = File.read("#{ENV['GKS_FILEPATH']}.png")
|
26
26
|
IRuby.display(data, mime: 'image/png') if display
|
27
27
|
when 'jpg', '321', '144'
|
28
|
-
data = File.read(ENV['GKS_FILEPATH']
|
28
|
+
data = File.read("#{ENV['GKS_FILEPATH']}.jpg")
|
29
29
|
IRuby.display(data, mime: 'image/jpeg') if display
|
30
30
|
when 'gif', '130'
|
31
|
-
data = File.read(ENV['GKS_FILEPATH']
|
31
|
+
data = File.read("#{ENV['GKS_FILEPATH']}.gif")
|
32
32
|
IRuby.display(data, mime: 'image/gif') if display
|
33
33
|
when 'webm', 'ogg', 'mp4', 'mov'
|
34
34
|
require 'base64'
|
@@ -37,7 +37,7 @@ module GRCommons
|
|
37
37
|
else
|
38
38
|
"video/#{type}"
|
39
39
|
end
|
40
|
-
data = File.binread(ENV['GKS_FILEPATH']
|
40
|
+
data = File.binread("#{ENV['GKS_FILEPATH']}.#{type}")
|
41
41
|
if display
|
42
42
|
IRuby.display(
|
43
43
|
"<video autoplay controls><source type=\"#{mimespec}\" " \
|
@@ -54,10 +54,11 @@ module GRCommons
|
|
54
54
|
|
55
55
|
def recursive_search(name, base_dir)
|
56
56
|
Dir.chdir(base_dir) do
|
57
|
-
|
57
|
+
path = Dir["**/#{name}"].first # FIXME
|
58
|
+
if path
|
58
59
|
File.expand_path(path)
|
59
60
|
else
|
60
|
-
raise
|
61
|
+
raise "#{name} not found in #{base_dir}"
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
data/lib/gr_commons/version.rb
CHANGED
data/lib/grm/ffi.rb
CHANGED
@@ -42,7 +42,6 @@ module GRM
|
|
42
42
|
# https://github.com/sciapp/gr/blob/master/lib/grm/interaction.h
|
43
43
|
try_extern 'int grm_input(const grm_args_t *input_args)'
|
44
44
|
try_extern 'int grm_get_box(const int x1, const int y1, const int x2, const int y2, const int keep_aspect_ratio, int *x, int *y, int *w, int *h)'
|
45
|
-
try_extern 'grm_input(const grm_args_t *input_args)'
|
46
45
|
try_extern 'grm_tooltip_info_t *grm_get_tooltip(const int, const int)'
|
47
46
|
|
48
47
|
# https://github.com/sciapp/gr/blob/master/lib/grm/net.h
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-gr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: histogram
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: fiddle
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: pry
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,7 +148,6 @@ files:
|
|
162
148
|
- lib/gr/ffi.rb
|
163
149
|
- lib/gr/grbase.rb
|
164
150
|
- lib/gr/plot.rb
|
165
|
-
- lib/gr/plot.rb.md
|
166
151
|
- lib/gr/version.rb
|
167
152
|
- lib/gr3.rb
|
168
153
|
- lib/gr3/ffi.rb
|
@@ -173,6 +158,7 @@ files:
|
|
173
158
|
- lib/gr_commons/fiddley.rb
|
174
159
|
- lib/gr_commons/gr_common_utils.rb
|
175
160
|
- lib/gr_commons/gr_commons.rb
|
161
|
+
- lib/gr_commons/gr_logger.rb
|
176
162
|
- lib/gr_commons/jupyter_support.rb
|
177
163
|
- lib/gr_commons/search_shared_library.rb
|
178
164
|
- lib/gr_commons/version.rb
|
@@ -200,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
186
|
- !ruby/object:Gem::Version
|
201
187
|
version: '0'
|
202
188
|
requirements: []
|
203
|
-
rubygems_version: 3.1.
|
189
|
+
rubygems_version: 3.1.4
|
204
190
|
signing_key:
|
205
191
|
specification_version: 4
|
206
192
|
summary: GR for Ruby
|
data/lib/gr/plot.rb.md
DELETED
@@ -1,172 +0,0 @@
|
|
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; end
|
76
|
-
|
77
|
-
# def plot_line_over oplot_line ?
|
78
|
-
|
79
|
-
# Draw one or more step or staircase plots.
|
80
|
-
def step; end
|
81
|
-
|
82
|
-
# Draw one or more scatter plots.
|
83
|
-
def scatter; end
|
84
|
-
|
85
|
-
# Draw a stem plot.
|
86
|
-
def stem; end
|
87
|
-
|
88
|
-
# Draw a bar plot.
|
89
|
-
def barplot; end
|
90
|
-
|
91
|
-
def hist; end # should be private?
|
92
|
-
|
93
|
-
# Draw a histogram.
|
94
|
-
def histgram; end
|
95
|
-
|
96
|
-
# Draw a polar histogram.
|
97
|
-
def polarhistogram; end
|
98
|
-
|
99
|
-
# Draw a contour plot.
|
100
|
-
def contour; end
|
101
|
-
# GR.contour is already defined in GR::FFI class.
|
102
|
-
|
103
|
-
# Draw a filled contour plot.
|
104
|
-
def contourf; end
|
105
|
-
# GR.contourf is already defined in GR::FFI class.
|
106
|
-
|
107
|
-
# Draw a hexagon binning plot.
|
108
|
-
def hexbin; end
|
109
|
-
# GR.hexbin is already defined in GR::FFI class.
|
110
|
-
|
111
|
-
# Draw a heatmap.
|
112
|
-
def heatmap; end
|
113
|
-
|
114
|
-
def polarheatmap; end
|
115
|
-
|
116
|
-
# Draw a three-dimensional wireframe plot.
|
117
|
-
def wireframe; end
|
118
|
-
|
119
|
-
# Draw a three-dimensional surface plot.
|
120
|
-
def surface; end
|
121
|
-
|
122
|
-
def volume; end
|
123
|
-
|
124
|
-
# Draw one or more three-dimensional line plots.
|
125
|
-
def plot3; end
|
126
|
-
|
127
|
-
# Draw one or more three-dimensional scatter plots.
|
128
|
-
def scatter3; end
|
129
|
-
|
130
|
-
def redraw; end
|
131
|
-
|
132
|
-
def title; end
|
133
|
-
|
134
|
-
def xlabel; end
|
135
|
-
|
136
|
-
def ylabel; end
|
137
|
-
|
138
|
-
def legend; end
|
139
|
-
|
140
|
-
def xlim; end
|
141
|
-
|
142
|
-
def ylim; end
|
143
|
-
|
144
|
-
def savefig; end
|
145
|
-
|
146
|
-
def meshgrid; end # should be private ?
|
147
|
-
|
148
|
-
def peaks; end # should be private ?
|
149
|
-
|
150
|
-
def imshow; end
|
151
|
-
|
152
|
-
# Draw an isosurface.
|
153
|
-
def isosurface; end
|
154
|
-
|
155
|
-
# Draw one or more polar plots.
|
156
|
-
def polar; end
|
157
|
-
|
158
|
-
# Draw a triangular surface plot.
|
159
|
-
def trisurf; end
|
160
|
-
|
161
|
-
# Draw a triangular contour plot.
|
162
|
-
def tricont; end
|
163
|
-
|
164
|
-
def shade; end
|
165
|
-
|
166
|
-
# def set_panzoom ?
|
167
|
-
|
168
|
-
# mainloop
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
```
|