<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
Hi Jason,</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<br>
</div>
<div><font face="Calibri,sans-serif">I am a PyNIO user, not a developer so I can&#8217;t speak to any intentionality, but I am more surprised that your code works with version PyNIO version 1.4.1 than that it does&#8217;t work with the beta. I don&#8217;t have the old version
 anymore, but I am curious the output of type(m) with your original code? I was under the impression that the call&nbsp;</font><span style="color: rgb(0, 0, 0); font-family: Menlo; font-size: 11px;">f.variables[</span><span style="color: rgb(209, 47, 27); font-family: Menlo; font-size: 11px;">&quot;mask</span><font color="#d12f1b" face="Menlo" size="2">&#8221;</font><font face="Menlo" size="2">]&nbsp;</font><font face="Calibri,sans-serif">had
 always produced a Nio object and not a numpy array. Using the beta version&nbsp;I see this:</font></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><br>
</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">m_obj = f.variables[<span style="font-variant-ligatures: no-common-ligatures; color: #d12f1b">&quot;mask&quot;</span>]</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2">print</span> type(m_obj)</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">&gt;&gt; &nbsp;&lt;class 'Nio.NioVariable'&gt;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">m_contents = f.variables[<span style="font-variant-ligatures: no-common-ligatures; color: #d12f1b">&quot;mask&quot;</span>][:]</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2">print</span> type(m_contents)</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;">&gt;&gt; &nbsp;&lt;type 'numpy.ndarray&#8217;&gt;</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><br>
</p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-family: Calibri, sans-serif; font-size: medium;">What does the corresponding code produce with the 1.4.1?</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-family: Calibri, sans-serif; font-size: medium;"><br>
</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-family: Calibri, sans-serif; font-size: medium;">Thanks!</span></p>
<p style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="font-family: Calibri, sans-serif; font-size: medium;">Heather</span></p>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<br>
</div>
<span id="OLK_SRC_BODY_SECTION" style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>&lt;<a href="mailto:pyngl-talk-bounces@ucar.edu">pyngl-talk-bounces@ucar.edu</a>&gt; on behalf of Jason Greenlaw - NOAA Affiliate &lt;<a href="mailto:jason.greenlaw@noaa.gov">jason.greenlaw@noaa.gov</a>&gt;<br>
<span style="font-weight:bold">Date: </span>Tuesday, December 29, 2015 at 10:36 AM<br>
<span style="font-weight:bold">To: </span>&quot;<a href="mailto:pyngl-talk@ucar.edu">pyngl-talk@ucar.edu</a>&quot; &lt;<a href="mailto:pyngl-talk@ucar.edu">pyngl-talk@ucar.edu</a>&gt;<br>
<span style="font-weight:bold">Subject: </span>[pyngl-talk] PyNIO 1.5.0 Beta vs 1.4.1 - NetCDF Variable Access and Numpy<br>
</div>
<div><br>
</div>
<div>
<div>
<div dir="ltr">
<div>Hello,</div>
<div><br>
</div>
<div>I recently installed the 1.5.0 beta versions of PyNGL and PyNIO (using 64-bit binaries for CentOS6) and attempted to run some existing code, but encountered an issue when numpy functions (e.g. numpy.ma.masked_equal()) are called with NioVariable object
 arguments.</div>
<div><br>
</div>
<div>At PyNIO v1.4.1/numpy1.6.1 I was able to do the following:</div>
<div><br>
</div>
<div>
<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div>&gt;&gt;&gt; import Nio</div>
<div>
<div>&gt;&gt;&gt; Nio.__version__</div>
<div>'1.4.1'</div>
</div>
<div>&gt;&gt;&gt; import numpy</div>
<div>&gt;&gt;&gt; numpy.__version__</div>
<div>'1.6.1'</div>
<div>&gt;&gt;&gt; f = Nio.open_file(&quot;<a href="http://glofs.leofs.fields.nowcast.20151229.t12z.nc">glofs.leofs.fields.nowcast.20151229.t12z.nc</a>&quot;, &quot;r&quot;)</div>
<div>&gt;&gt;&gt; m = f.variables[&quot;mask&quot;]</div>
<div>&gt;&gt;&gt; numpy.ma.masked_equal(m, 1.0)</div>
<div>masked_array(data =</div>
<div>&nbsp;[[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;...,</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]],</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mask =</div>
<div>&nbsp;[[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;...,</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]],</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;fill_value = 1.0)</div>
</blockquote>
</div>
<div><br>
</div>
<div><br>
</div>
<div>However at PyNIO 1.5.0 beta/numpy 1.9.2, the numpy function call hangs, and the process begins consuming memory at an exponential rate until the call is interrupted.</div>
<div><br>
</div>
<div>
<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div>
<div>&gt;&gt;&gt; import Nio<br>
</div>
<div>&gt;&gt;&gt; Nio.__version__</div>
<div>'1.5.0-beta'</div>
<div>&gt;&gt;&gt; import numpy</div>
<div>&gt;&gt;&gt; numpy.__version__</div>
<div>'1.9.2'</div>
</div>
<div>
<div>&gt;&gt;&gt; f = Nio.open_file(&quot;<a href="http://glofs.leofs.fields.nowcast.20151229.t12z.nc">glofs.leofs.fields.nowcast.20151229.t12z.nc</a>&quot;, &quot;r&quot;)</div>
<div>&gt;&gt;&gt; m = f.variables[&quot;mask&quot;]</div>
</div>
<div>
<div>&gt;&gt;&gt; numpy.ma.masked_equal(m, 1.0)</div>
<div>^C^CTraceback (most recent call last):</div>
<div>&nbsp; File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;</div>
<div>&nbsp; File &quot;/opt/pyngl/python/lib/python2.7/site-packages/numpy/ma/core.py&quot;, line 1982, in masked_equal</div>
<div>&nbsp; &nbsp; output = masked_where(equal(x, value), x, copy=copy)</div>
<div>&nbsp; File &quot;/opt/pyngl/python/lib/python2.7/site-packages/numpy/ma/core.py&quot;, line 928, in __call__</div>
<div>&nbsp; &nbsp; (da, db) = (getdata(a, subok=False), getdata(b, subok=False))</div>
<div>&nbsp; File &quot;/opt/pyngl/python/lib/python2.7/site-packages/numpy/ma/core.py&quot;, line 667, in getdata</div>
<div>&nbsp; &nbsp; data = np.array(a, copy=False, subok=subok)</div>
<div>&nbsp; File &quot;/opt/pyngl/python/lib/python2.7/site-packages/PyNIO/Nio.py&quot;, line 325, in __getitem__</div>
<div>&nbsp; &nbsp; ret = get_variable(self.file, self.varname, xsel)</div>
<div>&nbsp; File &quot;/opt/pyngl/python/lib/python2.7/site-packages/PyNIO/coordsel.py&quot;, line 60, in get_variable</div>
<div>&nbsp; &nbsp; ret = file.file.variables[varname][xsel]</div>
<div>KeyboardInterrupt</div>
</div>
</blockquote>
<div><br>
</div>
<div>But if I change the call to use numpy indexing, it works:</div>
<br>
<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div>
<div>
<div>&gt;&gt;&gt; m.shape</div>
<div>(24, 81)</div>
</div>
<div>&gt;&gt;&gt; numpy.ma.masked_equal(m[:,:], 1.0)</div>
<div>masked_array(data =</div>
<div>&nbsp;[[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;...,</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]</div>
<div>&nbsp;[0.0 0.0 0.0 ..., 0.0 0.0 0.0]],</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mask =</div>
<div>&nbsp;[[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;...,</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]</div>
<div>&nbsp;[False False False ..., False False False]],</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;fill_value = 1.0)</div>
</div>
</blockquote>
<br>
</div>
<div>Was this change in functionality intentional? &nbsp;</div>
<div><br>
</div>
<div>The NetCDF files I used are available at:</div>
<div><br>
</div>
<div>&nbsp; &nbsp; <a href="ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/nos/prod/glofs.20151229/">
ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/nos/prod/glofs.20151229/</a><br>
</div>
<div><br>
</div>
(directory will change based on date)
<div><br>
</div>
<div>Thanks,</div>
<div>Jason</div>
<div>
<div>
<div class="gmail_signature">
<div dir="ltr">
<div>--</div>
Jason Greenlaw
<div>Software Developer, ERT, Inc.<br>
<div>NOAA/NOS/OCS/CSDL
<div><a href="http://nowcoast.noaa.gov" target="_blank">http://nowcoast.noaa.gov</a></div>
<div><a href="mailto:Jason.Greenlaw@noaa.gov" target="_blank">Jason.Greenlaw@noaa.gov</a></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</span>
</body>
</html>