@@ -483,6 +483,7 @@ def compress_numpy_and_compare_data(n_samples, min_iline, n_ilines, min_xline, n
483483 # print(np.max(np.abs(reader.read_volume()-array)/np.abs(array)))
484484 assert np .allclose (reader .ilines , ilines , rtol = rtol )
485485 assert np .allclose (reader .xlines , xlines , rtol = rtol )
486+ assert np .allclose (reader .zslices , samples , rtol = rtol )
486487 assert np .allclose (reader .read_volume (), array , rtol = rtol )
487488 assert 20 == reader .get_file_source_code ()
488489
@@ -507,6 +508,7 @@ def test_compress_numpy_data(tmp_path):
507508
508509
509510def compress_stream_and_compare_data (
511+ min_sample ,
510512 n_samples ,
511513 min_iline ,
512514 n_ilines ,
@@ -518,12 +520,13 @@ def compress_stream_and_compare_data(
518520 blockshape = (4 , 4 , - 1 ),
519521):
520522
521- out_sgz = os .path .join (str (tmp_path ), "from-stream.sgz" )
523+ out_sgz_lower_samples_precision = os .path .join (str (tmp_path ), "from-stream-lower-samples-precision.sgz" )
524+ out_sgz_higher_samples_precision = os .path .join (str (tmp_path ), "from-stream-higher-samples-precision.sgz" )
522525 out_sgz_numpy = os .path .join (str (tmp_path ), "from-numpy.sgz" )
523526 out_sgz_no_headers = os .path .join (str (tmp_path ), "from-stream_no_headers.sgz" )
524527
525528 array , ilines , xlines , samples = generate_fake_seismic (
526- n_ilines , n_xlines , n_samples , min_iline = min_iline , min_xline = min_xline
529+ n_ilines , n_xlines , n_samples , min_iline = min_iline , min_xline = min_xline , min_sample = min_sample
527530 )
528531
529532 trace_headers = {
@@ -534,9 +537,10 @@ def compress_stream_and_compare_data(
534537 xlines , (n_ilines , n_xlines )
535538 ),
536539 }
540+ lower_samples_precision = samples .astype (int )
537541
538542 with StreamConverter (
539- out_sgz ,
543+ out_sgz_lower_samples_precision ,
540544 ilines = ilines ,
541545 xlines = xlines ,
542546 samples = samples ,
@@ -548,10 +552,31 @@ def compress_stream_and_compare_data(
548552 end = min (i + blockshape [0 ], array .shape [0 ])
549553 chunk = array [i :end , :, :]
550554 converter .write (chunk )
555+ with SgzReader (out_sgz_lower_samples_precision ) as reader :
556+ assert np .allclose (reader .ilines , ilines , rtol = rtol )
557+ assert np .allclose (reader .xlines , xlines , rtol = rtol )
558+ assert np .allclose (reader .zslices , lower_samples_precision , rtol = rtol )
559+ assert np .allclose (reader .read_volume (), array , rtol = rtol )
560+ assert 20 == reader .get_file_source_code ()
551561
552- with SgzReader (out_sgz ) as reader :
562+ with StreamConverter (
563+ out_sgz_higher_samples_precision ,
564+ ilines = ilines ,
565+ xlines = xlines ,
566+ samples = samples ,
567+ bits_per_voxel = bits_per_voxel ,
568+ blockshape = blockshape ,
569+ trace_headers = trace_headers ,
570+ use_higher_samples_precision = True
571+ ) as converter :
572+ for i in range (0 , array .shape [0 ], blockshape [0 ]):
573+ end = min (i + blockshape [0 ], array .shape [0 ])
574+ chunk = array [i :end , :, :]
575+ converter .write (chunk )
576+ with SgzReader (out_sgz_higher_samples_precision ) as reader :
553577 assert np .allclose (reader .ilines , ilines , rtol = rtol )
554578 assert np .allclose (reader .xlines , xlines , rtol = rtol )
579+ assert np .allclose (reader .zslices , samples , rtol = rtol )
555580 assert np .allclose (reader .read_volume (), array , rtol = rtol )
556581 assert 20 == reader .get_file_source_code ()
557582
@@ -563,6 +588,7 @@ def compress_stream_and_compare_data(
563588 bits_per_voxel = bits_per_voxel ,
564589 blockshape = blockshape ,
565590 trace_headers = trace_headers ,
591+ use_higher_samples_precision = False
566592 ) as converter :
567593 for i in range (0 , array .shape [0 ], blockshape [0 ]):
568594 end = min (i + blockshape [0 ], array .shape [0 ])
@@ -572,6 +598,7 @@ def compress_stream_and_compare_data(
572598 with SgzReader (out_sgz_no_headers ) as reader :
573599 assert np .allclose (reader .ilines , ilines , rtol = rtol )
574600 assert np .allclose (reader .xlines , xlines , rtol = rtol )
601+ assert np .allclose (reader .zslices , lower_samples_precision , rtol = rtol )
575602 assert np .allclose (reader .read_volume (), array , rtol = rtol )
576603 assert 20 == reader .get_file_source_code ()
577604 stream_hash = reader .get_source_data_hash ()
@@ -586,14 +613,15 @@ def compress_stream_and_compare_data(
586613
587614
588615def test_compress_stream (tmp_path ):
589- compress_stream_and_compare_data (16 , 0 , 8 , 8 , 12 , tmp_path , 8 , 1e-3 )
590- compress_stream_and_compare_data (801 , 0 , 8 , 8 , 12 , tmp_path , 8 , 1e-3 )
591- compress_stream_and_compare_data (512 , 0 , 9 , 8 , 12 , tmp_path , 8 , 1e-3 )
592- compress_stream_and_compare_data (512 , 0 , 8 , 8 , 13 , tmp_path , 8 , 1e-3 )
616+ compress_stream_and_compare_data (0 , 16 , 0 , 8 , 8 , 12 , tmp_path , 8 , 1e-3 )
617+ compress_stream_and_compare_data (2.5 , 16 , 0 , 8 , 8 , 12 , tmp_path , 8 , 1e-3 )
618+ compress_stream_and_compare_data (0 , 801 , 0 , 8 , 8 , 12 , tmp_path , 8 , 1e-3 )
619+ compress_stream_and_compare_data (0 , 512 , 0 , 9 , 8 , 12 , tmp_path , 8 , 1e-3 )
620+ compress_stream_and_compare_data (0 , 512 , 0 , 8 , 8 , 13 , tmp_path , 8 , 1e-3 )
593621
594622 compress_stream_and_compare_data (
595- 17 , 0 , 65 , 8 , 65 , tmp_path , 8 , 1e-2 , blockshape = (32 , 32 , 4 )
623+ 0 , 17 , 0 , 65 , 8 , 65 , tmp_path , 8 , 1e-2 , blockshape = (32 , 32 , 4 )
596624 )
597625 compress_stream_and_compare_data (
598- 801 , 0 , 9 , 8 , 13 , tmp_path , 8 , 1e-2 , blockshape = (16 , 16 , 16 )
626+ 0 , 801 , 0 , 9 , 8 , 13 , tmp_path , 8 , 1e-2 , blockshape = (16 , 16 , 16 )
599627 )
0 commit comments