carray-netcdf 1.0.3 → 1.0.4
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/API.md +7 -0
- data/carray-netcdf.gemspec +1 -1
- data/lib/io/netcdf.rb +71 -30
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19f1abb99ae79c059426a1323e0fb028dd669f556b993cd6b5823263fa19e281
|
4
|
+
data.tar.gz: cc84704439ad231e340dc5a2bb4e3fae86496037008102458bf3634ec8dcd10b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd1842a3d39729174629d8912ead0714b64c917dc99c888d750419edf5cf6c1e15e33d6f1b6ec8ce0557565bffa8588186ca9b2b07b6b27ceef54d8d2be14495
|
7
|
+
data.tar.gz: fea6389e64aa7728dfa71bc88ad8267af0749d2e419085f50c22cdc47b64bdf806c6b6e0109d71f3907e4f582dd73a8ab26093e6d69e5c92a5eeeaa234802224
|
data/API.md
CHANGED
@@ -261,3 +261,10 @@ If you want the detailed controling to create netcdf, use nc_function API.
|
|
261
261
|
|
262
262
|
nc = NCFile.open("test.nc")
|
263
263
|
nc.definition ### return definition Hash
|
264
|
+
|
265
|
+
|
266
|
+
### template with CDL
|
267
|
+
|
268
|
+
out = NCFileWrite.new("test.nc", template: cdl_text)
|
269
|
+
|
270
|
+
|
data/carray-netcdf.gemspec
CHANGED
data/lib/io/netcdf.rb
CHANGED
@@ -365,7 +365,16 @@ class NCFile < NCObject
|
|
365
365
|
|
366
366
|
def self.open (filename)
|
367
367
|
file_id = NC.open(filename)
|
368
|
-
|
368
|
+
if block_given?
|
369
|
+
begin
|
370
|
+
nc = NCFile.new(file_id)
|
371
|
+
yield(nc)
|
372
|
+
ensure
|
373
|
+
nc.close
|
374
|
+
end
|
375
|
+
else
|
376
|
+
return NCFile.new(file_id)
|
377
|
+
end
|
369
378
|
end
|
370
379
|
|
371
380
|
def initialize (file_id)
|
@@ -380,6 +389,10 @@ class NCFile < NCObject
|
|
380
389
|
|
381
390
|
attr_reader :file_id, :dims, :vars
|
382
391
|
|
392
|
+
def close ()
|
393
|
+
nc_close(@file_id)
|
394
|
+
end
|
395
|
+
|
383
396
|
def parse_metadata ()
|
384
397
|
ndims = nc_inq_ndims(@file_id)
|
385
398
|
ndims.times do |i|
|
@@ -484,7 +497,7 @@ class NCFileWriter
|
|
484
497
|
"double" => NC_DOUBLE,
|
485
498
|
}
|
486
499
|
|
487
|
-
def initialize (ncfile, name, definition, compression = 0)
|
500
|
+
def initialize (ncfile, name, definition, compression = 0, define_mode = true)
|
488
501
|
@ncfile = ncfile
|
489
502
|
@file_id = ncfile.file_id
|
490
503
|
@name = name
|
@@ -503,19 +516,25 @@ class NCFileWriter
|
|
503
516
|
else
|
504
517
|
dim_ids = []
|
505
518
|
end
|
506
|
-
|
507
|
-
|
508
|
-
|
519
|
+
if define_mode
|
520
|
+
@var_id = nc_def_var(@file_id, @name, @type, dim_ids)
|
521
|
+
if compression != 0
|
522
|
+
nc_def_var_deflate(@file_id, @var_id, 1, 1, compression)
|
523
|
+
end
|
524
|
+
else
|
525
|
+
@var_id = nc_inq_varid(@file_id, @name)
|
509
526
|
end
|
510
527
|
@attributes = definition.dup
|
511
528
|
@attributes.delete("type")
|
512
529
|
@attributes.delete("dim")
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
530
|
+
if define_mode
|
531
|
+
@attributes.each do |name, value|
|
532
|
+
value = NCFileWriter.convert_attribute_value(value)
|
533
|
+
begin
|
534
|
+
nc_put_att(@file_id, @var_id, name, value)
|
535
|
+
rescue => e
|
536
|
+
raise(e.class, e.message + " {#{name}: #{value}}")
|
537
|
+
end
|
519
538
|
end
|
520
539
|
end
|
521
540
|
@attributes.freeze
|
@@ -598,12 +617,16 @@ class NCFileWriter
|
|
598
617
|
|
599
618
|
include NC
|
600
619
|
|
601
|
-
def initialize (ncfile, name, len)
|
620
|
+
def initialize (ncfile, name, len, define_mode = true)
|
602
621
|
@ncfile = ncfile
|
603
622
|
@file_id = ncfile.file_id
|
604
623
|
@name = name
|
605
624
|
@len = len
|
606
|
-
|
625
|
+
if define_mode
|
626
|
+
@dim_id = nc_def_dim(@file_id, @name, @len)
|
627
|
+
else
|
628
|
+
@dim_id = nc_inq_dimid(@file_id, @name)
|
629
|
+
end
|
607
630
|
end
|
608
631
|
|
609
632
|
attr_reader :name, :dim_id
|
@@ -623,18 +646,32 @@ class NCFileWriter
|
|
623
646
|
"double" => NC_DOUBLE,
|
624
647
|
}
|
625
648
|
|
626
|
-
def initialize (file, mode = 0, compression: 0)
|
627
|
-
if compression > 0
|
628
|
-
@file_id = nc_create(file, mode|NC_NETCDF4)
|
629
|
-
else
|
630
|
-
@file_id = nc_create(file, mode)
|
631
|
-
end
|
649
|
+
def initialize (file, mode = 0, template: nil, compression: 0)
|
632
650
|
@dims = []
|
633
651
|
@name2dim = {}
|
634
652
|
@vars = []
|
635
653
|
@name2var = {}
|
636
654
|
@compression = compression
|
637
|
-
@attributes = nil
|
655
|
+
@attributes = nil
|
656
|
+
if template.nil?
|
657
|
+
if compression > 0
|
658
|
+
@file_id = nc_create(file, mode|NC_NETCDF4)
|
659
|
+
else
|
660
|
+
@file_id = nc_create(file, mode)
|
661
|
+
end
|
662
|
+
else
|
663
|
+
IO.popen("ncgen -o #{file}", "w") { |io|
|
664
|
+
io.write(template)
|
665
|
+
}
|
666
|
+
if compression > 0
|
667
|
+
@file_id = nc_open(file, mode|NC_WRITE|NC_SHARE|NC_NETCDF4)
|
668
|
+
else
|
669
|
+
@file_id = nc_open(file, mode|NC_WRITE|NC_SHARE)
|
670
|
+
end
|
671
|
+
NCFile.open(file) {|nc|
|
672
|
+
define nc.definition, define_mode: false
|
673
|
+
}
|
674
|
+
end
|
638
675
|
end
|
639
676
|
|
640
677
|
attr_reader :file_id
|
@@ -713,34 +750,38 @@ class NCFileWriter
|
|
713
750
|
return value
|
714
751
|
end
|
715
752
|
|
716
|
-
def define (definition)
|
753
|
+
def define (definition, define_mode: true)
|
717
754
|
definition = normalize_definition(definition)
|
718
755
|
check_definition(definition)
|
719
756
|
definition["dimensions"].each do |name, len|
|
720
|
-
dim = Dim.new(self, name, len.to_i)
|
757
|
+
dim = Dim.new(self, name, len.to_i, define_mode)
|
721
758
|
@dims.push dim
|
722
759
|
@name2dim[name] = dim
|
723
760
|
end
|
724
761
|
definition["variables"].each do |name, info|
|
725
|
-
var = Var.new(self, name, info, @compression)
|
762
|
+
var = Var.new(self, name, info, @compression, define_mode)
|
726
763
|
@vars.push var
|
727
764
|
@name2var[name] = var
|
728
765
|
end
|
729
766
|
if definition.has_key?("attributes")
|
730
767
|
@attributes = definition["attributes"]
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
768
|
+
if define_mode
|
769
|
+
@attributes.each do |name, value|
|
770
|
+
value = NCFileWriter.convert_attribute_value(value)
|
771
|
+
begin
|
772
|
+
nc_put_att(@file_id, NC_GLOBAL, name, value)
|
773
|
+
rescue => e
|
774
|
+
raise(e.class, e.error_message + " {#{name}: #{value}}")
|
775
|
+
end
|
737
776
|
end
|
738
777
|
end
|
739
778
|
@attributes.freeze
|
740
779
|
else
|
741
780
|
@attributes = {}.freeze
|
742
781
|
end
|
743
|
-
|
782
|
+
if define_mode
|
783
|
+
nc_enddef(@file_id)
|
784
|
+
end
|
744
785
|
end
|
745
786
|
|
746
787
|
def dim (name)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carray-netcdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroki Motoyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: " Extension for manipulating NetCDF3 file with CArray\n"
|
14
14
|
email: ''
|