This is an automated email from the git hooks/post-receive script. a_valentino-guest pushed a commit to branch master in repository pyresample.
commit dceb6d4bccc188225f48e8a96c283a2d36e97fe5 Author: Antonio Valentino <[email protected]> Date: Sat Oct 29 07:22:22 2016 +0000 New upstream version 1.2.6 --- README.md | 2 + appveyor.yml | 15 ++++++- appveyor/missing-headers.ps1 | 53 +++++++++++++++++++++++++ changelog.rst | 45 +++++++++++++++++++++ pyresample/geometry.py | 87 +++++++++++++++++++++++++++++++++++++++++ pyresample/test/test_kd_tree.py | 16 ++++---- pyresample/version.py | 2 +- 7 files changed, 209 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index bf849cf..d1e5fed 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ [](https://travis-ci.org/pytroll/pyresample) +[](https://ci.appveyor.com/project/davidh-ssec/pyresample-ly2q0/branch/master) + Python package for geospatial resampling ---------------------------------------- diff --git a/appveyor.yml b/appveyor.yml index 901e81a..3216a64 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,6 +4,8 @@ environment: # /E:ON and /V:ON options are not enabled in the batch script intepreter # See: http://stackoverflow.com/a/13751649/163740 CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_compiler.cmd" + # Don't build pykdtree with openmp because it isn't supported in appveyor's compilers + USE_OMP: "0" matrix: - PYTHON: "C:\\Python27_32" @@ -46,6 +48,10 @@ install: # install miniconda with the powershell script install.ps1 - "powershell ./appveyor/install.ps1" + # install missing headers that aren't included with MSVC 2008 + # https://github.com/omnia-md/conda-recipes/pull/524 + # Needed for pykdtree to compile on appveyor's Windows machines + - "powershell ./appveyor/missing-headers.ps1" # Prepend newly installed Python to the PATH of this build (this cannot be # done from inside the powershell script as it would require to restart @@ -61,8 +67,8 @@ install: # pip will build them from source using the MSVC compiler matching the # target Python version and architecture - "conda update --yes conda" - - "conda config --add channels https://conda.anaconda.org/ioos" - - "conda create -q --yes -n test python=%PYTHON_VERSION% basemap sphinx pyproj scipy" + - "conda config --add channels conda-forge" + - "conda create -q --yes -n test python=%PYTHON_VERSION% basemap-data-hires sphinx pyproj scipy" - "activate test" - "pip install coveralls" # Try to install pykdtree, but continue on if we can't @@ -87,3 +93,8 @@ artifacts: #on_success: # - TODO: upload the content of dist/*.whl to a public wheelhouse # + +notifications: + - provider: Slack + incoming_webhook: + secure: 7bEOYCIxHE5PkCF156zjxbJIeKkv7UpZulyn+Di09jqDlpvZjR0Qj3a1LK9AOjgwWgaQYbeI4BEYEdeq7pPxDs9snK8qvvbFDbuLAzg+HEQ= diff --git a/appveyor/missing-headers.ps1 b/appveyor/missing-headers.ps1 new file mode 100644 index 0000000..44e1b90 --- /dev/null +++ b/appveyor/missing-headers.ps1 @@ -0,0 +1,53 @@ +function InstallMissingHeaders () { + # Visual Studio 2008 is missing stdint.h, but you can just download one + # from the web. + # http://stackoverflow.com/questions/126279/c99-stdint-h-header-and-ms-visual-studio + $webclient = New-Object System.Net.WebClient + + $include_dirs = @("C:\Program Files\Microsoft SDKs\Windows\v7.0\Include", + "C:\Program Files\Microsoft SDKs\Windows\v7.1\Include", + "C:\Users\appveyor\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\include", + "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include", + "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include") + + Foreach ($include_dir in $include_dirs) { + $urls = @(@("https://raw.githubusercontent.com/chemeris/msinttypes/master/stdint.h", "stdint.h"), + @("https://raw.githubusercontent.com/chemeris/msinttypes/master/inttypes.h", "inttypes.h")) + + Foreach ($i in $urls) { + $url = $i[0] + $filename = $i[1] + + $filepath = "$include_dir\$filename" + if (Test-Path $filepath) { + Write-Host $filename "already exists in" $include_dir + continue + } + + Write-Host "Downloading remedial " $filename " from" $url "to" $filepath + $retry_attempts = 2 + for($i=0; $i -lt $retry_attempts; $i++){ + try { + $webclient.DownloadFile($url, $filepath) + break + } + Catch [Exception]{ + Start-Sleep 1 + } + } + + if (Test-Path $filepath) { + Write-Host "File saved at" $filepath + } else { + # Retry once to get the error message if any at the last try + $webclient.DownloadFile($url, $filepath) + } + } + } +} + +function main() { + InstallMissingHeaders +} + +main diff --git a/changelog.rst b/changelog.rst index ac9516d..8dc4a9e 100644 --- a/changelog.rst +++ b/changelog.rst @@ -6,6 +6,51 @@ Changelog - Update changelog. [Martin Raspaud] +- Bump version: 1.2.5 → 1.2.6. [Martin Raspaud] + +- Pre master (#44) [Radar, Satellite and Nowcasting Division] + + * add a subset function to the geometry file + + Often subsets of the SEVIRI disk are save in + SEVIRI products. This new function calculated the + area extent needed for the specification of the area, + starting from the SEVIRI full disk area object. + + * added the get_area_extent_for_subset function + + to the geometry.py file + + * new function for getting area subsets + + * new function get_xy_from_proj_coordinates + + retrieve the pixel indices x and y + from the map projection coordinates in meter + (very similar to get_xy_from_lonlat) + + * removed pyc file, that should not be in the git repository + + +- Add appveyor status badge to README. [davidh-ssec] + +- Merge remote-tracking branch 'deni90/master' into pre-master-davidh. + [davidh-ssec] + +- Fix test_custom_uncert and test_gauss_uncert for mips* [Daniel + Knezevic] + +- Fix pykdtree install on appveyor by turning off OpenMP. [davidh-ssec] + +- Update appveyor config to install missing headers required by + pykdtree. [davidh-ssec] + +- Change appveyor to use conda-forge instead of IOOS. [davidh-ssec] + +- Add slack notifications from appveyor. [davidh-ssec] + +- Update changelog. [Martin Raspaud] + - Bump version: 1.2.4 → 1.2.5. [Martin Raspaud] - Fix EWA fornav for integer data and add test. [davidh-ssec] diff --git a/pyresample/geometry.py b/pyresample/geometry.py index 4c9711c..3fda9f3 100644 --- a/pyresample/geometry.py +++ b/pyresample/geometry.py @@ -106,6 +106,37 @@ class BaseDefinition(object): return not self.__eq__(other) + def get_area_extent_for_subset(self, row_LR, col_LR, row_UL, col_UL): + """Retrieves area_extent for a subdomain + rows are counted from upper left to lower left + columns are counted from upper left to upper right + + :Parameters: + row_LR : int + row of the lower right pixel + col_LR : int + col of the lower right pixel + row_UL : int + row of the upper left pixel + col_UL : int + col of the upper left pixel + + :Returns: + area_extent : list + Area extent as a list (LL_x, LL_y, UR_x, UR_y) of the subset + + :Author: + Ulrich Hamann + """ + + (a,b) = self.get_proj_coords( data_slice=(row_LR,col_LR) ) + a = a - 0.5*self.pixel_size_x + b = b - 0.5*self.pixel_size_y + (c,d) = self.get_proj_coords( data_slice=(row_UL,col_UL) ) + c = c + 0.5*self.pixel_size_x + d = d + 0.5*self.pixel_size_y + + return (a,b,c,d) def get_lonlat(self, row, col): """Retrieve lon and lat of single pixel @@ -667,6 +698,62 @@ class AreaDefinition(BaseDefinition): raise ValueError('Point outside area:( %f %f)' % (x__, y__)) return int(x__), int(y__) + + def get_xy_from_proj_coords(self, xm_, ym_): + """Retrieve closest x and y coordinates (column, row indices) for a + location specified with projection coordinates (xm_,ym_) in meters. + A ValueError is raised, if the return point is outside the area domain. If + xm_,ym_ is a tuple of sequences of projection coordinates, a tuple of + masked arrays are returned. + + :Input: + xm_ : point or sequence (list or array) of x-coordinates in m (map projection) + ym_ : point or sequence (list or array) of y-coordinates in m (map projection) + + :Returns: + (x, y) : tuple of integer points/arrays + """ + + if isinstance(xm_, list): + xm_ = np.array(xm_) + if isinstance(ym_, list): + ym_ = np.array(ym_) + + if ((isinstance(xm_, np.ndarray) and + not isinstance(ym_, np.ndarray)) or + (not isinstance(xm_, np.ndarray) and + isinstance(ym_, np.ndarray))): + raise ValueError("Both projection coordinates xm_ and ym_ needs to be of " + + "the same type and have the same dimensions!") + + if isinstance(xm_, np.ndarray) and isinstance(ym_, np.ndarray): + if xm_.shape != ym_.shape: + raise ValueError("projection coordinates xm_ and ym_ is not of the same shape!") + + upl_x = self.area_extent[0] + upl_y = self.area_extent[3] + xscale = abs(self.area_extent[2] - + self.area_extent[0]) / float(self.x_size) + yscale = abs(self.area_extent[1] - + self.area_extent[3]) / float(self.y_size) + + x__ = (xm_ - upl_x) / xscale + y__ = (upl_y - ym_) / yscale + + if isinstance(x__, np.ndarray) and isinstance(y__, np.ndarray): + mask = (((x__ < 0) | (x__ > self.x_size)) | + ((y__ < 0) | (y__ > self.y_size))) + return (np.ma.masked_array(x__.astype('int'), mask=mask, + fill_value=-1), + np.ma.masked_array(y__.astype('int'), mask=mask, + fill_value=-1)) + else: + if ((x__ < 0 or x__ > self.x_size) or + (y__ < 0 or y__ > self.y_size)): + raise ValueError('Point outside area:( %f %f)' % (x__, y__)) + return int(x__), int(y__) + + def get_lonlat(self, row, col): """Retrieves lon and lat values of single point in area grid diff --git a/pyresample/test/test_kd_tree.py b/pyresample/test/test_kd_tree.py index 891d2b4..80dbec0 100644 --- a/pyresample/test/test_kd_tree.py +++ b/pyresample/test/test_kd_tree.py @@ -75,10 +75,10 @@ class Test(unittest.TestCase): res, stddev, count = kd_tree.resample_gauss(self.tswath, self.tdata, self.tgrid, 100000, sigma, with_uncert=True) - self.assertFalse( - len(w) != 1, 'Failed to create neighbour warning') - self.assertFalse(('Searching' not in str( - w[0].message)), 'Failed to create correct neighbour warning') + self.assertTrue( + len(w) > 0, 'Failed to create neighbour warning') + self.assertTrue((any('Searching' in str(_w.message) for _w in w)), + 'Failed to create correct neighbour warning') expected_res = 2.20206560694 expected_stddev = 0.707115076173 @@ -98,10 +98,10 @@ class Test(unittest.TestCase): res, stddev, counts = kd_tree.resample_custom(self.tswath, self.tdata, self.tgrid, 100000, wf, with_uncert=True) - self.assertFalse( - len(w) != 1, 'Failed to create neighbour warning') - self.assertFalse(('Searching' not in str( - w[0].message)), 'Failed to create correct neighbour warning') + self.assertTrue( + len(w) > 0, 'Failed to create neighbour warning') + self.assertTrue((any('Searching' in str(_w.message) for _w in w)), + 'Failed to create correct neighbour warning') self.assertAlmostEqual(res[0], 2.32193149, 5, 'Failed to calculate custom weighting with uncertainty') diff --git a/pyresample/version.py b/pyresample/version.py index bcdb12b..9fa86ae 100644 --- a/pyresample/version.py +++ b/pyresample/version.py @@ -15,4 +15,4 @@ # You should have received a copy of the GNU Lesser General Public License along # with this program. If not, see <http://www.gnu.org/licenses/>. -__version__ = '1.2.5' +__version__ = '1.2.6' -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pyresample.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

