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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 62dc3decce3d6a06d06baced44145cb748fb1cc19ef3c4edae473e5a269be154
4
- data.tar.gz: 84678964ad06f9ae9e516041017c928a9c7df5400bca9e902d83b4c24986d6df
3
+ metadata.gz: 19f1abb99ae79c059426a1323e0fb028dd669f556b993cd6b5823263fa19e281
4
+ data.tar.gz: cc84704439ad231e340dc5a2bb4e3fae86496037008102458bf3634ec8dcd10b
5
5
  SHA512:
6
- metadata.gz: b2dc4b1091f9ac03c1feaae507f388662530aa5f737a62dcc12283ab0c51f4a066ea4789482dc0ccee823fe7da6c957c667a572595dfe507c315112869cb0152
7
- data.tar.gz: e7ae67ded7101931ed8a89cef1a298b5c2544aee0272e19a8987d8b883d6c4ca763a324dadc8c0e30b35d3297124096308a075d8d84d151a8ea02d4905985df3
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
+
@@ -1,6 +1,6 @@
1
1
 
2
2
  Gem::Specification::new do |s|
3
- version = "1.0.3"
3
+ version = "1.0.4"
4
4
 
5
5
  files = Dir.glob("**/*") - [
6
6
  Dir.glob("carray-*.gem"),
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
- return NCFile.new(file_id)
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
- @var_id = nc_def_var(@file_id, @name, @type, dim_ids)
507
- if compression != 0
508
- nc_def_var_deflate(@file_id, @var_id, 1, 1, compression)
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
- @attributes.each do |name, value|
514
- value = NCFileWriter.convert_attribute_value(value)
515
- begin
516
- nc_put_att(@file_id, @var_id, name, value)
517
- rescue => e
518
- raise(e.class, e.message + " {#{name}: #{value}}")
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
- @dim_id = nc_def_dim(@file_id, @name, @len)
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
- @attributes.each do |name, value|
732
- value = NCFileWriter.convert_attribute_value(value)
733
- begin
734
- nc_put_att(@file_id, NC_GLOBAL, name, value)
735
- rescue => e
736
- raise(e.class, e.error_message + " {#{name}: #{value}}")
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
- nc_enddef(@file_id)
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.3
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-10 00:00:00.000000000 Z
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: ''