From e077c13bafd0d139dd2816acdad86b10c38b7a48 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Fri, 1 Jul 2016 23:36:51 -0400 Subject: [PATCH] FIX: handle non-native endian images In cbook.safe_mask_invalid also ensure that the data is in native byte order. close #6671 closes #6394 --- lib/matplotlib/cbook.py | 7 ++++++ .../test_image/imshow_endianess.png | Bin 0 -> 5320 bytes lib/matplotlib/tests/test_image.py | 21 +++++++++++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_image/imshow_endianess.png diff --git a/lib/matplotlib/cbook.py b/lib/matplotlib/cbook.py index 8fef27ac0165..ab0cc8edec27 100644 --- a/lib/matplotlib/cbook.py +++ b/lib/matplotlib/cbook.py @@ -1505,6 +1505,13 @@ def issubclass_safe(x, klass): def safe_masked_invalid(x, copy=False): x = np.array(x, subok=True, copy=copy) + if not x.dtype.isnative: + # Note that the argument to `byteswap` is 'inplace', + # thus if we have already made a copy, do the byteswap in + # place, else make a copy with the byte order swapped. + # Be explicit that we are swapping the byte order of the dtype + x = x.byteswap(copy).newbyteorder('S') + try: xm = np.ma.masked_invalid(x, copy=False) xm.shrink_mask() diff --git a/lib/matplotlib/tests/baseline_images/test_image/imshow_endianess.png b/lib/matplotlib/tests/baseline_images/test_image/imshow_endianess.png new file mode 100644 index 0000000000000000000000000000000000000000..148acf1251743f8b2f5a1d6916854c31f0bcc76c GIT binary patch literal 5320 zcmeHLSyU5Q0xgghTp&75tF)RpdPeN=ptPtUTU?NcG+|^6s0cwt5NL=_!kP})FgC5C zk-?2!$uxnWNehG}1Tfkv3Q0hguq6>$0whI*kOUHwOa;1s`pi#{%p5Y!B)?MdZ+Mk529WgYU?Ls|R41?CR_5 z?$b(^b+-pu6KCw361zc@y{DOeh1U5qE;4(D;Nl=kEFK^Y*Rr!tN8s`Ja_GNIi+bIl z!fvmb1putrybk~_tu-+PfS)Z^0Ki6%OVG2gOw9n`hm{)vU|%|50sv zFr2B;4>J3=eZY>_+fD5zOKrCCmnUNLRmD!^n-~fUxfYC4_FtB_a}>#$Sw~9JUwoDGhbfBtMd$6KI;?lGS`P3pcuRWi?!CJ$*?laloNR5LTuHoCYrL^q4 zfOVs+qud?K4MDU-wq&aNvUYQz1C5^K`UiPSwg6(c@JO?NCXRs{MCc^TY2#fcwQ5tU*ows78l@YD0fAd9#x0tiOhz zn3||0+r?_pdEaO)&UPrZrP=9{iY8V)s+46&k0tR5Iz0`lP2T*!h~T}TUi0AEIKP6@ z+eAgi31qcWnz5J6sw6l%$vNistqD3ZwNOzcC{xgAdo($%32H0Z6<%#6%h_p1__;r8 z4P~~f^W`!lTF!!h$yzT?E}1`tA7zq&N}@EtKO)x9iQryixCCJJV`scms9lgIKlZ|@mdCBEFUXm`}HSSD3couN(dpA13jMq%x5%|&Tv3DC( zpB^t>)lK~ zG5eb%Nq}12IXqV1_>dz^3gJ;S2%kd|ZheDwo`V4y2@wTm-kN~HM4E>^TUE{<)tpjU zKcaoHzPWEe#|e2zB37K3oz_O8r1{KW0Qi~#F8WDG#u|dad?_vgY;4-mo^hAVBy0+{ zVJUQo4q+1xmk>1|itwVoD*JWZAzjhDE5(*jZy<%LuP$wf7MEl)MkT3aaIMNT7;e(1WD*!X-y5Y z@nOy~b4VCtqGI9*qPpxW5HWJD@^XTj46aW-lI@*lJ13%3{V9;omoH!2a1ei6cpmaL2_OO2WkLFliGu@S9QhC+G^o=n>mM7Hf#9bXEsAdEaqey6f~m z)gz8eZrZeTGY||3y19z9JUA`Dg~VR%gAh;lyzWp-Cj}zt^}VXCE&uQoQ3eLL9sjsx z%$(w`vUeEk5@j_$gsmCggzuRWH6I{|-UcI`a08ivMzL+HMYu~qh&w!DQoo;(9bU@} z>#`K(Gvu+qhxpch+O{&c0-STuc1B|OmffKEZ>dS+!SZN=D0w_Eou>_s!4gD0FX%@5 z)K8_3u&H6=?h@ULK3`*JaiC7#m|Kc3RXSvNf{=_rWZ@g7l7*i(n~&Ax+%O<@kuCtu3XCu^k~U)WA-q>&XsX zScQ~W1f@`@b}P;7Fp52+7V4kRJd=NT2yRXna^*phzb|zf5qP_1aq4~yMmN~g(;`S> zmmNjM6JtiCbSvc8W8v{YYfUx>RI(;`?*$l)Elgt!(&TX%6!SA{BbBYUVc*wBlk5#@ zi@K8QzbpodRDH($Exfk@JVDHr5RyWt)$*+(Eh7!5@lksVx+o2O#r$HUf8'), **kwargs) + + +if __name__ == '__main__': + nose.runmodule(argv=['-s', '--with-doctest'], exit=False)