39
39
import contextlib
40
40
from pathlib import Path
41
41
from urllib .request import urlopen
42
+ from contextlib import nullcontext
42
43
43
44
import pytest
44
45
@@ -432,15 +433,13 @@ def generate_baseline_image(self, item, fig):
432
433
Generate reference figures.
433
434
"""
434
435
compare = get_compare (item )
435
- savefig_kwargs = compare .kwargs .get ('savefig_kwargs' , {})
436
436
437
437
if not os .path .exists (self .generate_dir ):
438
438
os .makedirs (self .generate_dir )
439
439
440
440
baseline_filename = self .generate_filename (item )
441
441
baseline_path = (self .generate_dir / baseline_filename ).absolute ()
442
- fig .savefig (str (baseline_path ), ** savefig_kwargs )
443
-
442
+ self .save_figure (item , fig , baseline_path )
444
443
close_mpl_figure (fig )
445
444
446
445
return baseline_path
@@ -450,13 +449,9 @@ def generate_image_hash(self, item, fig):
450
449
For a `matplotlib.figure.Figure`, returns the SHA256 hash as a hexadecimal
451
450
string.
452
451
"""
453
- compare = get_compare (item )
454
- savefig_kwargs = compare .kwargs .get ('savefig_kwargs' , {})
455
-
456
- ext = self ._file_extension (item )
457
452
458
453
imgdata = io .BytesIO ()
459
- fig . savefig ( imgdata , ** savefig_kwargs )
454
+ self . save_figure ( item , fig , imgdata )
460
455
out = _hash_file (imgdata )
461
456
imgdata .close ()
462
457
@@ -476,13 +471,14 @@ def compare_image_to_baseline(self, item, fig, result_dir, summary=None):
476
471
compare = get_compare (item )
477
472
tolerance = compare .kwargs .get ('tolerance' , 2 )
478
473
savefig_kwargs = compare .kwargs .get ('savefig_kwargs' , {})
474
+ deterministic = compare .kwargs .get ('deterministic' , False )
479
475
480
476
ext = self ._file_extension (item )
481
477
482
478
baseline_image_ref = self .obtain_baseline_image (item , result_dir )
483
479
484
480
test_image = (result_dir / f"result.{ ext } " ).absolute ()
485
- fig . savefig ( str ( test_image ), ** savefig_kwargs )
481
+ self . save_figure ( item , fig , test_image )
486
482
487
483
if ext in ['png' , 'svg' ]: # Use original file
488
484
summary ['result_image' ] = test_image .relative_to (self .results_dir ).as_posix ()
@@ -554,13 +550,43 @@ def load_hash_library(self, library_path):
554
550
with open (str (library_path )) as fp :
555
551
return json .load (fp )
556
552
553
+ def save_figure (self , item , fig , filename ):
554
+ if isinstance (filename , Path ):
555
+ filename = str (filename )
556
+ compare = get_compare (item )
557
+ savefig_kwargs = compare .kwargs .get ('savefig_kwargs' , {})
558
+ deterministic = compare .kwargs .get ('deterministic' , False )
559
+
560
+ if deterministic :
561
+
562
+ # Make sure we don't modify the original dictionary in case is a common
563
+ # object used by different tests
564
+ savefig_kwargs = savefig_kwargs .copy ()
565
+
566
+ if 'metadata' not in savefig_kwargs :
567
+ savefig_kwargs ['metadata' ] = {}
568
+
569
+ ext = self ._file_extension (item )
570
+
571
+ if ext == 'png' :
572
+ extra_metadata = {"Software" : None }
573
+ elif ext == 'pdf' :
574
+ extra_metadata = {"Creator" : None , "Producer" : None , "CreationDate" : None }
575
+ elif ext == 'eps' :
576
+ extra_metadata = {"Creator" : "test" }
577
+ elif ext == 'svg' :
578
+ extra_metadata = {"Date" : None }
579
+
580
+ savefig_kwargs ['metadata' ].update (extra_metadata )
581
+
582
+ fig .savefig (filename , ** savefig_kwargs )
583
+
557
584
def compare_image_to_hash_library (self , item , fig , result_dir , summary = None ):
558
585
hash_comparison_pass = False
559
586
if summary is None :
560
587
summary = {}
561
588
562
589
compare = get_compare (item )
563
- savefig_kwargs = compare .kwargs .get ('savefig_kwargs' , {})
564
590
565
591
ext = self ._file_extension (item )
566
592
@@ -601,7 +627,7 @@ def compare_image_to_hash_library(self, item, fig, result_dir, summary=None):
601
627
602
628
# Save the figure for later summary (will be removed later if not needed)
603
629
test_image = (result_dir / f"result.{ ext } " ).absolute ()
604
- fig . savefig ( str ( test_image ), ** savefig_kwargs )
630
+ self . save_figure ( item , fig , test_image )
605
631
summary ['result_image' ] = test_image .relative_to (self .results_dir ).as_posix ()
606
632
607
633
# Hybrid mode (hash and image comparison)
0 commit comments