1- from io import Strinunmap
1+ from io import StringIO
22
33from PIL import Image
44import numpy as np
@@ -12,49 +12,47 @@ def kernel(sizex, sizey):
1212 g = np .exp (- 0.333 * (x ** 2 / float (sizex )+ y ** 2 / float (sizey )))
1313 return g / g .sum ()
1414
15- def make_map (n , nx = 64 , ny = 64 , kernel_size = None , seed = None ):
16- imgs = []
17- for i in range (n ):
18- rng = np .random .RandomState (seed = seed )
19- if kernel_size is None :
20- kx , ky = (7 , 7 )
21- else :
22- kx , ky = kernel_size
23- f = kernel (kx , ky )
24- z = rng .rand (nx + 2 * kx , ny + 2 * ky )
25-
26- z = scipy .signal .convolve (z , f , mode = 'valid' )
27- z = (z - z .min ())/ (z .max () - z .min ())
28- imgs .append (z )
15+ def make_map (nx = 64 , ny = 64 , kernel_size = None , seed = None ):
16+ rng = np .random .RandomState (seed = seed )
17+ if kernel_size is None :
18+ kx , ky = (7 , 7 )
19+ else :
20+ kx , ky = kernel_size
21+ f = kernel (kx , ky )
22+ z = rng .rand (nx + 2 * kx , ny + 2 * ky )
23+ z = scipy .signal .convolve (z , f , mode = 'valid' )
24+ z = (z - z .min ())/ (z .max () - z .min ())
2925
30- return np . stack ( imgs )
26+ return z
3127
3228def get_cbar (cmap , n = 32 , pixels = 5 ):
33- arr = cm .get_cmap ()(np .arange (0 , n , 1 )/ (n - 1 ))[..., :3 ]
29+ arr = cm .get_cmap (cmap )(np .arange (0 , n , 1 )/ (n - 1 ))[..., :3 ]
3430 return np .tile (arr , (pixels , 1 )).reshape (pixels , n , 3 )
3531
3632def make_image_and_cbar (cmap , seed = None ):
37- data = np .squeeze (make_map (1 ))
38- cmap = cm .get_cmap (cmap )
39- cbar = get_cbar (cmap , 128 , pixels = 5 )
40- return cmap (data )[..., :3 ], cbar
33+ data = make_map ()
34+ c = cm .get_cmap (cmap )
35+ return c (data )[..., :3 ], get_cbar (cmap , 256 , pixels = 5 )
4136
4237
4338def test_unmap ():
4439 """Test the basics.
4540 """
4641 img , cbar = make_image_and_cbar ('jet' , seed = 42 )
4742
43+ # Add some white pixels as 'background'; will become NaNs.
44+ img [:3 , :3 , :] = 1
45+
4846 # Using a cbar image.
49- data = unmap .unmap (img , cmap = cbar , threshold = 0.05 , vrange = (100 , 200 ), background = ( 1 , 1 , 1 ), levels = 256 )
50- assert data .shape == (231 , 231 )
47+ data = unmap .unmap (img , cmap = cbar , vrange = (100 , 200 ))
48+ assert data .shape == (64 , 64 )
5149 assert np .nanmax (data ) == 200
52- assert np .nanmean (data ) - 150.60721435278933 < 1e-6
50+ assert np .nanmean (data ) - 161.4341107536765 < 1e-6
5351 assert np .any (np .isnan (data ))
5452
5553 # Using a matplotlib cmap.
56- data = unmap .unmap (img , cmap = 'jet' , threshold = 0.05 , vrange = (200 , 300 ))
57- assert np .nanmean (data ) - 250.6121076492208 < 1e-6
54+ data = unmap .unmap (img , cmap = 'jet' , vrange = (200 , 300 ))
55+ assert np .nanmean (data ) - 261.4341107536765 < 1e-6
5856
5957
6058def is_greyscale ():
0 commit comments