diff --git a/.cmake-format.py b/.cmake-format.py
index deafc86ff7c3..da2f8898b68e 100644
--- a/.cmake-format.py
+++ b/.cmake-format.py
@@ -3,238 +3,258 @@
# ----------------------------------
with section("parse"):
- # Specify structure for custom cmake functions
- additional_commands = {
- 'add_gdal_driver': { 'flags': ['BUILTIN', 'PLUGIN'], 'kwargs': {'DEF': 1, 'TARGET': 1, 'SOURCES': '+'}},
- 'gdal_driver': {
- 'flags': ['BUILTIN'],
- 'kwargs': {'TARGET': 1, 'SOURCES': '+', 'INCLUDES': '*', 'LIBRARIES': '*', 'DEFINITIONS': '*'}},
- 'gdal_dependent_format': {'pargs': {'nargs': 3}},
- 'gdal_driver_standard_includes': {'pargs': {'nargs': 1}},
- 'gdal_format': {'pargs': {'nargs': 2}},
- 'gdal_optional_format': {'pargs': {'nargs': 2}},
- 'gdal_target_interfaces': {'pargs': {'nargs': 1}},
- 'gdal_target_link_libraries': {'kwargs': {'TARGET': 1, 'LIBRARIES': '*'}},
- 'is_plugin': {'pargs': {'nargs': 2}},
- 'ogr_default_driver': {'pargs': {'nargs': 2}},
- 'ogr_default_driver2': {'pargs': {'nargs': 3}},
- 'ogr_dependent_driver': {'pargs': {'nargs': 3}},
- 'ogr_optional_driver': {'pargs': {'nargs': 2}},
- 'gdal_swig_binding_target': {'kwargs': {}, 'pargs': {'flags': [], 'nargs': '*'}},
- 'gdal_swig_bindings': {'kwargs': {}, 'pargs': {'flags': [], 'nargs': '*'}},
- 'gdal_csharp_dll': {
- 'flags': [],
- 'kwargs': {'TARGET': 1, 'NAMESPACE': 1, 'WRAPPER': 1, 'SWIG_INTERFACE': 1,
- 'CS_SOURCES': '*', 'WORKING_DIRECTORY': '*', 'DEPENDS': '*'}},
- 'gdal_java_wrap': { 'flags': ['CXX'], 'kwargs': {'TARGET': '*', 'ARGS': '*'}}
- }
-
- # Specify variable tags.
- vartags = []
-
- # Specify property tags.
- proptags = []
+ # Specify structure for custom cmake functions
+ additional_commands = {
+ "add_gdal_driver": {
+ "flags": ["BUILTIN", "PLUGIN"],
+ "kwargs": {"DEF": 1, "TARGET": 1, "SOURCES": "+"},
+ },
+ "gdal_driver": {
+ "flags": ["BUILTIN"],
+ "kwargs": {
+ "TARGET": 1,
+ "SOURCES": "+",
+ "INCLUDES": "*",
+ "LIBRARIES": "*",
+ "DEFINITIONS": "*",
+ },
+ },
+ "gdal_dependent_format": {"pargs": {"nargs": 3}},
+ "gdal_driver_standard_includes": {"pargs": {"nargs": 1}},
+ "gdal_format": {"pargs": {"nargs": 2}},
+ "gdal_optional_format": {"pargs": {"nargs": 2}},
+ "gdal_target_interfaces": {"pargs": {"nargs": 1}},
+ "gdal_target_link_libraries": {"kwargs": {"TARGET": 1, "LIBRARIES": "*"}},
+ "is_plugin": {"pargs": {"nargs": 2}},
+ "ogr_default_driver": {"pargs": {"nargs": 2}},
+ "ogr_default_driver2": {"pargs": {"nargs": 3}},
+ "ogr_dependent_driver": {"pargs": {"nargs": 3}},
+ "ogr_optional_driver": {"pargs": {"nargs": 2}},
+ "gdal_swig_binding_target": {
+ "kwargs": {},
+ "pargs": {"flags": [], "nargs": "*"},
+ },
+ "gdal_swig_bindings": {"kwargs": {}, "pargs": {"flags": [], "nargs": "*"}},
+ "gdal_csharp_dll": {
+ "flags": [],
+ "kwargs": {
+ "TARGET": 1,
+ "NAMESPACE": 1,
+ "WRAPPER": 1,
+ "SWIG_INTERFACE": 1,
+ "CS_SOURCES": "*",
+ "WORKING_DIRECTORY": "*",
+ "DEPENDS": "*",
+ },
+ },
+ "gdal_java_wrap": {"flags": ["CXX"], "kwargs": {"TARGET": "*", "ARGS": "*"}},
+ }
+
+ # Specify variable tags.
+ vartags = []
+
+ # Specify property tags.
+ proptags = []
# -----------------------------
# Options affecting formatting.
# -----------------------------
with section("format"):
- # How wide to allow formatted cmake files
- line_width = 120
+ # How wide to allow formatted cmake files
+ line_width = 120
- # How many spaces to tab for indent
- tab_size = 2
+ # How many spaces to tab for indent
+ tab_size = 2
- # If an argument group contains more than this many sub-groups (parg or kwarg
- # groups) then force it to a vertical layout.
- max_subgroups_hwrap = 2
+ # If an argument group contains more than this many sub-groups (parg or kwarg
+ # groups) then force it to a vertical layout.
+ max_subgroups_hwrap = 2
- # If a positional argument group contains more than this many arguments, then
- # force it to a vertical layout.
- max_pargs_hwrap = 6
+ # If a positional argument group contains more than this many arguments, then
+ # force it to a vertical layout.
+ max_pargs_hwrap = 6
- # If a cmdline positional group consumes more than this many lines without
- # nesting, then invalidate the layout (and nest)
- max_rows_cmdline = 2
+ # If a cmdline positional group consumes more than this many lines without
+ # nesting, then invalidate the layout (and nest)
+ max_rows_cmdline = 2
- # If true, separate flow control names from their parentheses with a space
- separate_ctrl_name_with_space = True
+ # If true, separate flow control names from their parentheses with a space
+ separate_ctrl_name_with_space = True
- # If true, separate function names from parentheses with a space
- separate_fn_name_with_space = False
+ # If true, separate function names from parentheses with a space
+ separate_fn_name_with_space = False
- # If a statement is wrapped to more than one line, than dangle the closing
- # parenthesis on its own line.
- dangle_parens = False
+ # If a statement is wrapped to more than one line, than dangle the closing
+ # parenthesis on its own line.
+ dangle_parens = False
- # If the trailing parenthesis must be 'dangled' on its on line, then align it
- # to this reference: `prefix`: the start of the statement, `prefix-indent`:
- # the start of the statement, plus one indentation level, `child`: align to
- # the column of the arguments
- dangle_align = 'prefix-indent'
+ # If the trailing parenthesis must be 'dangled' on its on line, then align it
+ # to this reference: `prefix`: the start of the statement, `prefix-indent`:
+ # the start of the statement, plus one indentation level, `child`: align to
+ # the column of the arguments
+ dangle_align = "prefix-indent"
- # If the statement spelling length (including space and parenthesis) is
- # smaller than this amount, then force reject nested layouts.
- min_prefix_chars = 4
+ # If the statement spelling length (including space and parenthesis) is
+ # smaller than this amount, then force reject nested layouts.
+ min_prefix_chars = 4
- # If the statement spelling length (including space and parenthesis) is larger
- # than the tab width by more than this amount, then force reject un-nested
- # layouts.
- max_prefix_chars = 16
+ # If the statement spelling length (including space and parenthesis) is larger
+ # than the tab width by more than this amount, then force reject un-nested
+ # layouts.
+ max_prefix_chars = 16
- # If a candidate layout is wrapped horizontally but it exceeds this many
- # lines, then reject the layout.
- max_lines_hwrap = 2
+ # If a candidate layout is wrapped horizontally but it exceeds this many
+ # lines, then reject the layout.
+ max_lines_hwrap = 2
- # What style line endings to use in the output.
- line_ending = 'unix'
+ # What style line endings to use in the output.
+ line_ending = "unix"
- # Format command names consistently as 'lower' or 'upper' case
- command_case = 'canonical'
+ # Format command names consistently as 'lower' or 'upper' case
+ command_case = "canonical"
- # Format keywords consistently as 'lower' or 'upper' case
- keyword_case = 'unchanged'
+ # Format keywords consistently as 'lower' or 'upper' case
+ keyword_case = "unchanged"
- # A list of command names which should always be wrapped
- always_wrap = []
+ # A list of command names which should always be wrapped
+ always_wrap = []
- # If true, the argument lists which are known to be sortable will be sorted
- # lexicographicall
- enable_sort = True
+ # If true, the argument lists which are known to be sortable will be sorted
+ # lexicographicall
+ enable_sort = True
- # If true, the parsers may infer whether or not an argument list is sortable
- # (without annotation).
- autosort = False
+ # If true, the parsers may infer whether or not an argument list is sortable
+ # (without annotation).
+ autosort = False
- # By default, if cmake-format cannot successfully fit everything into the
- # desired linewidth it will apply the last, most aggressive attempt that it
- # made. If this flag is True, however, cmake-format will print error, exit
- # with non-zero status code, and write-out nothing
- require_valid_layout = False
+ # By default, if cmake-format cannot successfully fit everything into the
+ # desired linewidth it will apply the last, most aggressive attempt that it
+ # made. If this flag is True, however, cmake-format will print error, exit
+ # with non-zero status code, and write-out nothing
+ require_valid_layout = False
- # A dictionary mapping layout nodes to a list of wrap decisions. See the
- # documentation for more information.
- layout_passes = {}
+ # A dictionary mapping layout nodes to a list of wrap decisions. See the
+ # documentation for more information.
+ layout_passes = {}
# ------------------------------------------------
# Options affecting comment reflow and formatting.
# ------------------------------------------------
with section("markup"):
- # What character to use for bulleted lists
- bullet_char = '*'
+ # What character to use for bulleted lists
+ bullet_char = "*"
- # What character to use as punctuation after numerals in an enumerated list
- enum_char = '.'
+ # What character to use as punctuation after numerals in an enumerated list
+ enum_char = "."
- # If comment markup is enabled, don't reflow the first comment block in each
- # listfile. Use this to preserve formatting of your copyright/license
- # statements.
- first_comment_is_literal = False
+ # If comment markup is enabled, don't reflow the first comment block in each
+ # listfile. Use this to preserve formatting of your copyright/license
+ # statements.
+ first_comment_is_literal = False
- # If comment markup is enabled, don't reflow any comment block which matches
- # this (regex) pattern. Default is `None` (disabled).
- literal_comment_pattern = None
+ # If comment markup is enabled, don't reflow any comment block which matches
+ # this (regex) pattern. Default is `None` (disabled).
+ literal_comment_pattern = None
- # Regular expression to match preformat fences in comments default=
- # ``r'^\s*([`~]{3}[`~]*)(.*)$'``
- fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
+ # Regular expression to match preformat fences in comments default=
+ # ``r'^\s*([`~]{3}[`~]*)(.*)$'``
+ fence_pattern = "^\\s*([`~]{3}[`~]*)(.*)$"
- # Regular expression to match rulers in comments default=
- # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
- ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
+ # Regular expression to match rulers in comments default=
+ # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'``
+ ruler_pattern = "^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$"
- # If a comment line matches starts with this pattern then it is explicitly a
- # trailing comment for the preceding argument. Default is '#<'
- explicit_trailing_pattern = '#<'
+ # If a comment line matches starts with this pattern then it is explicitly a
+ # trailing comment for the preceding argument. Default is '#<'
+ explicit_trailing_pattern = "#<"
- # If a comment line starts with at least this many consecutive hash
- # characters, then don't lstrip() them off. This allows for lazy hash rulers
- # where the first hash char is not separated by space
- hashruler_min_length = 10
+ # If a comment line starts with at least this many consecutive hash
+ # characters, then don't lstrip() them off. This allows for lazy hash rulers
+ # where the first hash char is not separated by space
+ hashruler_min_length = 10
- # If true, then insert a space between the first hash char and remaining hash
- # chars in a hash ruler, and normalize its length to fill the column
- canonicalize_hashrulers = True
+ # If true, then insert a space between the first hash char and remaining hash
+ # chars in a hash ruler, and normalize its length to fill the column
+ canonicalize_hashrulers = True
- # enable comment markup parsing and reflow
- enable_markup = True
+ # enable comment markup parsing and reflow
+ enable_markup = True
# ----------------------------
# Options affecting the linter
# ----------------------------
with section("lint"):
- # a list of lint codes to disable
- disabled_codes = []
+ # a list of lint codes to disable
+ disabled_codes = []
- # regular expression pattern describing valid function names
- function_pattern = '[0-9a-z_]+'
+ # regular expression pattern describing valid function names
+ function_pattern = "[0-9a-z_]+"
- # regular expression pattern describing valid macro names
- macro_pattern = '[0-9A-Z_]+'
+ # regular expression pattern describing valid macro names
+ macro_pattern = "[0-9A-Z_]+"
- # regular expression pattern describing valid names for variables with global
- # scope
- global_var_pattern = '[0-9A-Z][0-9A-Z_]+'
+ # regular expression pattern describing valid names for variables with global
+ # scope
+ global_var_pattern = "[0-9A-Z][0-9A-Z_]+"
- # regular expression pattern describing valid names for variables with global
- # scope (but internal semantic)
- internal_var_pattern = '_[0-9A-Z][0-9A-Z_]+'
+ # regular expression pattern describing valid names for variables with global
+ # scope (but internal semantic)
+ internal_var_pattern = "_[0-9A-Z][0-9A-Z_]+"
- # regular expression pattern describing valid names for variables with local
- # scope
- local_var_pattern = '[0-9a-z_]+'
+ # regular expression pattern describing valid names for variables with local
+ # scope
+ local_var_pattern = "[0-9a-z_]+"
- # regular expression pattern describing valid names for privatedirectory
- # variables
- private_var_pattern = '_[0-9a-z_]+'
+ # regular expression pattern describing valid names for privatedirectory
+ # variables
+ private_var_pattern = "_[0-9a-z_]+"
- # regular expression pattern describing valid names for publicdirectory
- # variables
- public_var_pattern = '[0-9A-Z][0-9A-Z_]+'
+ # regular expression pattern describing valid names for publicdirectory
+ # variables
+ public_var_pattern = "[0-9A-Z][0-9A-Z_]+"
- # regular expression pattern describing valid names for keywords used in
- # functions or macros
- keyword_pattern = '[0-9A-Z_]+'
+ # regular expression pattern describing valid names for keywords used in
+ # functions or macros
+ keyword_pattern = "[0-9A-Z_]+"
- # In the heuristic for C0201, how many conditionals to match within a loop in
- # before considering the loop a parser.
- max_conditionals_custom_parser = 2
+ # In the heuristic for C0201, how many conditionals to match within a loop in
+ # before considering the loop a parser.
+ max_conditionals_custom_parser = 2
- # Require at least this many newlines between statements
- min_statement_spacing = 1
+ # Require at least this many newlines between statements
+ min_statement_spacing = 1
- # Require no more than this many newlines between statements
- max_statement_spacing = 1
- max_returns = 6
- max_branches = 12
- max_arguments = 5
- max_localvars = 15
- max_statements = 50
+ # Require no more than this many newlines between statements
+ max_statement_spacing = 1
+ max_returns = 6
+ max_branches = 12
+ max_arguments = 5
+ max_localvars = 15
+ max_statements = 50
# -------------------------------
# Options affecting file encoding
# -------------------------------
with section("encode"):
- # If true, emit the unicode byte-order mark (BOM) at the start of the file
- emit_byteorder_mark = False
+ # If true, emit the unicode byte-order mark (BOM) at the start of the file
+ emit_byteorder_mark = False
- # Specify the encoding of the input file. Defaults to utf-8
- input_encoding = 'utf-8'
+ # Specify the encoding of the input file. Defaults to utf-8
+ input_encoding = "utf-8"
- # Specify the encoding of the output file. Defaults to utf-8. Note that cmake
- # only claims to support utf-8 so be careful when using anything else
- output_encoding = 'utf-8'
+ # Specify the encoding of the output file. Defaults to utf-8. Note that cmake
+ # only claims to support utf-8 so be careful when using anything else
+ output_encoding = "utf-8"
# -------------------------------------
# Miscellaneous configurations options.
# -------------------------------------
with section("misc"):
- # A dictionary containing any per-command configuration overrides. Currently
- # only `command_case` is supported.
- per_command = {}
-
+ # A dictionary containing any per-command configuration overrides. Currently
+ # only `command_case` is supported.
+ per_command = {}
diff --git a/autotest/alg/applyverticalshiftgrid.py b/autotest/alg/applyverticalshiftgrid.py
index b95731af19a8..fee8b775234b 100755
--- a/autotest/alg/applyverticalshiftgrid.py
+++ b/autotest/alg/applyverticalshiftgrid.py
@@ -30,8 +30,8 @@
###############################################################################
-
import gdaltest
+
from osgeo import gdal, osr
###############################################################################
@@ -40,10 +40,9 @@
def test_applyverticalshiftgrid_1():
- src_ds = gdal.Open('../gcore/data/byte.tif')
- src_ds = gdal.Translate('', src_ds, format='MEM',
- width=20, height=40)
- grid_ds = gdal.Translate('', src_ds, format='MEM')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+ src_ds = gdal.Translate("", src_ds, format="MEM", width=20, height=40)
+ grid_ds = gdal.Translate("", src_ds, format="MEM")
out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds)
assert out_ds.GetRasterBand(1).DataType == gdal.GDT_Byte
assert out_ds.RasterXSize == src_ds.RasterXSize
@@ -57,23 +56,23 @@ def test_applyverticalshiftgrid_1():
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 10038
- src_ds = gdal.Open('../gcore/data/byte.tif')
- src_ds = gdal.Translate('', src_ds, format='MEM',
- width=20, height=40)
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+ src_ds = gdal.Translate("", src_ds, format="MEM", width=20, height=40)
# Test block size
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, src_ds,
- options=['BLOCKSIZE=15'])
+ out_ds = gdal.ApplyVerticalShiftGrid(src_ds, src_ds, options=["BLOCKSIZE=15"])
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 10038
# Inverse transformer
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, src_ds, True,
- options=['DATATYPE=Float32'])
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, src_ds, True, options=["DATATYPE=Float32"]
+ )
assert out_ds.GetRasterBand(1).DataType == gdal.GDT_Float32
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 0
+
###############################################################################
# Error cases
@@ -83,14 +82,14 @@ def test_applyverticalshiftgrid_2():
sr = osr.SpatialReference()
sr.SetFromUserInput("WGS84")
for i in range(6):
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
if i != 0:
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
if i != 1:
src_ds.SetProjection(sr.ExportToWkt())
if i == 2:
src_ds.AddBand(gdal.GDT_Byte)
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
if i != 3:
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
if i != 4:
@@ -102,10 +101,10 @@ def test_applyverticalshiftgrid_2():
assert out_ds is None, i
# Non invertable source geotransform
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 0, 0, 0, 0, 0])
src_ds.SetProjection(sr.ExportToWkt())
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
with gdaltest.error_handler():
@@ -113,10 +112,10 @@ def test_applyverticalshiftgrid_2():
assert out_ds is None
# Non invertable grid geotransform
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 0, 0, 0, 0, 0])
grid_ds.SetProjection(sr.ExportToWkt())
with gdaltest.error_handler():
@@ -125,10 +124,10 @@ def test_applyverticalshiftgrid_2():
# No PROJ.4 translation for source SRS, coordinate transformation
# initialization has failed
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection('LOCAL_CS["foo"]')
with gdaltest.error_handler():
@@ -136,41 +135,44 @@ def test_applyverticalshiftgrid_2():
assert out_ds is None
# Out of memory
- if gdal.GetConfigOption('SKIP_MEM_INTENSIVE_TEST') is None:
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ if gdal.GetConfigOption("SKIP_MEM_INTENSIVE_TEST") is None:
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
with gdaltest.error_handler():
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['BLOCKSIZE=2000000000'])
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, grid_ds, options=["BLOCKSIZE=2000000000"]
+ )
assert out_ds is None
# Wrong DATATYPE
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
with gdaltest.error_handler():
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['DATATYPE=x'])
+ out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds, options=["DATATYPE=x"])
assert out_ds is None
+
###############################################################################
# Test with grid and src not in same projection
def test_applyverticalshiftgrid_3():
- src_ds = gdal.Open('../gcore/data/byte.tif')
- grid_ds = gdal.Warp('', src_ds, format='MEM', dstSRS='EPSG:4326',
- width=40, height=40)
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['RESAMPLING=NEAREST'])
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+ grid_ds = gdal.Warp(
+ "", src_ds, format="MEM", dstSRS="EPSG:4326", width=40, height=40
+ )
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, grid_ds, options=["RESAMPLING=NEAREST"]
+ )
assert out_ds.RasterXSize == src_ds.RasterXSize
assert out_ds.RasterYSize == src_ds.RasterYSize
assert out_ds.GetGeoTransform() == src_ds.GetGeoTransform()
@@ -178,15 +180,16 @@ def test_applyverticalshiftgrid_3():
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 5112
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['RESAMPLING=BILINEAR'])
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, grid_ds, options=["RESAMPLING=BILINEAR"]
+ )
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 4867 or cs == 4868
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['RESAMPLING=CUBIC'])
+ out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds, options=["RESAMPLING=CUBIC"])
cs = out_ds.GetRasterBand(1).Checksum()
- assert cs in (4841, 4854, 4842) # 4842 on Mac / Conda
+ assert cs in (4841, 4854, 4842) # 4842 on Mac / Conda
+
###############################################################################
# Test nodata
@@ -198,12 +201,12 @@ def test_applyverticalshiftgrid_4():
sr.SetFromUserInput("WGS84")
# Nodata on source
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
src_ds.GetRasterBand(1).Fill(1)
src_ds.GetRasterBand(1).SetNoDataValue(1)
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
grid_ds.GetRasterBand(1).Fill(30)
@@ -213,11 +216,11 @@ def test_applyverticalshiftgrid_4():
assert cs == 1
# Nodata on grid
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
src_ds.GetRasterBand(1).Fill(1)
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
grid_ds.GetRasterBand(1).Fill(30)
@@ -228,79 +231,97 @@ def test_applyverticalshiftgrid_4():
assert cs == 1
# ERROR_ON_MISSING_VERT_SHIFT due to non compatible extents
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
src_ds.GetRasterBand(1).Fill(255)
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([10, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['ERROR_ON_MISSING_VERT_SHIFT=YES'])
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, grid_ds, options=["ERROR_ON_MISSING_VERT_SHIFT=YES"]
+ )
with gdaltest.error_handler():
data = out_ds.GetRasterBand(1).ReadRaster()
assert data is None
# ERROR_ON_MISSING_VERT_SHIFT due to nodata in grid
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
src_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
src_ds.SetProjection(sr.ExportToWkt())
src_ds.GetRasterBand(1).Fill(255)
- grid_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ grid_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
grid_ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
grid_ds.SetProjection(sr.ExportToWkt())
grid_ds.GetRasterBand(1).SetNoDataValue(0)
- out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds,
- options=['ERROR_ON_MISSING_VERT_SHIFT=YES'])
+ out_ds = gdal.ApplyVerticalShiftGrid(
+ src_ds, grid_ds, options=["ERROR_ON_MISSING_VERT_SHIFT=YES"]
+ )
with gdaltest.error_handler():
data = out_ds.GetRasterBand(1).ReadRaster()
assert data is None
+
###############################################################################
# Test scaling parameters
def test_applyverticalshiftgrid_5():
- src_ds = gdal.Open('../gcore/data/byte.tif')
- grid_ds = gdal.Translate('', src_ds, format='MEM')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+ grid_ds = gdal.Translate("", src_ds, format="MEM")
grid_ds.GetRasterBand(1).Fill(0)
- src_ds = gdal.Translate('', src_ds, format='MEM',
- outputType=gdal.GDT_Float32,
- scaleParams=[[0, 1, 0, 0.5]])
+ src_ds = gdal.Translate(
+ "",
+ src_ds,
+ format="MEM",
+ outputType=gdal.GDT_Float32,
+ scaleParams=[[0, 1, 0, 0.5]],
+ )
out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds, srcUnitToMeter=2)
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 4672
- src_ds = gdal.Open('../gcore/data/byte.tif')
- grid_ds = gdal.Translate('', src_ds, format='MEM')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+ grid_ds = gdal.Translate("", src_ds, format="MEM")
grid_ds.GetRasterBand(1).Fill(0)
- src_ds = gdal.Translate('', src_ds, format='MEM',
- outputType=gdal.GDT_Float32,
- scaleParams=[[0, 1, 0, 0.5]])
+ src_ds = gdal.Translate(
+ "",
+ src_ds,
+ format="MEM",
+ outputType=gdal.GDT_Float32,
+ scaleParams=[[0, 1, 0, 0.5]],
+ )
out_ds = gdal.ApplyVerticalShiftGrid(src_ds, grid_ds, dstUnitToMeter=0.5)
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 4672
+
###############################################################################
# Simulate EGM grids
def test_applyverticalshiftgrid_6():
- grid_ds = gdal.GetDriverByName('GTX').Create(
- 'tmp/applyverticalshiftgrid_6.gtx', 1440, 721, 1, gdal.GDT_Float32)
+ grid_ds = gdal.GetDriverByName("GTX").Create(
+ "tmp/applyverticalshiftgrid_6.gtx", 1440, 721, 1, gdal.GDT_Float32
+ )
grid_ds.SetGeoTransform([-180.125, 0.25, 0, 90.125, 0, -0.25])
grid_ds.GetRasterBand(1).Fill(10)
grid_ds = None
- ds = gdal.Warp('', '../gcore/data/byte.tif', format='MEM',
- srcSRS='EPSG:32611',
- dstSRS='+proj=utm +zone=11 +datum=WGS84 +geoidgrids=./tmp/applyverticalshiftgrid_6.gtx +vunits=m +no_defs')
+ ds = gdal.Warp(
+ "",
+ "../gcore/data/byte.tif",
+ format="MEM",
+ srcSRS="EPSG:32611",
+ dstSRS="+proj=utm +zone=11 +datum=WGS84 +geoidgrids=./tmp/applyverticalshiftgrid_6.gtx +vunits=m +no_defs",
+ )
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4783
- gdal.Unlink('tmp/applyverticalshiftgrid_6.gtx')
+ gdal.Unlink("tmp/applyverticalshiftgrid_6.gtx")
+
###############################################################################
# Simulate USA geoid grids with long origin > 180
@@ -308,19 +329,21 @@ def test_applyverticalshiftgrid_6():
def test_applyverticalshiftgrid_7():
- grid_ds = gdal.GetDriverByName('GTX').Create(
- 'tmp/applyverticalshiftgrid_7.gtx', 700, 721, 1, gdal.GDT_Float32)
+ grid_ds = gdal.GetDriverByName("GTX").Create(
+ "tmp/applyverticalshiftgrid_7.gtx", 700, 721, 1, gdal.GDT_Float32
+ )
grid_ds.SetGeoTransform([-150 + 360, 0.25, 0, 90.125, 0, -0.25])
grid_ds.GetRasterBand(1).Fill(10)
grid_ds = None
- ds = gdal.Warp('', '../gcore/data/byte.tif', format='MEM',
- srcSRS='EPSG:32611',
- dstSRS='+proj=utm +zone=11 +datum=WGS84 +geoidgrids=./tmp/applyverticalshiftgrid_7.gtx +vunits=m +no_defs')
+ ds = gdal.Warp(
+ "",
+ "../gcore/data/byte.tif",
+ format="MEM",
+ srcSRS="EPSG:32611",
+ dstSRS="+proj=utm +zone=11 +datum=WGS84 +geoidgrids=./tmp/applyverticalshiftgrid_7.gtx +vunits=m +no_defs",
+ )
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4783
- gdal.Unlink('tmp/applyverticalshiftgrid_7.gtx')
-
-
-
+ gdal.Unlink("tmp/applyverticalshiftgrid_7.gtx")
diff --git a/autotest/alg/contour.py b/autotest/alg/contour.py
index 89f9bbfdec77..95a6d5371221 100755
--- a/autotest/alg/contour.py
+++ b/autotest/alg/contour.py
@@ -28,16 +28,15 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import struct
import os
+import struct
-
-from osgeo import gdal
-from osgeo import ogr
import gdaltest
import ogrtest
import pytest
+from osgeo import gdal, ogr
+
###############################################################################
# Test with -a and -i options
@@ -45,59 +44,79 @@
def test_contour_1():
try:
- os.remove('tmp/contour.shp')
+ os.remove("tmp/contour.shp")
except OSError:
pass
try:
- os.remove('tmp/contour.dbf')
+ os.remove("tmp/contour.dbf")
except OSError:
pass
try:
- os.remove('tmp/contour.shx')
+ os.remove("tmp/contour.shx")
except OSError:
pass
- drv = gdal.GetDriverByName('GTiff')
- wkt = 'GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AUTHORITY[\"EPSG\",\"4326\"]]'
+ drv = gdal.GetDriverByName("GTiff")
+ wkt = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]'
size = 160
precision = 1.0 / size
- ds = drv.Create('tmp/gdal_contour.tif', size, size, 1)
+ ds = drv.Create("tmp/gdal_contour.tif", size, size, 1)
ds.SetProjection(wkt)
ds.SetGeoTransform([1, precision, 0, 50, 0, -precision])
- raw_data = struct.pack('h', 10) * int(size / 2)
+ raw_data = struct.pack("h", 10) * int(size / 2)
for i in range(int(size / 2)):
- ds.WriteRaster(int(size / 4), i + int(size / 4), int(size / 2), 1, raw_data,
- buf_type=gdal.GDT_Int16,
- band_list=[1])
-
- raw_data = struct.pack('h', 20) * int(size / 2)
+ ds.WriteRaster(
+ int(size / 4),
+ i + int(size / 4),
+ int(size / 2),
+ 1,
+ raw_data,
+ buf_type=gdal.GDT_Int16,
+ band_list=[1],
+ )
+
+ raw_data = struct.pack("h", 20) * int(size / 2)
for i in range(int(size / 4)):
- ds.WriteRaster(int(size / 4) + int(size / 8), i + int(size / 4) + int(size / 8), int(size / 4), 1, raw_data,
- buf_type=gdal.GDT_Int16,
- band_list=[1])
-
- raw_data = struct.pack('h', 25) * int(size / 4)
+ ds.WriteRaster(
+ int(size / 4) + int(size / 8),
+ i + int(size / 4) + int(size / 8),
+ int(size / 4),
+ 1,
+ raw_data,
+ buf_type=gdal.GDT_Int16,
+ band_list=[1],
+ )
+
+ raw_data = struct.pack("h", 25) * int(size / 4)
for i in range(int(size / 8)):
- ds.WriteRaster(int(size / 4) + int(size / 8) + int(size / 16), i + int(size / 4) + int(size / 8) + int(size / 16), int(size / 8), 1, raw_data,
- buf_type=gdal.GDT_Int16,
- band_list=[1])
-
- ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('tmp/contour.shp')
- ogr_lyr = ogr_ds.CreateLayer('contour')
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ds.WriteRaster(
+ int(size / 4) + int(size / 8) + int(size / 16),
+ i + int(size / 4) + int(size / 8) + int(size / 16),
+ int(size / 8),
+ 1,
+ raw_data,
+ buf_type=gdal.GDT_Int16,
+ band_list=[1],
+ )
+
+ ogr_ds = ogr.GetDriverByName("ESRI Shapefile").CreateDataSource("tmp/contour.shp")
+ ogr_lyr = ogr_ds.CreateLayer("contour")
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- field_defn = ogr.FieldDefn('elev', ogr.OFTReal)
+ field_defn = ogr.FieldDefn("elev", ogr.OFTReal)
ogr_lyr.CreateField(field_defn)
gdal.ContourGenerate(ds.GetRasterBand(1), 10, 0, [], 0, 0, ogr_lyr, 0, 1)
ds = None
- expected_envelopes = [[1.25, 1.75, 49.25, 49.75],
- [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125]]
+ expected_envelopes = [
+ [1.25, 1.75, 49.25, 49.75],
+ [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125],
+ ]
expected_height = [10, 20]
lyr = ogr_ds.ExecuteSQL("select * from contour order by elev asc")
@@ -108,18 +127,23 @@ def test_contour_1():
feat = lyr.GetNextFeature()
while feat is not None:
envelope = feat.GetGeometryRef().GetEnvelope()
- assert feat.GetField('elev') == expected_height[i]
+ assert feat.GetField("elev") == expected_height[i]
for j in range(4):
- if expected_envelopes[i][j] != pytest.approx(envelope[j], abs=precision / 2 * 1.001):
- print('i=%d, wkt=%s' % (i, feat.GetGeometryRef().ExportToWkt()))
+ if expected_envelopes[i][j] != pytest.approx(
+ envelope[j], abs=precision / 2 * 1.001
+ ):
+ print("i=%d, wkt=%s" % (i, feat.GetGeometryRef().ExportToWkt()))
print(feat.GetGeometryRef().GetEnvelope())
- pytest.fail('%f, %f' % (expected_envelopes[i][j] - envelope[j], precision / 2))
+ pytest.fail(
+ "%f, %f" % (expected_envelopes[i][j] - envelope[j], precision / 2)
+ )
i = i + 1
feat = lyr.GetNextFeature()
ogr_ds.ReleaseResultSet(lyr)
ogr_ds.Destroy()
+
###############################################################################
# Test with -fl option and -3d option
@@ -127,35 +151,42 @@ def test_contour_1():
def test_contour_2():
try:
- os.remove('tmp/contour.shp')
+ os.remove("tmp/contour.shp")
except OSError:
pass
try:
- os.remove('tmp/contour.dbf')
+ os.remove("tmp/contour.dbf")
except OSError:
pass
try:
- os.remove('tmp/contour.shx')
+ os.remove("tmp/contour.shx")
except OSError:
pass
- ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('tmp/contour.shp')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbLineString25D)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("ESRI Shapefile").CreateDataSource("tmp/contour.shp")
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbLineString25D)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- field_defn = ogr.FieldDefn('elev', ogr.OFTReal)
+ field_defn = ogr.FieldDefn("elev", ogr.OFTReal)
ogr_lyr.CreateField(field_defn)
- ds = gdal.Open('tmp/gdal_contour.tif')
+ ds = gdal.Open("tmp/gdal_contour.tif")
gdal.ContourGenerate(ds.GetRasterBand(1), 0, 0, [10, 20, 25], 0, 0, ogr_lyr, 0, 1)
ds = None
size = 160
- precision = 1. / size
+ precision = 1.0 / size
- expected_envelopes = [[1.25, 1.75, 49.25, 49.75],
- [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125],
- [1.25 + 0.125 + 0.0625, 1.75 - 0.125 - 0.0625, 49.25 + 0.125 + 0.0625, 49.75 - 0.125 - 0.0625]]
+ expected_envelopes = [
+ [1.25, 1.75, 49.25, 49.75],
+ [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125],
+ [
+ 1.25 + 0.125 + 0.0625,
+ 1.75 - 0.125 - 0.0625,
+ 49.25 + 0.125 + 0.0625,
+ 49.75 - 0.125 - 0.0625,
+ ],
+ ]
expected_height = [10, 20, 25, 10000]
lyr = ogr_ds.ExecuteSQL("select * from contour order by elev asc")
@@ -167,82 +198,109 @@ def test_contour_2():
while feat is not None:
assert feat.GetGeometryRef().GetZ(0) == expected_height[i]
envelope = feat.GetGeometryRef().GetEnvelope()
- assert feat.GetField('elev') == expected_height[i]
+ assert feat.GetField("elev") == expected_height[i]
for j in range(4):
- if expected_envelopes[i][j] != pytest.approx(envelope[j], abs=precision / 2 * 1.001):
- print('i=%d, wkt=%s' % (i, feat.GetGeometryRef().ExportToWkt()))
+ if expected_envelopes[i][j] != pytest.approx(
+ envelope[j], abs=precision / 2 * 1.001
+ ):
+ print("i=%d, wkt=%s" % (i, feat.GetGeometryRef().ExportToWkt()))
print(feat.GetGeometryRef().GetEnvelope())
- pytest.fail('%f, %f' % (expected_envelopes[i][j] - envelope[j], precision / 2))
+ pytest.fail(
+ "%f, %f" % (expected_envelopes[i][j] - envelope[j], precision / 2)
+ )
i = i + 1
feat = lyr.GetNextFeature()
ogr_ds.ReleaseResultSet(lyr)
ogr_ds.Destroy()
+
###############################################################################
#
def test_contour_real_world_case():
- ogr_ds = ogr.GetDriverByName('Memory').CreateDataSource('')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbLineString)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("")
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbLineString)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- field_defn = ogr.FieldDefn('elev', ogr.OFTReal)
+ field_defn = ogr.FieldDefn("elev", ogr.OFTReal)
ogr_lyr.CreateField(field_defn)
- ds = gdal.Open('data/contour_in.tif')
+ ds = gdal.Open("data/contour_in.tif")
gdal.ContourGenerate(ds.GetRasterBand(1), 10, 0, [], 0, 0, ogr_lyr, 0, 1)
ds = None
- ogr_lyr.SetAttributeFilter('elev = 330')
+ ogr_lyr.SetAttributeFilter("elev = 330")
assert ogr_lyr.GetFeatureCount() == 1
f = ogr_lyr.GetNextFeature()
- assert ogrtest.check_feature_geometry(f, 'LINESTRING (4.50497512437811 11.5,4.5 11.501996007984,3.5 11.8333333333333,2.5 11.5049751243781,2.490099009901 11.5,2.0 10.5,2.5 10.1666666666667,3.0 9.5,3.5 9.21428571428571,4.49800399201597 8.5,4.5 8.49857346647646,5.5 8.16666666666667,6.5 8.0,7.5 8.0,8.0 7.5,8.5 7.0,9.490099009901 6.5,9.5 6.49667774086379,10.5 6.16666666666667,11.4950248756219 5.5,11.5 5.49833610648919,12.5 5.49667774086379,13.5 5.49800399201597,13.501996007984 5.5,13.5 5.50199600798403,12.501996007984 6.5,12.5 6.50142653352354,11.5 6.509900990099,10.509900990099 7.5,10.5 7.50142653352354,9.5 7.9,8.50332225913621 8.5,8.5 8.50249376558603,7.83333333333333 9.5,7.5 10.0,7.0 10.5,6.5 10.7857142857143,5.5 11.1666666666667,4.50497512437811 11.5)', 0.01) == 0
+ assert (
+ ogrtest.check_feature_geometry(
+ f,
+ "LINESTRING (4.50497512437811 11.5,4.5 11.501996007984,3.5 11.8333333333333,2.5 11.5049751243781,2.490099009901 11.5,2.0 10.5,2.5 10.1666666666667,3.0 9.5,3.5 9.21428571428571,4.49800399201597 8.5,4.5 8.49857346647646,5.5 8.16666666666667,6.5 8.0,7.5 8.0,8.0 7.5,8.5 7.0,9.490099009901 6.5,9.5 6.49667774086379,10.5 6.16666666666667,11.4950248756219 5.5,11.5 5.49833610648919,12.5 5.49667774086379,13.5 5.49800399201597,13.501996007984 5.5,13.5 5.50199600798403,12.501996007984 6.5,12.5 6.50142653352354,11.5 6.509900990099,10.509900990099 7.5,10.5 7.50142653352354,9.5 7.9,8.50332225913621 8.5,8.5 8.50249376558603,7.83333333333333 9.5,7.5 10.0,7.0 10.5,6.5 10.7857142857143,5.5 11.1666666666667,4.50497512437811 11.5)",
+ 0.01,
+ )
+ == 0
+ )
+
# Test with -p option (polygonize)
+
def test_contour_3():
try:
- os.remove('tmp/contour.shp')
+ os.remove("tmp/contour.shp")
except OSError:
pass
try:
- os.remove('tmp/contour.dbf')
+ os.remove("tmp/contour.dbf")
except OSError:
pass
try:
- os.remove('tmp/contour.shx')
+ os.remove("tmp/contour.shx")
except OSError:
pass
- ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('tmp/contour.shp')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbMultiPolygon)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("ESRI Shapefile").CreateDataSource("tmp/contour.shp")
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbMultiPolygon)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- field_defn = ogr.FieldDefn('elevMin', ogr.OFTReal)
+ field_defn = ogr.FieldDefn("elevMin", ogr.OFTReal)
ogr_lyr.CreateField(field_defn)
- field_defn = ogr.FieldDefn('elevMax', ogr.OFTReal)
+ field_defn = ogr.FieldDefn("elevMax", ogr.OFTReal)
ogr_lyr.CreateField(field_defn)
- ds = gdal.Open('tmp/gdal_contour.tif')
- #gdal.ContourGenerateEx(ds.GetRasterBand(1), 0, 0, 0, [10, 20, 25], 0, 0, ogr_lyr, 0, 1, 1)
- gdal.ContourGenerateEx(ds.GetRasterBand(1), ogr_lyr, options = [ "FIXED_LEVELS=10,20,25",
- "ID_FIELD=0",
- "ELEV_FIELD_MIN=1",
- "ELEV_FIELD_MAX=2",
- "POLYGONIZE=TRUE" ] )
+ ds = gdal.Open("tmp/gdal_contour.tif")
+ # gdal.ContourGenerateEx(ds.GetRasterBand(1), 0, 0, 0, [10, 20, 25], 0, 0, ogr_lyr, 0, 1, 1)
+ gdal.ContourGenerateEx(
+ ds.GetRasterBand(1),
+ ogr_lyr,
+ options=[
+ "FIXED_LEVELS=10,20,25",
+ "ID_FIELD=0",
+ "ELEV_FIELD_MIN=1",
+ "ELEV_FIELD_MAX=2",
+ "POLYGONIZE=TRUE",
+ ],
+ )
ds = None
size = 160
- precision = 1. / size
+ precision = 1.0 / size
- expected_envelopes = [[1.0, 2.0, 49.0, 50.0],
- [1.25, 1.75, 49.25, 49.75],
- [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125],
- [1.25 + 0.125 + 0.0625, 1.75 - 0.125 - 0.0625, 49.25 + 0.125 + 0.0625, 49.75 - 0.125 - 0.0625]]
+ expected_envelopes = [
+ [1.0, 2.0, 49.0, 50.0],
+ [1.25, 1.75, 49.25, 49.75],
+ [1.25 + 0.125, 1.75 - 0.125, 49.25 + 0.125, 49.75 - 0.125],
+ [
+ 1.25 + 0.125 + 0.0625,
+ 1.75 - 0.125 - 0.0625,
+ 49.25 + 0.125 + 0.0625,
+ 49.75 - 0.125 - 0.0625,
+ ],
+ ]
expected_height = [10, 20, 25, 10000]
lyr = ogr_ds.ExecuteSQL("select * from contour order by elevMin asc")
@@ -252,17 +310,27 @@ def test_contour_3():
i = 0
feat = lyr.GetNextFeature()
while feat is not None:
- if i < 3 and feat.GetField('elevMax') != expected_height[i]:
- pytest.fail('Got %f as z. Expected %f' % (feat.GetField('elevMax'), expected_height[i]))
- elif i > 0 and i < 3 and feat.GetField('elevMin') != expected_height[i-1]:
- pytest.fail('Got %f as z. Expected %f' % (feat.GetField('elevMin'), expected_height[i-1]))
+ if i < 3 and feat.GetField("elevMax") != expected_height[i]:
+ pytest.fail(
+ "Got %f as z. Expected %f"
+ % (feat.GetField("elevMax"), expected_height[i])
+ )
+ elif i > 0 and i < 3 and feat.GetField("elevMin") != expected_height[i - 1]:
+ pytest.fail(
+ "Got %f as z. Expected %f"
+ % (feat.GetField("elevMin"), expected_height[i - 1])
+ )
envelope = feat.GetGeometryRef().GetEnvelope()
for j in range(4):
- if expected_envelopes[i][j] != pytest.approx(envelope[j], abs=precision / 2 * 1.001):
- print('i=%d, wkt=%s' % (i, feat.GetGeometryRef().ExportToWkt()))
+ if expected_envelopes[i][j] != pytest.approx(
+ envelope[j], abs=precision / 2 * 1.001
+ ):
+ print("i=%d, wkt=%s" % (i, feat.GetGeometryRef().ExportToWkt()))
print(feat.GetGeometryRef().GetEnvelope())
- pytest.fail('%f, %f' % (expected_envelopes[i][j] - envelope[j], precision / 2))
+ pytest.fail(
+ "%f, %f" % (expected_envelopes[i][j] - envelope[j], precision / 2)
+ )
i = i + 1
feat = lyr.GetNextFeature()
@@ -273,27 +341,36 @@ def test_contour_3():
# Check behaviour when the nodata value as a double isn't exactly the Float32 pixel value
def test_contour_nodata_precision_issue_float32():
- ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('/vsimem/contour.shp')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbLineString)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("ESRI Shapefile").CreateDataSource(
+ "/vsimem/contour.shp"
+ )
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbLineString)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- ds = gdal.Open('data/nodata_precision_issue_float32.tif')
- gdal.ContourGenerateEx(ds.GetRasterBand(1), ogr_lyr, options = [ "LEVEL_INTERVAL=0.1",
- "ID_FIELD=0",
- "NODATA=%.19g" % ds.GetRasterBand(1).GetNoDataValue()] )
+ ds = gdal.Open("data/nodata_precision_issue_float32.tif")
+ gdal.ContourGenerateEx(
+ ds.GetRasterBand(1),
+ ogr_lyr,
+ options=[
+ "LEVEL_INTERVAL=0.1",
+ "ID_FIELD=0",
+ "NODATA=%.19g" % ds.GetRasterBand(1).GetNoDataValue(),
+ ],
+ )
ds = None
assert ogr_lyr.GetFeatureCount() == 0
ogr_ds = None
- ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('/vsimem/contour.shp')
-
+ ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("/vsimem/contour.shp")
def test_contour_too_many_levels():
- ogr_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource('/vsimem/contour.shp')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbLineString)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("ESRI Shapefile").CreateDataSource(
+ "/vsimem/contour.shp"
+ )
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbLineString)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
content1 = """ncols 2
@@ -313,52 +390,65 @@ def test_contour_too_many_levels():
0 0"""
for content in (content1, content2):
- with gdaltest.tempfile('/vsimem/test.asc', content):
- ds = gdal.Open('/vsimem/test.asc')
+ with gdaltest.tempfile("/vsimem/test.asc", content):
+ ds = gdal.Open("/vsimem/test.asc")
with gdaltest.error_handler():
- assert gdal.ContourGenerateEx(ds.GetRasterBand(1), ogr_lyr,
- options = [ "LEVEL_INTERVAL=1",
- "ID_FIELD=0"] ) != 0
-
- with gdaltest.tempfile('/vsimem/test.asc', content):
- ds = gdal.Open('/vsimem/test.asc')
+ assert (
+ gdal.ContourGenerateEx(
+ ds.GetRasterBand(1),
+ ogr_lyr,
+ options=["LEVEL_INTERVAL=1", "ID_FIELD=0"],
+ )
+ != 0
+ )
+
+ with gdaltest.tempfile("/vsimem/test.asc", content):
+ ds = gdal.Open("/vsimem/test.asc")
with gdaltest.error_handler():
- assert gdal.ContourGenerateEx(ds.GetRasterBand(1), ogr_lyr,
- options = [ "LEVEL_INTERVAL=1",
- "LEVEL_EXP_BASE=1.0001",
- "ID_FIELD=0"] ) != 0
+ assert (
+ gdal.ContourGenerateEx(
+ ds.GetRasterBand(1),
+ ogr_lyr,
+ options=[
+ "LEVEL_INTERVAL=1",
+ "LEVEL_EXP_BASE=1.0001",
+ "ID_FIELD=0",
+ ],
+ )
+ != 0
+ )
ogr_ds = None
- ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('/vsimem/contour.shp')
+ ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("/vsimem/contour.shp")
+
###############################################################################
def test_contour_raster_acquisition_error():
- ogr_ds = ogr.GetDriverByName('Memory').CreateDataSource('')
- ogr_lyr = ogr_ds.CreateLayer('contour', geom_type=ogr.wkbLineString)
- field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
+ ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("")
+ ogr_lyr = ogr_ds.CreateLayer("contour", geom_type=ogr.wkbLineString)
+ field_defn = ogr.FieldDefn("ID", ogr.OFTInteger)
ogr_lyr.CreateField(field_defn)
- ds = gdal.Open('../gcore/data/byte_truncated.tif')
+ ds = gdal.Open("../gcore/data/byte_truncated.tif")
with gdaltest.error_handler():
- assert gdal.ContourGenerateEx(ds.GetRasterBand(1), ogr_lyr,
- options = [ "LEVEL_INTERVAL=1",
- "ID_FIELD=0"] ) != 0
+ assert (
+ gdal.ContourGenerateEx(
+ ds.GetRasterBand(1), ogr_lyr, options=["LEVEL_INTERVAL=1", "ID_FIELD=0"]
+ )
+ != 0
+ )
+
###############################################################################
# Cleanup
def test_contour_cleanup():
- ogr.GetDriverByName('ESRI Shapefile').DeleteDataSource('tmp/contour.shp')
+ ogr.GetDriverByName("ESRI Shapefile").DeleteDataSource("tmp/contour.shp")
try:
- os.remove('tmp/gdal_contour.tif')
+ os.remove("tmp/gdal_contour.tif")
except OSError:
pass
-
-
-
-
-
diff --git a/autotest/alg/cutline.py b/autotest/alg/cutline.py
index 138b9c76e4fb..e2d6a3aa5246 100755
--- a/autotest/alg/cutline.py
+++ b/autotest/alg/cutline.py
@@ -31,20 +31,21 @@
###############################################################################
-
-from osgeo import gdal
-import ogrtest
import gdaltest
+import ogrtest
import pytest
+from osgeo import gdal
+
###############################################################################
def test_cutline_1():
- tst = gdaltest.GDALTest('VRT', 'cutline_noblend.vrt', 1, 11409)
+ tst = gdaltest.GDALTest("VRT", "cutline_noblend.vrt", 1, 11409)
return tst.testOpen()
+
###############################################################################
@@ -53,9 +54,10 @@ def test_cutline_2():
if not ogrtest.have_geos():
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'cutline_blend.vrt', 1, 21395)
+ tst = gdaltest.GDALTest("VRT", "cutline_blend.vrt", 1, 21395)
return tst.testOpen()
+
###############################################################################
@@ -64,9 +66,10 @@ def test_cutline_3():
if not ogrtest.have_geos():
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'cutline_multipolygon.vrt', 1, 20827)
+ tst = gdaltest.GDALTest("VRT", "cutline_multipolygon.vrt", 1, 20827)
return tst.testOpen()
+
###############################################################################
@@ -75,11 +78,12 @@ def test_cutline_4():
if not ogrtest.have_geos():
pytest.skip()
- ds = gdal.Translate('/vsimem/utmsmall.tif', '../gcore/data/utmsmall.tif')
- ds.BuildOverviews('NEAR', [2])
+ ds = gdal.Translate("/vsimem/utmsmall.tif", "../gcore/data/utmsmall.tif")
+ ds.BuildOverviews("NEAR", [2])
ds = None
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","26711"]]
4.4072000000000000e+05, 5.9999999999999993e+01, 0.0000000000000000e+00, 3.7513200000000000e+06, 0.0000000000000000e+00, -5.9999999999999993e+01
@@ -109,14 +113,13 @@ def test_cutline_4():
MULTIPOLYGON(((10 10,10 50,60 50, 10 10)),((70 70,70 100,100 100,100 70,70 70),(80 80,80 90,90 90,90 80,80 80)))
-""")
- out_ds = gdal.Translate('', ds, options='-of MEM -outsize 50%% 50%%')
+"""
+ )
+ out_ds = gdal.Translate("", ds, options="-of MEM -outsize 50%% 50%%")
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 5170
- gdal.Unlink('/vsimem/utmsmall.tif')
-
-###############################################################################
-
+ gdal.Unlink("/vsimem/utmsmall.tif")
+###############################################################################
diff --git a/autotest/alg/dither.py b/autotest/alg/dither.py
index 2f42fa25c48f..6be1a702bcd0 100755
--- a/autotest/alg/dither.py
+++ b/autotest/alg/dither.py
@@ -30,10 +30,9 @@
###############################################################################
-
+import pytest
from osgeo import gdal
-import pytest
###############################################################################
# Test
@@ -41,15 +40,16 @@
def test_dither_1():
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
- src_ds = gdal.Open('../gdrivers/data/rgbsmall.tif')
+ src_ds = gdal.Open("../gdrivers/data/rgbsmall.tif")
r_band = src_ds.GetRasterBand(1)
g_band = src_ds.GetRasterBand(2)
b_band = src_ds.GetRasterBand(3)
- dst_ds = drv.Create('tmp/rgbsmall.tif', src_ds.RasterXSize,
- src_ds.RasterYSize, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create(
+ "tmp/rgbsmall.tif", src_ds.RasterXSize, src_ds.RasterYSize, 1, gdal.GDT_Byte
+ )
dst_band = dst_ds.GetRasterBand(1)
ct = gdal.ColorTable()
@@ -67,10 +67,18 @@ def test_dither_1():
dst_band = None
dst_ds = None
- assert ct.GetCount() == nColors, 'color table size wrong'
+ assert ct.GetCount() == nColors, "color table size wrong"
- ref_ct = [(36, 48, 32, 255), (92, 120, 20, 255), (88, 96, 20, 255), (92, 132, 56, 255),
- (0, 0, 0, 255), (96, 152, 24, 255), (60, 112, 32, 255), (164, 164, 108, 255)]
+ ref_ct = [
+ (36, 48, 32, 255),
+ (92, 120, 20, 255),
+ (88, 96, 20, 255),
+ (92, 132, 56, 255),
+ (0, 0, 0, 255),
+ (96, 152, 24, 255),
+ (60, 112, 32, 255),
+ (164, 164, 108, 255),
+ ]
for i in range(nColors):
ct_data = ct.GetColorEntry(i)
@@ -82,16 +90,11 @@ def test_dither_1():
for k in range(nColors):
print(ct.GetColorEntry(k))
print(ref_ct[k])
- pytest.fail('color table mismatch')
+ pytest.fail("color table mismatch")
- if cs == cs_expected or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/rgbsmall.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/rgbsmall.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
-
-
-
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
diff --git a/autotest/alg/fillnodata.py b/autotest/alg/fillnodata.py
index 738ccae0f100..0f70ff9e1692 100755
--- a/autotest/alg/fillnodata.py
+++ b/autotest/alg/fillnodata.py
@@ -28,118 +28,113 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-from osgeo import gdal
-
import struct
import pytest
+from osgeo import gdal
+
def test_fillnodata_1x1_no_nodata():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
- ar = struct.pack('B' * 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
+ ar = struct.pack("B" * 1, 1)
ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar)
- gdal.FillNodata(targetBand = ds.GetRasterBand(1),
- maxSearchDist = 1, maskBand = None, smoothingIterations = 0)
+ gdal.FillNodata(
+ targetBand=ds.GetRasterBand(1),
+ maxSearchDist=1,
+ maskBand=None,
+ smoothingIterations=0,
+ )
ar = ds.ReadRaster()
- ar = struct.unpack('B' * 1, ar)
+ ar = struct.unpack("B" * 1, ar)
assert ar == (1,)
fillnodata_tests = {
# (width, height, input_ar, maxSearchDist, expected, smoothingIterations):
- '1x1_nodata_but_pixel_valid': (1, 1, (1,), 1, (1,), 0),
- '1x1_nodata_pixel_invalid': (1, 1, (0,), 1, (0,), 0),
- '2x1_valid_invalid': (2, 1, (1, 0), 1, (1, 1), 0),
- '2x1_invalid_valid': (2, 1, (0, 1), 1, (1, 1), 0),
- '3x1_valid_invalid_valid': (3, 1, (2, 0, 4), 1, (2, 3, 4), 0),
- '4x1_valid_invalid_invalid_valid': (4, 1, (2, 0, 0, 4), 1, (2, 2, 4, 4), 0),
- '1x2_valid_invalid': (1, 2, (1, 0), 1, (1, 1), 0),
- '1x2_invalid_valid': (1, 2, (0, 1), 1, (1, 1), 0),
- '1x3_valid_invalid_valid': (1, 3, (2, 0, 4), 1, (2, 3, 4), 0),
- '1x4_valid_invalid_invalid_valid': (1, 4, (2, 0, 0, 4), 1, (2, 2, 4, 4), 0),
- '3x3_central_column_invalid': (
- 3, 3,
- (2, 0, 4,
- 4, 0, 6,
- 6, 0, 8),
+ "1x1_nodata_but_pixel_valid": (1, 1, (1,), 1, (1,), 0),
+ "1x1_nodata_pixel_invalid": (1, 1, (0,), 1, (0,), 0),
+ "2x1_valid_invalid": (2, 1, (1, 0), 1, (1, 1), 0),
+ "2x1_invalid_valid": (2, 1, (0, 1), 1, (1, 1), 0),
+ "3x1_valid_invalid_valid": (3, 1, (2, 0, 4), 1, (2, 3, 4), 0),
+ "4x1_valid_invalid_invalid_valid": (4, 1, (2, 0, 0, 4), 1, (2, 2, 4, 4), 0),
+ "1x2_valid_invalid": (1, 2, (1, 0), 1, (1, 1), 0),
+ "1x2_invalid_valid": (1, 2, (0, 1), 1, (1, 1), 0),
+ "1x3_valid_invalid_valid": (1, 3, (2, 0, 4), 1, (2, 3, 4), 0),
+ "1x4_valid_invalid_invalid_valid": (1, 4, (2, 0, 0, 4), 1, (2, 2, 4, 4), 0),
+ "3x3_central_column_invalid": (
+ 3,
+ 3,
+ (2, 0, 4, 4, 0, 6, 6, 0, 8),
1,
- (2, 3, 4,
- 4, 5, 6,
- 6, 7, 8), 0),
- '3x3_central_line_invalid': (
- 3, 3,
- (2, 3, 4,
- 0, 0, 0,
- 6, 7, 8),
+ (2, 3, 4, 4, 5, 6, 6, 7, 8),
+ 0,
+ ),
+ "3x3_central_line_invalid": (
+ 3,
+ 3,
+ (2, 3, 4, 0, 0, 0, 6, 7, 8),
1,
- (2, 3, 4,
- 4, 5, 6,
- 6, 7, 8),
- 0),
- '3x3_central_column_and_line_invalid': (
- 3, 3,
- (2, 0, 4,
- 0, 0, 0,
- 6, 0, 8),
+ (2, 3, 4, 4, 5, 6, 6, 7, 8),
+ 0,
+ ),
+ "3x3_central_column_and_line_invalid": (
+ 3,
+ 3,
+ (2, 0, 4, 0, 0, 0, 6, 0, 8),
1,
- (2, 3, 4,
- 4, 0, 6,
- 6, 7, 8),
- 0),
+ (2, 3, 4, 4, 0, 6, 6, 7, 8),
+ 0,
+ ),
# 1.5 > sqrt(2)
- '3x3_central_column_and_line_invalid_search_dist_1_5': (
- 3, 3,
- (2, 0, 4,
- 0, 0, 0,
- 6, 0, 8),
+ "3x3_central_column_and_line_invalid_search_dist_1_5": (
+ 3,
+ 3,
+ (2, 0, 4, 0, 0, 0, 6, 0, 8),
1.5,
- (2, 3, 4,
- 4, 5, 6,
- 6, 7, 8),
- 0),
- '4x4': (
- 4, 4,
- (20, 30, 40, 50,
- 30, 0, 0, 60,
- 40, 0, 0, 70,
- 50, 60, 70, 80),
+ (2, 3, 4, 4, 5, 6, 6, 7, 8),
+ 0,
+ ),
+ "4x4": (
+ 4,
+ 4,
+ (20, 30, 40, 50, 30, 0, 0, 60, 40, 0, 0, 70, 50, 60, 70, 80),
+ 1,
+ (20, 30, 40, 50, 30, 30, 50, 60, 40, 50, 70, 70, 50, 60, 70, 80),
+ 0,
+ ),
+ "4x4_smooth_1": (
+ 4,
+ 4,
+ (20, 30, 40, 50, 30, 0, 0, 60, 40, 0, 0, 70, 50, 60, 70, 80),
1,
- (20, 30, 40, 50,
- 30, 30, 50, 60,
- 40, 50, 70, 70,
- 50, 60, 70, 80),
- 0),
- '4x4_smooth_1': (
- 4, 4,
- (20, 30, 40, 50,
- 30, 0, 0, 60,
- 40, 0, 0, 70,
- 50, 60, 70, 80),
+ (20, 30, 40, 50, 30, 40, 50, 60, 40, 50, 60, 70, 50, 60, 70, 80),
1,
- (20, 30, 40, 50,
- 30, 40, 50, 60,
- 40, 50, 60, 70,
- 50, 60, 70, 80),
- 1),
+ ),
}
-@pytest.mark.parametrize('width, height, input_ar, maxSearchDist, expected, smoothingIterations',
- fillnodata_tests.values(),
- ids=fillnodata_tests.keys())
-def test_fillnodata_nodata(width, height, input_ar, maxSearchDist, expected, smoothingIterations):
- ds = gdal.GetDriverByName('MEM').Create('', width, height)
+@pytest.mark.parametrize(
+ "width, height, input_ar, maxSearchDist, expected, smoothingIterations",
+ fillnodata_tests.values(),
+ ids=fillnodata_tests.keys(),
+)
+def test_fillnodata_nodata(
+ width, height, input_ar, maxSearchDist, expected, smoothingIterations
+):
+ ds = gdal.GetDriverByName("MEM").Create("", width, height)
npixels = ds.RasterXSize * ds.RasterYSize
ds.GetRasterBand(1).SetNoDataValue(0)
- ar = struct.pack('B', input_ar[0])
+ ar = struct.pack("B", input_ar[0])
for i in range(1, len(input_ar)):
- ar += struct.pack('B', input_ar[i])
+ ar += struct.pack("B", input_ar[i])
ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar)
- gdal.FillNodata(targetBand = ds.GetRasterBand(1),
- maxSearchDist = maxSearchDist,
- maskBand = None,
- smoothingIterations = smoothingIterations)
+ gdal.FillNodata(
+ targetBand=ds.GetRasterBand(1),
+ maxSearchDist=maxSearchDist,
+ maskBand=None,
+ smoothingIterations=smoothingIterations,
+ )
ar = ds.ReadRaster()
- assert struct.unpack('B' * npixels, ar) == expected
+ assert struct.unpack("B" * npixels, ar) == expected
diff --git a/autotest/alg/polygonize.py b/autotest/alg/polygonize.py
index 7736b0e136ad..53621e7caed3 100755
--- a/autotest/alg/polygonize.py
+++ b/autotest/alg/polygonize.py
@@ -30,8 +30,8 @@
###############################################################################
-from collections import defaultdict
import struct
+from collections import defaultdict
import ogrtest
@@ -43,16 +43,16 @@
def test_polygonize_1(is_int_polygonize=True):
- src_ds = gdal.Open('data/polygonize_in.grd')
+ src_ds = gdal.Open("data/polygonize_in.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
@@ -60,23 +60,28 @@ def test_polygonize_1(is_int_polygonize=True):
result = gdal.Polygonize(src_band, src_band.GetMaskBand(), mem_layer, 0)
else:
result = gdal.FPolygonize(src_band, src_band.GetMaskBand(), mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the set of expected features in the output layer.
expected_feature_number = 13
assert mem_layer.GetFeatureCount() == expected_feature_number
- expect = [107, 123, 115, 115, 140, 148, 123, 140, 156,
- 100, 101, 102, 103]
+ expect = [107, 123, 115, 115, 140, 148, 123, 140, 156, 100, 101, 102, 103]
- tr = ogrtest.check_features_against_list(mem_layer, 'DN', expect)
+ tr = ogrtest.check_features_against_list(mem_layer, "DN", expect)
# check at least one geometry.
if tr:
- mem_layer.SetAttributeFilter('dn = 156')
+ mem_layer.SetAttributeFilter("dn = 156")
feat_read = mem_layer.GetNextFeature()
- if ogrtest.check_feature_geometry(feat_read, 'POLYGON ((440720 3751200,440720 3751020,440900 3751020,440900 3751200,440720 3751200),(440780 3751140,440780 3751080,440840 3751080,440840 3751140,440780 3751140))') != 0:
+ if (
+ ogrtest.check_feature_geometry(
+ feat_read,
+ "POLYGON ((440720 3751200,440720 3751020,440900 3751020,440900 3751200,440720 3751200),(440780 3751140,440780 3751080,440840 3751080,440840 3751140,440780 3751140))",
+ )
+ != 0
+ ):
tr = 0
feat_read.Destroy()
@@ -86,61 +91,80 @@ def test_polygonize_1(is_int_polygonize=True):
def test_polygonize_1_float():
return test_polygonize_1(is_int_polygonize=False)
+
###############################################################################
# Test a simple case without masking.
def test_polygonize_2():
- src_ds = gdal.Open('data/polygonize_in.grd')
+ src_ds = gdal.Open("data/polygonize_in.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, None, mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the set of expected features in the output layer.
expected_feature_number = 17
assert mem_layer.GetFeatureCount() == expected_feature_number
- expect = [107, 123, 115, 132, 115, 132, 140, 132, 148, 123, 140,
- 132, 156, 100, 101, 102, 103]
+ expect = [
+ 107,
+ 123,
+ 115,
+ 132,
+ 115,
+ 132,
+ 140,
+ 132,
+ 148,
+ 123,
+ 140,
+ 132,
+ 156,
+ 100,
+ 101,
+ 102,
+ 103,
+ ]
- tr = ogrtest.check_features_against_list(mem_layer, 'DN', expect)
+ tr = ogrtest.check_features_against_list(mem_layer, "DN", expect)
assert tr
+
###############################################################################
# A more involved case with a complex looping.
def test_polygonize_3():
- src_ds = gdal.Open('data/polygonize_in_2.grd')
+ src_ds = gdal.Open("data/polygonize_in_2.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, None, mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the expected count of features.
@@ -148,9 +172,15 @@ def test_polygonize_3():
assert mem_layer.GetFeatureCount() == expected_feature_number
# check at least one geometry.
- mem_layer.SetAttributeFilter('dn = 0')
+ mem_layer.SetAttributeFilter("dn = 0")
feat_read = mem_layer.GetNextFeature()
- if ogrtest.check_feature_geometry(feat_read, 'POLYGON ((6 -3,6 -40,19 -40,19 -39,25 -39,25 -38,27 -38,27 -37,28 -37,28 -36,29 -36,29 -35,30 -35,30 -34,31 -34,31 -25,30 -25,30 -24,29 -24,29 -23,28 -23,28 -22,27 -22,27 -21,24 -21,24 -20,23 -20,23 -19,26 -19,26 -18,27 -18,27 -17,28 -17,28 -16,29 -16,29 -8,28 -8,28 -7,27 -7,27 -6,26 -6,26 -5,24 -5,24 -4,18 -4,18 -3,6 -3),(11 -7,11 -18,23 -18,23 -17,24 -17,24 -16,25 -16,25 -9,24 -9,24 -8,23 -8,23 -7,11 -7),(11 -22,11 -36,24 -36,24 -35,26 -35,26 -33,27 -33,27 -25,26 -25,26 -23,24 -23,24 -22,11 -22))') != 0:
+ if (
+ ogrtest.check_feature_geometry(
+ feat_read,
+ "POLYGON ((6 -3,6 -40,19 -40,19 -39,25 -39,25 -38,27 -38,27 -37,28 -37,28 -36,29 -36,29 -35,30 -35,30 -34,31 -34,31 -25,30 -25,30 -24,29 -24,29 -23,28 -23,28 -22,27 -22,27 -21,24 -21,24 -20,23 -20,23 -19,26 -19,26 -18,27 -18,27 -17,28 -17,28 -16,29 -16,29 -8,28 -8,28 -7,27 -7,27 -6,26 -6,26 -5,24 -5,24 -4,18 -4,18 -3,6 -3),(11 -7,11 -18,23 -18,23 -17,24 -17,24 -16,25 -16,25 -9,24 -9,24 -8,23 -8,23 -7,11 -7),(11 -22,11 -36,24 -36,24 -35,26 -35,26 -33,27 -33,27 -25,26 -25,26 -23,24 -23,24 -22,11 -22))",
+ )
+ != 0
+ ):
print(feat_read.GetGeometryRef().ExportToWkt())
tr = 0
else:
@@ -159,61 +189,79 @@ def test_polygonize_3():
assert tr
+
###############################################################################
# Test a simple case without masking but with 8-connectedness.
def test_polygonize_4():
- src_ds = gdal.Open('data/polygonize_in.grd')
+ src_ds = gdal.Open("data/polygonize_in.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, None, mem_layer, 0, ["8CONNECTED=8"])
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the set of expected features in the output layer.
expected_feature_number = 16
assert mem_layer.GetFeatureCount() == expected_feature_number
- expect = [107, 123, 132, 115, 132, 115, 140, 148,
- 123, 140, 132, 156, 100, 101, 102, 103]
+ expect = [
+ 107,
+ 123,
+ 132,
+ 115,
+ 132,
+ 115,
+ 140,
+ 148,
+ 123,
+ 140,
+ 132,
+ 156,
+ 100,
+ 101,
+ 102,
+ 103,
+ ]
- tr = ogrtest.check_features_against_list(mem_layer, 'DN', expect)
+ tr = ogrtest.check_features_against_list(mem_layer, "DN", expect)
assert tr
+
###############################################################################
# Test a simple case with two inner wholes touchs at a vertex.
def test_polygonize_5():
- src_ds = gdal.Open('data/polygonize_in_3.grd')
+ src_ds = gdal.Open("data/polygonize_in_3.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, None, mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the set of expected features in the output layer.
@@ -222,9 +270,9 @@ def test_polygonize_5():
expect = [1, 0, 0]
expect_wkt = [
- 'POLYGON ((0 4,0 0,4 0,4 4,0 4),(1 3,1 2,2 2,2 3,1 3),(2 2,2 1,3 1,3 2,2 2))',
- 'POLYGON ((1 3,1 2,2 2,2 3,1 3))',
- 'POLYGON ((2 2,2 1,3 1,3 2,2 2))'
+ "POLYGON ((0 4,0 0,4 0,4 4,0 4),(1 3,1 2,2 2,2 3,1 3),(2 2,2 1,3 1,3 2,2 2))",
+ "POLYGON ((1 3,1 2,2 2,2 3,1 3))",
+ "POLYGON ((2 2,2 1,3 1,3 2,2 2))",
]
idx = 0
@@ -238,26 +286,28 @@ def test_polygonize_5():
idx += 1
+
###############################################################################
# Test a simple case with two inner wholes touchs at a vertex.
+
def test_polygonize_6():
- src_ds = gdal.Open('data/polygonize_in_4.grd')
+ src_ds = gdal.Open("data/polygonize_in_4.grd")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, None, mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# Confirm we get the set of expected features in the output layer.
@@ -266,9 +316,9 @@ def test_polygonize_6():
expect = [0, 0, 1]
expect_wkt = [
- 'POLYGON ((2 3,2 2,3 2,3 3,2 3))',
- 'POLYGON ((1 2,1 1,2 1,2 2,1 2))',
- 'POLYGON ((0 4,0 0,4 0,4 4,0 4),(2 3,2 2,3 2,3 3,2 3),(1 2,1 1,2 1,2 2,1 2))'
+ "POLYGON ((2 3,2 2,3 2,3 3,2 3))",
+ "POLYGON ((1 2,1 1,2 1,2 2,1 2))",
+ "POLYGON ((0 4,0 0,4 0,4 4,0 4),(2 3,2 2,3 2,3 3,2 3),(1 2,1 1,2 1,2 2,1 2))",
]
idx = 0
@@ -282,37 +332,41 @@ def test_polygonize_6():
idx += 1
+
###############################################################################
# Test a complex case to make sure the polygonized area match original raster.
+
def test_polygonize_7():
- src_ds = gdal.Open('data/polygonize_check_area.tif')
+ src_ds = gdal.Open("data/polygonize_check_area.tif")
src_band = src_ds.GetRasterBand(1)
# Create a memory OGR datasource to put results in.
- mem_drv = ogr.GetDriverByName('Memory')
- mem_ds = mem_drv.CreateDataSource('out')
+ mem_drv = ogr.GetDriverByName("Memory")
+ mem_ds = mem_drv.CreateDataSource("out")
- mem_layer = mem_ds.CreateLayer('poly', None, ogr.wkbPolygon)
+ mem_layer = mem_ds.CreateLayer("poly", None, ogr.wkbPolygon)
- fd = ogr.FieldDefn('DN', ogr.OFTInteger)
+ fd = ogr.FieldDefn("DN", ogr.OFTInteger)
mem_layer.CreateField(fd)
# run the algorithm.
result = gdal.Polygonize(src_band, src_band.GetMaskBand(), mem_layer, 0)
- assert result == 0, 'Polygonize failed'
+ assert result == 0, "Polygonize failed"
# collect raster image areas by DN value
transform = src_ds.GetGeoTransform()
pixel_area = abs(transform[1] * transform[5])
- data = struct.unpack('h' * src_ds.RasterXSize * src_ds.RasterYSize,
- src_band.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize))
+ data = struct.unpack(
+ "h" * src_ds.RasterXSize * src_ds.RasterYSize,
+ src_band.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize),
+ )
dn_area_raster = defaultdict(int)
for v in data:
- if v != src_band.GetNoDataValue():
+ if v != src_band.GetNoDataValue():
dn_area_raster[v] += pixel_area
# collect vector image areas by DN value
@@ -323,7 +377,9 @@ def test_polygonize_7():
geom = feature.GetGeometryRef()
dn_area_vector[id] += geom.GetArea()
- assert len(dn_area_raster) == len(dn_area_vector), 'DN value inconsistent'
+ assert len(dn_area_raster) == len(dn_area_vector), "DN value inconsistent"
for key, value in dn_area_raster.items():
- assert abs(value - dn_area_vector[key]) < pixel_area, 'polygonized vector area not match raster area'
+ assert (
+ abs(value - dn_area_vector[key]) < pixel_area
+ ), "polygonized vector area not match raster area"
diff --git a/autotest/alg/proximity.py b/autotest/alg/proximity.py
index d6bb761b7653..cfb6595ec0db 100755
--- a/autotest/alg/proximity.py
+++ b/autotest/alg/proximity.py
@@ -29,10 +29,9 @@
###############################################################################
-
+import pytest
from osgeo import gdal
-import pytest
###############################################################################
# Test a fairly default case.
@@ -40,11 +39,11 @@
def test_proximity_1():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/pat.tif')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/pat.tif")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/proximity_1.tif', 25, 25, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/proximity_1.tif", 25, 25, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.ComputeProximity(src_band, dst_band)
@@ -55,32 +54,32 @@ def test_proximity_1():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/proximity_1.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/proximity_1.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Try several options
def test_proximity_2():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/pat.tif')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/pat.tif")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/proximity_2.tif', 25, 25, 1, gdal.GDT_Float32)
+ dst_ds = drv.Create("tmp/proximity_2.tif", 25, 25, 1, gdal.GDT_Float32)
dst_band = dst_ds.GetRasterBand(1)
- gdal.ComputeProximity(src_band, dst_band,
- options=['VALUES=65,64',
- 'MAXDIST=12',
- 'NODATA=-1',
- 'FIXED_BUF_VAL=255'])
+ gdal.ComputeProximity(
+ src_band,
+ dst_band,
+ options=["VALUES=65,64", "MAXDIST=12", "NODATA=-1", "FIXED_BUF_VAL=255"],
+ )
cs_expected = 3256
cs = dst_band.Checksum()
@@ -88,32 +87,32 @@ def test_proximity_2():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/proximity_2.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/proximity_2.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Try input nodata option
def test_proximity_3():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/pat.tif')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/pat.tif")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/proximity_3.tif', 25, 25, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/proximity_3.tif", 25, 25, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
- gdal.ComputeProximity(src_band, dst_band,
- options=['VALUES=65,64',
- 'MAXDIST=12',
- 'USE_INPUT_NODATA=YES',
- 'NODATA=0'])
+ gdal.ComputeProximity(
+ src_band,
+ dst_band,
+ options=["VALUES=65,64", "MAXDIST=12", "USE_INPUT_NODATA=YES", "NODATA=0"],
+ )
cs_expected = 1465
cs = dst_band.Checksum()
@@ -121,13 +120,9 @@ def test_proximity_3():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/proximity_3.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/proximity_3.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
-
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
diff --git a/autotest/alg/rasterize.py b/autotest/alg/rasterize.py
index f9151d8d4542..f87799fcfaa3 100755
--- a/autotest/alg/rasterize.py
+++ b/autotest/alg/rasterize.py
@@ -30,11 +30,10 @@
import struct
-
import ogrtest
+import pytest
from osgeo import gdal, ogr, osr
-import pytest
###############################################################################
# Simple polygon rasterization.
@@ -48,20 +47,18 @@ def test_rasterize_1():
# Create a memory raster to rasterize into.
- target_ds = gdal.GetDriverByName('MEM').Create('', 100, 100, 3,
- gdal.GDT_Byte)
+ target_ds = gdal.GetDriverByName("MEM").Create("", 100, 100, 3, gdal.GDT_Byte)
target_ds.SetGeoTransform((1000, 1, 0, 1100, 0, -1))
target_ds.SetProjection(sr_wkt)
# Create a memory layer to rasterize from.
- rast_ogr_ds = \
- ogr.GetDriverByName('Memory').CreateDataSource('wrk')
- rast_mem_lyr = rast_ogr_ds.CreateLayer('poly', srs=sr)
+ rast_ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("wrk")
+ rast_mem_lyr = rast_ogr_ds.CreateLayer("poly", srs=sr)
# Add a polygon.
- wkt_geom = 'POLYGON((1020 1030,1020 1045,1050 1045,1050 1030,1020 1030))'
+ wkt_geom = "POLYGON((1020 1030,1020 1045,1050 1045,1050 1030,1020 1030))"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
@@ -70,7 +67,7 @@ def test_rasterize_1():
# Add a linestring.
- wkt_geom = 'LINESTRING(1000 1000, 1100 1050)'
+ wkt_geom = "LINESTRING(1000 1000, 1100 1050)"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
@@ -79,10 +76,11 @@ def test_rasterize_1():
# Run the algorithm.
- err = gdal.RasterizeLayer(target_ds, [3, 2, 1], rast_mem_lyr,
- burn_values=[256, 220, -1])
+ err = gdal.RasterizeLayer(
+ target_ds, [3, 2, 1], rast_mem_lyr, burn_values=[256, 220, -1]
+ )
- assert err == 0, 'got non-zero result code from RasterizeLayer'
+ assert err == 0, "got non-zero result code from RasterizeLayer"
# Check results.
@@ -90,8 +88,8 @@ def test_rasterize_1():
checksum = target_ds.GetRasterBand(2).Checksum()
if checksum != expected:
print(checksum)
- gdal.GetDriverByName('GTiff').CreateCopy('tmp/rasterize_1.tif', target_ds)
- pytest.fail('Did not get expected image checksum')
+ gdal.GetDriverByName("GTiff").CreateCopy("tmp/rasterize_1.tif", target_ds)
+ pytest.fail("Did not get expected image checksum")
_, maxval = target_ds.GetRasterBand(3).ComputeRasterMinMax()
assert maxval == 255
@@ -100,7 +98,6 @@ def test_rasterize_1():
assert minval == 0
-
###############################################################################
# Test rasterization with ALL_TOUCHED.
@@ -112,24 +109,27 @@ def test_rasterize_2():
# Create a memory raster to rasterize into.
- target_ds = gdal.GetDriverByName('MEM').Create('', 12, 12, 3,
- gdal.GDT_Byte)
+ target_ds = gdal.GetDriverByName("MEM").Create("", 12, 12, 3, gdal.GDT_Byte)
target_ds.SetGeoTransform((0, 1, 0, 12, 0, -1))
target_ds.SetProjection(sr_wkt)
# Create a memory layer to rasterize from.
- cutline_ds = ogr.Open('data/cutline.csv')
+ cutline_ds = ogr.Open("data/cutline.csv")
# Run the algorithm.
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- err = gdal.RasterizeLayer(target_ds, [3, 2, 1], cutline_ds.GetLayer(0),
- burn_values=[200, 220, 240],
- options=["ALL_TOUCHED=TRUE"])
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ err = gdal.RasterizeLayer(
+ target_ds,
+ [3, 2, 1],
+ cutline_ds.GetLayer(0),
+ burn_values=[200, 220, 240],
+ options=["ALL_TOUCHED=TRUE"],
+ )
gdal.PopErrorHandler()
- assert err == 0, 'got non-zero result code from RasterizeLayer'
+ assert err == 0, "got non-zero result code from RasterizeLayer"
# Check results.
@@ -137,8 +137,8 @@ def test_rasterize_2():
checksum = target_ds.GetRasterBand(2).Checksum()
if checksum != expected:
print(checksum)
- gdal.GetDriverByName('GTiff').CreateCopy('tmp/rasterize_2.tif', target_ds)
- pytest.fail('Did not get expected image checksum')
+ gdal.GetDriverByName("GTiff").CreateCopy("tmp/rasterize_2.tif", target_ds)
+ pytest.fail("Did not get expected image checksum")
###############################################################################
@@ -153,23 +153,23 @@ def test_rasterize_3():
# Create a memory raster to rasterize into.
- target_ds = gdal.GetDriverByName('MEM').Create('', 100, 100, 3,
- gdal.GDT_Byte)
+ target_ds = gdal.GetDriverByName("MEM").Create("", 100, 100, 3, gdal.GDT_Byte)
target_ds.SetGeoTransform((1000, 1, 0, 1100, 0, -1))
target_ds.SetProjection(sr_wkt)
# Create a memory layer to rasterize from.
- rast_ogr_ds = \
- ogr.GetDriverByName('Memory').CreateDataSource('wrk')
- rast_mem_lyr = rast_ogr_ds.CreateLayer('poly', srs=sr)
+ rast_ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("wrk")
+ rast_mem_lyr = rast_ogr_ds.CreateLayer("poly", srs=sr)
# Add polygons and linestrings.
- wkt_geom = ['POLYGON((1020 1030 40,1020 1045 30,1050 1045 20,1050 1030 35,1020 1030 40))',
- 'POLYGON((1010 1046 85,1015 1055 35,1055 1060 26,1054 1048 35,1010 1046 85))',
- 'POLYGON((1020 1076 190,1025 1085 35,1065 1090 26,1064 1078 35,1020 1076 190),(1023 1079 5,1061 1081 35,1062 1087 26,1028 1082 35,1023 1079 85))',
- 'LINESTRING(1005 1000 10, 1100 1050 120)',
- 'LINESTRING(1000 1000 150, 1095 1050 -5, 1080 1080 200)']
+ wkt_geom = [
+ "POLYGON((1020 1030 40,1020 1045 30,1050 1045 20,1050 1030 35,1020 1030 40))",
+ "POLYGON((1010 1046 85,1015 1055 35,1055 1060 26,1054 1048 35,1010 1046 85))",
+ "POLYGON((1020 1076 190,1025 1085 35,1065 1090 26,1064 1078 35,1020 1076 190),(1023 1079 5,1061 1081 35,1062 1087 26,1028 1082 35,1023 1079 85))",
+ "LINESTRING(1005 1000 10, 1100 1050 120)",
+ "LINESTRING(1000 1000 150, 1095 1050 -5, 1080 1080 200)",
+ ]
for g in wkt_geom:
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=g))
@@ -177,10 +177,15 @@ def test_rasterize_3():
# Run the algorithm.
- err = gdal.RasterizeLayer(target_ds, [3, 2, 1], rast_mem_lyr,
- burn_values=[10, 10, 55], options=["BURN_VALUE_FROM=Z"])
+ err = gdal.RasterizeLayer(
+ target_ds,
+ [3, 2, 1],
+ rast_mem_lyr,
+ burn_values=[10, 10, 55],
+ options=["BURN_VALUE_FROM=Z"],
+ )
- assert err == 0, 'got non-zero result code from RasterizeLayer'
+ assert err == 0, "got non-zero result code from RasterizeLayer"
# Check results.
@@ -188,8 +193,8 @@ def test_rasterize_3():
checksum = target_ds.GetRasterBand(2).Checksum()
if checksum != expected:
print(checksum)
- gdal.GetDriverByName('GTiff').CreateCopy('tmp/rasterize_3.tif', target_ds)
- pytest.fail('Did not get expected image checksum')
+ gdal.GetDriverByName("GTiff").CreateCopy("tmp/rasterize_3.tif", target_ds)
+ pytest.fail("Did not get expected image checksum")
###############################################################################
@@ -203,47 +208,48 @@ def test_rasterize_4():
sr = osr.SpatialReference(sr_wkt)
# Create a memory raster to rasterize into.
- target_ds = gdal.GetDriverByName('MEM').Create('', 100, 100, 3,
- gdal.GDT_Byte)
+ target_ds = gdal.GetDriverByName("MEM").Create("", 100, 100, 3, gdal.GDT_Byte)
target_ds.SetGeoTransform((1000, 1, 0, 1100, 0, -1))
target_ds.SetProjection(sr_wkt)
# Create a memory layer to rasterize from.
- rast_ogr_ds = ogr.GetDriverByName('Memory').CreateDataSource('wrk')
- rast_mem_lyr = rast_ogr_ds.CreateLayer('poly', srs=sr)
+ rast_ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("wrk")
+ rast_mem_lyr = rast_ogr_ds.CreateLayer("poly", srs=sr)
# Setup Schema
- ogrtest.quick_create_layer_def(rast_mem_lyr,
- [('CELSIUS', ogr.OFTReal)])
+ ogrtest.quick_create_layer_def(rast_mem_lyr, [("CELSIUS", ogr.OFTReal)])
# Add polygons and linestrings and a field named CELSIUS.
- wkt_geom = ['POLYGON((1020 1030 40,1020 1045 30,1050 1045 20,1050 1030 35,1020 1030 40))',
- 'POLYGON((1010 1046 85,1015 1055 35,1055 1060 26,1054 1048 35,1010 1046 85))',
- 'POLYGON((1020 1076 190,1025 1085 35,1065 1090 26,1064 1078 35,1020 1076 190),(1023 1079 5,1061 1081 35,1062 1087 26,1028 1082 35,1023 1079 85))',
- 'LINESTRING(1005 1000 10, 1100 1050 120)',
- 'LINESTRING(1000 1000 150, 1095 1050 -5, 1080 1080 200)']
+ wkt_geom = [
+ "POLYGON((1020 1030 40,1020 1045 30,1050 1045 20,1050 1030 35,1020 1030 40))",
+ "POLYGON((1010 1046 85,1015 1055 35,1055 1060 26,1054 1048 35,1010 1046 85))",
+ "POLYGON((1020 1076 190,1025 1085 35,1065 1090 26,1064 1078 35,1020 1076 190),(1023 1079 5,1061 1081 35,1062 1087 26,1028 1082 35,1023 1079 85))",
+ "LINESTRING(1005 1000 10, 1100 1050 120)",
+ "LINESTRING(1000 1000 150, 1095 1050 -5, 1080 1080 200)",
+ ]
celsius_field_values = [50, 255, 60, 100, 180]
i = 0
for g in wkt_geom:
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=g))
- feat.SetField('CELSIUS', celsius_field_values[i])
+ feat.SetField("CELSIUS", celsius_field_values[i])
rast_mem_lyr.CreateFeature(feat)
i = i + 1
# Run the algorithm.
- err = gdal.RasterizeLayer(target_ds, [1, 2, 3], rast_mem_lyr,
- options=["ATTRIBUTE=CELSIUS"])
+ err = gdal.RasterizeLayer(
+ target_ds, [1, 2, 3], rast_mem_lyr, options=["ATTRIBUTE=CELSIUS"]
+ )
- assert err == 0, 'got non-zero result code from RasterizeLayer'
+ assert err == 0, "got non-zero result code from RasterizeLayer"
# Check results.
expected = 16265
checksum = target_ds.GetRasterBand(2).Checksum()
if checksum != expected:
print(checksum)
- gdal.GetDriverByName('GTiff').CreateCopy('tmp/rasterize_4.tif', target_ds)
- pytest.fail('Did not get expected image checksum')
+ gdal.GetDriverByName("GTiff").CreateCopy("tmp/rasterize_4.tif", target_ds)
+ pytest.fail("Did not get expected image checksum")
###############################################################################
@@ -258,48 +264,50 @@ def test_rasterize_5():
# Create a memory raster to rasterize into.
- target_ds = gdal.GetDriverByName('MEM').Create('', 100, 100, 3,
- gdal.GDT_Byte)
+ target_ds = gdal.GetDriverByName("MEM").Create("", 100, 100, 3, gdal.GDT_Byte)
target_ds.SetGeoTransform((1000, 1, 0, 1100, 0, -1))
target_ds.SetProjection(sr_wkt)
# Create a memory layer to rasterize from.
- rast_ogr_ds = \
- ogr.GetDriverByName('Memory').CreateDataSource('wrk')
- rast_mem_lyr = rast_ogr_ds.CreateLayer('poly', srs=sr)
+ rast_ogr_ds = ogr.GetDriverByName("Memory").CreateDataSource("wrk")
+ rast_mem_lyr = rast_ogr_ds.CreateLayer("poly", srs=sr)
# Add polygons.
- wkt_geom = 'POLYGON((1020 1030,1020 1045,1050 1045,1050 1030,1020 1030))'
+ wkt_geom = "POLYGON((1020 1030,1020 1045,1050 1045,1050 1030,1020 1030))"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
rast_mem_lyr.CreateFeature(feat)
- wkt_geom = 'POLYGON((1045 1050,1055 1050,1055 1020,1045 1020,1045 1050))'
+ wkt_geom = "POLYGON((1045 1050,1055 1050,1055 1020,1045 1020,1045 1050))"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
rast_mem_lyr.CreateFeature(feat)
# Add linestrings.
- wkt_geom = 'LINESTRING(1000 1000, 1100 1050)'
+ wkt_geom = "LINESTRING(1000 1000, 1100 1050)"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
rast_mem_lyr.CreateFeature(feat)
- wkt_geom = 'LINESTRING(1005 1000, 1000 1050)'
+ wkt_geom = "LINESTRING(1005 1000, 1000 1050)"
feat = ogr.Feature(rast_mem_lyr.GetLayerDefn())
feat.SetGeometryDirectly(ogr.Geometry(wkt=wkt_geom))
rast_mem_lyr.CreateFeature(feat)
# Run the algorithm.
- err = gdal.RasterizeLayer(target_ds, [1, 2, 3], rast_mem_lyr,
- burn_values=[256, 110, -1],
- options=["MERGE_ALG=ADD"])
+ err = gdal.RasterizeLayer(
+ target_ds,
+ [1, 2, 3],
+ rast_mem_lyr,
+ burn_values=[256, 110, -1],
+ options=["MERGE_ALG=ADD"],
+ )
- assert err == 0, 'got non-zero result code from RasterizeLayer'
+ assert err == 0, "got non-zero result code from RasterizeLayer"
# Check results.
@@ -307,8 +315,8 @@ def test_rasterize_5():
checksum = target_ds.GetRasterBand(2).Checksum()
if checksum != expected:
print(checksum)
- gdal.GetDriverByName('GTiff').CreateCopy('tmp/rasterize_5.tif', target_ds)
- pytest.fail('Did not get expected image checksum')
+ gdal.GetDriverByName("GTiff").CreateCopy("tmp/rasterize_5.tif", target_ds)
+ pytest.fail("Did not get expected image checksum")
_, maxval = target_ds.GetRasterBand(1).ComputeRasterMinMax()
assert maxval == 255
@@ -320,21 +328,117 @@ def test_rasterize_5():
###############################################################################
# Test bug fix for #5580 (used to hang)
+
def test_rasterize_6():
# Setup working spatial reference
sr_wkt = 'LOCAL_CS["arbitrary"]'
sr = osr.SpatialReference(sr_wkt)
- wkb = struct.pack('B' * 93, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 5, 65, 28, 138, 141, 120, 239, 76, 104, 65, 87, 9, 185, 80, 29, 20, 208, 65, 28, 144, 191, 125, 165, 41, 54, 65, 87, 64, 14, 111, 103, 53, 124, 65, 30, 132, 127, 255, 255, 255, 254, 65, 87, 63, 241, 218, 241, 62, 127, 65, 30, 132, 128, 0, 0, 0, 0, 65, 87, 9, 156, 142, 126, 144, 236, 65, 28, 138, 141, 120, 239, 76, 104, 65, 87, 9, 185, 80, 29, 20, 208)
-
- data_source = ogr.GetDriverByName('MEMORY').CreateDataSource('')
- layer = data_source.CreateLayer('', sr, geom_type=ogr.wkbPolygon)
+ wkb = struct.pack(
+ "B" * 93,
+ 0,
+ 0,
+ 0,
+ 0,
+ 3,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 5,
+ 65,
+ 28,
+ 138,
+ 141,
+ 120,
+ 239,
+ 76,
+ 104,
+ 65,
+ 87,
+ 9,
+ 185,
+ 80,
+ 29,
+ 20,
+ 208,
+ 65,
+ 28,
+ 144,
+ 191,
+ 125,
+ 165,
+ 41,
+ 54,
+ 65,
+ 87,
+ 64,
+ 14,
+ 111,
+ 103,
+ 53,
+ 124,
+ 65,
+ 30,
+ 132,
+ 127,
+ 255,
+ 255,
+ 255,
+ 254,
+ 65,
+ 87,
+ 63,
+ 241,
+ 218,
+ 241,
+ 62,
+ 127,
+ 65,
+ 30,
+ 132,
+ 128,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65,
+ 87,
+ 9,
+ 156,
+ 142,
+ 126,
+ 144,
+ 236,
+ 65,
+ 28,
+ 138,
+ 141,
+ 120,
+ 239,
+ 76,
+ 104,
+ 65,
+ 87,
+ 9,
+ 185,
+ 80,
+ 29,
+ 20,
+ 208,
+ )
+
+ data_source = ogr.GetDriverByName("MEMORY").CreateDataSource("")
+ layer = data_source.CreateLayer("", sr, geom_type=ogr.wkbPolygon)
feature = ogr.Feature(layer.GetLayerDefn())
feature.SetGeometryDirectly(ogr.CreateGeometryFromWkb(wkb))
layer.CreateFeature(feature)
- mask_ds = gdal.GetDriverByName('Mem').Create('', 5000, 5000, 1, gdal.GDT_Byte)
+ mask_ds = gdal.GetDriverByName("Mem").Create("", 5000, 5000, 1, gdal.GDT_Byte)
mask_ds.SetGeoTransform([499000, 0.4, 0, 6095000, 0, -0.4])
mask_ds.SetProjection(sr_wkt)
@@ -345,58 +449,250 @@ def test_rasterize_6():
# Test rasterizing linestring with multiple segments and MERGE_ALG=ADD
# Tests https://github.com/OSGeo/gdal/issues/1307
+
def test_rasterize_merge_alg_add_multiple_segment_linestring():
# Setup working spatial reference
sr_wkt = 'LOCAL_CS["arbitrary"]'
sr = osr.SpatialReference(sr_wkt)
- data_source = ogr.GetDriverByName('MEMORY').CreateDataSource('')
- layer = data_source.CreateLayer('', sr, geom_type=ogr.wkbLineString)
+ data_source = ogr.GetDriverByName("MEMORY").CreateDataSource("")
+ layer = data_source.CreateLayer("", sr, geom_type=ogr.wkbLineString)
feature = ogr.Feature(layer.GetLayerDefn())
# Diagonal segments
- feature.SetGeometryDirectly(ogr.CreateGeometryFromWkt('LINESTRING(0.5 0.5,100.5 50.5,199.5 99.5)'))
+ feature.SetGeometryDirectly(
+ ogr.CreateGeometryFromWkt("LINESTRING(0.5 0.5,100.5 50.5,199.5 99.5)")
+ )
layer.CreateFeature(feature)
feature = ogr.Feature(layer.GetLayerDefn())
# Vertical and horizontal segments
- feature.SetGeometryDirectly(ogr.CreateGeometryFromWkt('LINESTRING(30.5 40.5,30.5 70.5,50.5 70.5)'))
+ feature.SetGeometryDirectly(
+ ogr.CreateGeometryFromWkt("LINESTRING(30.5 40.5,30.5 70.5,50.5 70.5)")
+ )
layer.CreateFeature(feature)
- ds = gdal.GetDriverByName('Mem').Create('', 10, 10, 1, gdal.GDT_Byte)
+ ds = gdal.GetDriverByName("Mem").Create("", 10, 10, 1, gdal.GDT_Byte)
ds.SetGeoTransform([0, 20, 0, 100, 0, -10])
ds.SetProjection(sr_wkt)
ds.GetRasterBand(1).Fill(0)
gdal.RasterizeLayer(ds, [1], layer, burn_values=[1], options=["MERGE_ALG=ADD"])
- got = struct.unpack('B' * 100, ds.ReadRaster())
- expected = (0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
- assert got == expected, '%s' % str(got)
+ got = struct.unpack("B" * 100, ds.ReadRaster())
+ expected = (
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ )
+ assert got == expected, "%s" % str(got)
ds.GetRasterBand(1).Fill(0)
- gdal.RasterizeLayer(ds, [1], layer, burn_values=[1], options=["MERGE_ALG=ADD", "ALL_TOUCHED"])
-
- got = struct.unpack('B' * 100, ds.ReadRaster())
- expected = (0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
- assert got == expected, '%s' % str(got)
+ gdal.RasterizeLayer(
+ ds, [1], layer, burn_values=[1], options=["MERGE_ALG=ADD", "ALL_TOUCHED"]
+ )
+
+ got = struct.unpack("B" * 100, ds.ReadRaster())
+ expected = (
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ )
+ assert got == expected, "%s" % str(got)
+
###############################################################################
# Test rasterizing polygon with horizontal segments and MERGE_ALG=ADD
@@ -404,33 +700,56 @@ def test_rasterize_merge_alg_add_multiple_segment_linestring():
# the winding order
-@pytest.mark.parametrize("wkt",
- ['POLYGON((0 0,0 1,1 1,1 0,0 0))',
- 'POLYGON((0 0,1 0,1 1,0 1,0 0))'],
- ids=['clockwise', 'counterclockwise'])
+@pytest.mark.parametrize(
+ "wkt",
+ ["POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((0 0,1 0,1 1,0 1,0 0))"],
+ ids=["clockwise", "counterclockwise"],
+)
def test_rasterize_merge_alg_add_polygon(wkt):
# Setup working spatial reference
sr_wkt = 'LOCAL_CS["arbitrary"]'
sr = osr.SpatialReference(sr_wkt)
- data_source = ogr.GetDriverByName('MEMORY').CreateDataSource('')
- layer = data_source.CreateLayer('', sr, geom_type=ogr.wkbPolygon)
+ data_source = ogr.GetDriverByName("MEMORY").CreateDataSource("")
+ layer = data_source.CreateLayer("", sr, geom_type=ogr.wkbPolygon)
feature = ogr.Feature(layer.GetLayerDefn())
feature.SetGeometryDirectly(ogr.CreateGeometryFromWkt(wkt))
layer.CreateFeature(feature)
- ds = gdal.GetDriverByName('Mem').Create('', 5, 5, 1, gdal.GDT_Byte)
+ ds = gdal.GetDriverByName("Mem").Create("", 5, 5, 1, gdal.GDT_Byte)
ds.SetGeoTransform([-0.125, 0.25, 0, 1.125, 0, -0.25])
ds.SetProjection(sr_wkt)
ds.GetRasterBand(1).Fill(0)
gdal.RasterizeLayer(ds, [1], layer, burn_values=[10], options=["MERGE_ALG=ADD"])
- got = struct.unpack('B' * 25, ds.ReadRaster())
- expected = (0, 10, 10, 10, 10,
- 0, 10, 10, 10, 10,
- 0, 10, 10, 10, 10,
- 0, 10, 10, 10, 10,
- 0, 10, 10, 10, 10,)
- assert got == expected, '%s' % str(got)
+ got = struct.unpack("B" * 25, ds.ReadRaster())
+ expected = (
+ 0,
+ 10,
+ 10,
+ 10,
+ 10,
+ 0,
+ 10,
+ 10,
+ 10,
+ 10,
+ 0,
+ 10,
+ 10,
+ 10,
+ 10,
+ 0,
+ 10,
+ 10,
+ 10,
+ 10,
+ 0,
+ 10,
+ 10,
+ 10,
+ 10,
+ )
+ assert got == expected, "%s" % str(got)
diff --git a/autotest/alg/reproject.py b/autotest/alg/reproject.py
index b3392b6fb379..5df6b2e1b868 100755
--- a/autotest/alg/reproject.py
+++ b/autotest/alg/reproject.py
@@ -30,22 +30,22 @@
###############################################################################
-
-
-from osgeo import gdal
-from osgeo import osr
import pytest
+from osgeo import gdal, osr
+
###############################################################################
# Test a trivial case.
def test_reproject_1():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('../gcore/data/byte.tif')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("../gcore/data/byte.tif")
- dst_ds = drv.Create('tmp/byte.tif', src_ds.RasterXSize, src_ds.RasterYSize, gdal.GDT_Byte)
+ dst_ds = drv.Create(
+ "tmp/byte.tif", src_ds.RasterXSize, src_ds.RasterYSize, gdal.GDT_Byte
+ )
dst_ds.SetProjection(src_ds.GetProjectionRef())
dst_ds.SetGeoTransform(src_ds.GetGeoTransform())
@@ -56,12 +56,13 @@ def test_reproject_1():
dst_ds = None
- drv.Delete('tmp/byte.tif')
+ drv.Delete("tmp/byte.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Test a real reprojection case.
@@ -74,11 +75,20 @@ def test_reproject_2():
sr2 = osr.SpatialReference()
sr2.ImportFromEPSG(4326)
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('../gcore/data/byte.tif')
-
- dst_ds = drv.Create('tmp/byte_4326.tif', 22, 18, gdal.GDT_Byte)
- dst_ds.SetGeoTransform([-117.641169915168746, 0.000598105625684, 0, 33.900668703925191, 0, -0.000598105625684])
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("../gcore/data/byte.tif")
+
+ dst_ds = drv.Create("tmp/byte_4326.tif", 22, 18, gdal.GDT_Byte)
+ dst_ds.SetGeoTransform(
+ [
+ -117.641169915168746,
+ 0.000598105625684,
+ 0,
+ 33.900668703925191,
+ 0,
+ -0.000598105625684,
+ ]
+ )
gdal.ReprojectImage(src_ds, dst_ds, sr.ExportToWkt(), sr2.ExportToWkt())
@@ -87,60 +97,65 @@ def test_reproject_2():
dst_ds = None
- drv.Delete('tmp/byte_4326.tif')
+ drv.Delete("tmp/byte_4326.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Test nodata values
def test_reproject_3():
- data = '\x02\x7f\x7f\x02\x02\x7f\x7f\x02\x02\x7f\x7f\x02'
- src_ds = gdal.GetDriverByName('MEM').Create('', 4, 3)
+ data = "\x02\x7f\x7f\x02\x02\x7f\x7f\x02\x02\x7f\x7f\x02"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 4, 3)
src_ds.GetRasterBand(1).WriteRaster(0, 0, 4, 3, data)
src_ds.GetRasterBand(1).SetNoDataValue(2)
src_ds.SetGeoTransform([10, 1, 0, 10, 0, -1])
- dst_ds = gdal.GetDriverByName('MEM').Create('', 6, 3)
+ dst_ds = gdal.GetDriverByName("MEM").Create("", 6, 3)
dst_ds.GetRasterBand(1).SetNoDataValue(3)
dst_ds.GetRasterBand(1).Fill(3)
- dst_ds.SetGeoTransform([10, 2. / 3., 0, 10, 0, -1])
+ dst_ds.SetGeoTransform([10, 2.0 / 3.0, 0, 10, 0, -1])
- gdal.ReprojectImage(src_ds, dst_ds, '', '', gdal.GRA_Bilinear)
- got_data = dst_ds.GetRasterBand(1).ReadRaster(0, 0, 6, 3).decode('latin1')
- expected_data = '\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03'
+ gdal.ReprojectImage(src_ds, dst_ds, "", "", gdal.GRA_Bilinear)
+ got_data = dst_ds.GetRasterBand(1).ReadRaster(0, 0, 6, 3).decode("latin1")
+ expected_data = (
+ "\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03"
+ )
if got_data != expected_data:
import struct
- pytest.fail(struct.unpack('B' * 18, got_data))
-
+ pytest.fail(struct.unpack("B" * 18, got_data))
+
+
###############################################################################
# Test warp options
def test_reproject_4():
- data = '\x02\x7f\x7f\x02\x02\x7f\x7f\x02\x02\x7f\x7f\x02'
- src_ds = gdal.GetDriverByName('MEM').Create('', 4, 3)
+ data = "\x02\x7f\x7f\x02\x02\x7f\x7f\x02\x02\x7f\x7f\x02"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 4, 3)
src_ds.GetRasterBand(1).WriteRaster(0, 0, 4, 3, data)
src_ds.GetRasterBand(1).SetNoDataValue(2)
src_ds.SetGeoTransform([10, 1, 0, 10, 0, -1])
- dst_ds = gdal.GetDriverByName('MEM').Create('', 6, 3)
+ dst_ds = gdal.GetDriverByName("MEM").Create("", 6, 3)
dst_ds.GetRasterBand(1).SetNoDataValue(3)
- dst_ds.SetGeoTransform([10, 2. / 3., 0, 10, 0, -1])
-
- gdal.ReprojectImage(src_ds, dst_ds, '', '', gdal.GRA_Bilinear, options=['INIT_DEST=NO_DATA'])
- got_data = dst_ds.GetRasterBand(1).ReadRaster(0, 0, 6, 3).decode('latin1')
- expected_data = '\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03'
+ dst_ds.SetGeoTransform([10, 2.0 / 3.0, 0, 10, 0, -1])
+
+ gdal.ReprojectImage(
+ src_ds, dst_ds, "", "", gdal.GRA_Bilinear, options=["INIT_DEST=NO_DATA"]
+ )
+ got_data = dst_ds.GetRasterBand(1).ReadRaster(0, 0, 6, 3).decode("latin1")
+ expected_data = (
+ "\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03\x03\x7f\x7f\x7f\x03\x03"
+ )
if got_data != expected_data:
import struct
- pytest.fail(struct.unpack('B' * 18, got_data))
-
-
-
+ pytest.fail(struct.unpack("B" * 18, got_data))
diff --git a/autotest/alg/sieve.py b/autotest/alg/sieve.py
index efe2a98b0f9f..d8779f40e00a 100755
--- a/autotest/alg/sieve.py
+++ b/autotest/alg/sieve.py
@@ -30,10 +30,9 @@
###############################################################################
-
+import pytest
from osgeo import gdal
-import pytest
###############################################################################
# Test a fairly default case.
@@ -41,11 +40,11 @@
def test_sieve_1():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/sieve_src.grd')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/sieve_src.grd")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/sieve_1.tif', 5, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/sieve_1.tif", 5, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, None, dst_band, 2, 4)
@@ -56,25 +55,25 @@ def test_sieve_1():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/sieve_1.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/sieve_1.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Try eight connected.
def test_sieve_2():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/sieve_src.grd')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/sieve_src.grd")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/sieve_2.tif', 5, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/sieve_2.tif", 5, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, None, dst_band, 2, 8)
@@ -85,25 +84,25 @@ def test_sieve_2():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/sieve_2.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/sieve_2.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Do a sieve resulting in unmergable polygons.
def test_sieve_3():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/unmergable.grd')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/unmergable.grd")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/sieve_3.tif', 5, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/sieve_3.tif", 5, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, None, dst_band, 2, 8)
@@ -115,25 +114,25 @@ def test_sieve_3():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/sieve_3.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/sieve_3.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Try the bug 2634 simplified data.
def test_sieve_4():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/sieve_2634.grd')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/sieve_2634.grd")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/sieve_4.tif', 10, 8, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/sieve_4.tif", 10, 8, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, None, dst_band, 2, 4)
@@ -144,26 +143,26 @@ def test_sieve_4():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/sieve_4.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/sieve_4.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
###############################################################################
# Same as sieve_1, but we provide a mask band
# This should yield the same result as we use an opaque band
+
def test_sieve_5():
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('data/sieve_src.grd')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("data/sieve_src.grd")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('tmp/sieve_1.tif', 5, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("tmp/sieve_1.tif", 5, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, dst_band.GetMaskBand(), dst_band, 2, 4)
@@ -174,14 +173,14 @@ def test_sieve_5():
dst_band = None
dst_ds = None
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('tmp/sieve_1.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("tmp/sieve_1.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Performance test. When increasing the 'size' parameter, performance
# should stay roughly linear with the number of pixels (i.e. size^2)
@@ -197,7 +196,7 @@ def test_sieve_6():
# Try 3002. Should run in less than 10 seconds
# size = 3002
size = 102
- ds = gdal.GetDriverByName('MEM').Create('', size + 1, size)
+ ds = gdal.GetDriverByName("MEM").Create("", size + 1, size)
ar = numpy.zeros((size, size + 1), dtype=numpy.uint8)
for i in range(size):
for j in range(int(size / 3)):
@@ -216,17 +215,19 @@ def test_sieve_6():
cs = band.Checksum()
if (size == 102 and cs != 60955) or (size == 3002 and cs != 63178):
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
-
###############################################################################
# Test with nodata
def test_sieve_7():
- gdal.FileFromMemBuffer('/vsimem/sieve_7.asc', """ncols 7
+ gdal.FileFromMemBuffer(
+ "/vsimem/sieve_7.asc",
+ """ncols 7
nrows 7
xllcorner 440720.000000000000
yllcorner 3750120.000000000000
@@ -239,13 +240,14 @@ def test_sieve_7():
0 1 1 2 1 2 1
0 1 1 2 2 2 1
0 1 1 1 1 1 1
- """)
+ """,
+ )
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('/vsimem/sieve_7.asc')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("/vsimem/sieve_7.asc")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('/vsimem/sieve_7.tif', 7, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("/vsimem/sieve_7.tif", 7, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, src_band.GetMaskBand(), dst_band, 4, 4)
@@ -256,11 +258,10 @@ def test_sieve_7():
dst_band = None
dst_ds = None
- gdal.Unlink('/vsimem/sieve_7.asc')
+ gdal.Unlink("/vsimem/sieve_7.asc")
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('/vsimem/sieve_7.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("/vsimem/sieve_7.tif")
# Expected:
# [[0 0 0 0 0 0 0]
@@ -272,17 +273,19 @@ def test_sieve_7():
# [0 1 1 1 1 1 1]]
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
+
+
###############################################################################
# Test propagation in our search of biggest neighbour
def test_sieve_8():
- gdal.FileFromMemBuffer('/vsimem/sieve_8.asc',
- """ncols 7
+ gdal.FileFromMemBuffer(
+ "/vsimem/sieve_8.asc",
+ """ncols 7
nrows 7
xllcorner 440720.000000000000
yllcorner 3750120.000000000000
@@ -294,13 +297,14 @@ def test_sieve_8():
0 0 7 6 5 9 0
0 0 0 0 9 9 0
0 0 0 0 0 0 0
- """)
+ """,
+ )
- drv = gdal.GetDriverByName('GTiff')
- src_ds = gdal.Open('/vsimem/sieve_8.asc')
+ drv = gdal.GetDriverByName("GTiff")
+ src_ds = gdal.Open("/vsimem/sieve_8.asc")
src_band = src_ds.GetRasterBand(1)
- dst_ds = drv.Create('/vsimem/sieve_8.tif', 7, 7, 1, gdal.GDT_Byte)
+ dst_ds = drv.Create("/vsimem/sieve_8.tif", 7, 7, 1, gdal.GDT_Byte)
dst_band = dst_ds.GetRasterBand(1)
gdal.SieveFilter(src_band, src_band.GetMaskBand(), dst_band, 4, 4)
@@ -312,15 +316,11 @@ def test_sieve_8():
dst_band = None
dst_ds = None
- gdal.Unlink('/vsimem/sieve_8.asc')
+ gdal.Unlink("/vsimem/sieve_8.asc")
- if cs == cs_expected \
- or gdal.GetConfigOption('CPL_DEBUG', 'OFF') != 'ON':
- drv.Delete('/vsimem/sieve_8.tif')
+ if cs == cs_expected or gdal.GetConfigOption("CPL_DEBUG", "OFF") != "ON":
+ drv.Delete("/vsimem/sieve_8.tif")
if cs != cs_expected:
- print('Got: ', cs)
- pytest.fail('got wrong checksum')
-
-
-
+ print("Got: ", cs)
+ pytest.fail("got wrong checksum")
diff --git a/autotest/alg/transformgeoloc.py b/autotest/alg/transformgeoloc.py
index 670fce9b3685..ebdadc15052c 100755
--- a/autotest/alg/transformgeoloc.py
+++ b/autotest/alg/transformgeoloc.py
@@ -31,11 +31,10 @@
###############################################################################
-
-from osgeo import gdal
-from osgeo import osr
import pytest
+from osgeo import gdal, osr
+
###############################################################################
# Test a fairly default case.
@@ -49,13 +48,11 @@ def test_transformgeoloc_1():
# Setup 2x2 geolocation arrays in a memory dataset with lat/long values.
- drv = gdal.GetDriverByName('MEM')
- geoloc_ds = drv.Create('geoloc_1', 2, 2, 3, gdal.GDT_Float64)
+ drv = gdal.GetDriverByName("MEM")
+ geoloc_ds = drv.Create("geoloc_1", 2, 2, 3, gdal.GDT_Float64)
- lon_array = numpy.asarray([[-117.0, -116.0],
- [-116.5, -115.5]])
- lat_array = numpy.asarray([[45.0, 45.5],
- [44.0, 44.5]])
+ lon_array = numpy.asarray([[-117.0, -116.0], [-116.5, -115.5]])
+ lat_array = numpy.asarray([[45.0, 45.5], [44.0, 44.5]])
geoloc_ds.GetRasterBand(1).WriteArray(lon_array)
geoloc_ds.GetRasterBand(2).WriteArray(lat_array)
@@ -63,32 +60,31 @@ def test_transformgeoloc_1():
# Create a wgs84 to utm transformer.
- wgs84_wkt = osr.GetUserInputAsWKT('WGS84')
- utm_wkt = osr.GetUserInputAsWKT('+proj=utm +zone=11 +datum=WGS84')
+ wgs84_wkt = osr.GetUserInputAsWKT("WGS84")
+ utm_wkt = osr.GetUserInputAsWKT("+proj=utm +zone=11 +datum=WGS84")
- ll_utm_transformer = gdal.Transformer(None, None,
- ['SRC_SRS=' + wgs84_wkt,
- 'DST_SRS=' + utm_wkt])
+ ll_utm_transformer = gdal.Transformer(
+ None, None, ["SRC_SRS=" + wgs84_wkt, "DST_SRS=" + utm_wkt]
+ )
# transform the geoloc dataset in place.
status = ll_utm_transformer.TransformGeolocations(
geoloc_ds.GetRasterBand(1),
geoloc_ds.GetRasterBand(2),
- geoloc_ds.GetRasterBand(3))
+ geoloc_ds.GetRasterBand(3),
+ )
assert status == 0
expected = numpy.asarray(
- [[[ 500000. , 578126.73752062],
- [ 540087.07398217, 619246.88515195]],
-
- [[4982950.40022655, 5038982.81207855],
- [4871994.34702622, 4928503.38229753]],
-
- [[ 0. , 0. ],
- [ 0. , 0. ]]])
+ [
+ [[500000.0, 578126.73752062], [540087.07398217, 619246.88515195]],
+ [
+ [4982950.40022655, 5038982.81207855],
+ [4871994.34702622, 4928503.38229753],
+ ],
+ [[0.0, 0.0], [0.0, 0.0]],
+ ]
+ )
assert numpy.allclose(geoloc_ds.ReadAsArray(), expected)
-
-
-
diff --git a/autotest/alg/warp.py b/autotest/alg/warp.py
index bfca8a69f0ce..0bf8477f61e0 100755
--- a/autotest/alg/warp.py
+++ b/autotest/alg/warp.py
@@ -34,12 +34,12 @@
import os
import shutil
-
-from osgeo import gdal, osr
+import struct
import gdaltest
import pytest
-import struct
+
+from osgeo import gdal, osr
###############################################################################
# Verify that we always getting the same image when warping.
@@ -50,404 +50,406 @@
def test_warp_1():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_near.vrt')
- ref_ds = gdal.Open('data/utmsmall_near.tiff')
+ ds = gdal.Open("data/utmsmall_near.vrt")
+ ref_ds = gdal.Open("data/utmsmall_near.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_1_short():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_near_short.vrt')
- ref_ds = gdal.Open('data/utmsmall_near.tiff')
+ ds = gdal.Open("data/utmsmall_near_short.vrt")
+ ref_ds = gdal.Open("data/utmsmall_near.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_1_ushort():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_near_ushort.vrt')
- ref_ds = gdal.Open('data/utmsmall_near.tiff')
+ ds = gdal.Open("data/utmsmall_near_ushort.vrt")
+ ref_ds = gdal.Open("data/utmsmall_near.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_1_float():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_near_float.vrt')
- ref_ds = gdal.Open('data/utmsmall_near.tiff')
+ ds = gdal.Open("data/utmsmall_near_float.vrt")
+ ref_ds = gdal.Open("data/utmsmall_near.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_2():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_blinear.vrt')
- ref_ds = gdal.Open('data/utmsmall_blinear.tiff')
+ ds = gdal.Open("data/utmsmall_blinear.vrt")
+ ref_ds = gdal.Open("data/utmsmall_blinear.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_2_short():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_blinear_short.vrt')
- ref_ds = gdal.Open('data/utmsmall_blinear.tiff')
+ ds = gdal.Open("data/utmsmall_blinear_short.vrt")
+ ref_ds = gdal.Open("data/utmsmall_blinear.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_2_ushort():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_blinear_ushort.vrt')
- ref_ds = gdal.Open('data/utmsmall_blinear.tiff')
+ ds = gdal.Open("data/utmsmall_blinear_ushort.vrt")
+ ref_ds = gdal.Open("data/utmsmall_blinear.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_2_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_bilinear_2.vrt')
- ref_ds = gdal.Open('data/utmsmall_bilinear_2.tif')
+ ds = gdal.Open("data/utmsmall_bilinear_2.vrt")
+ ref_ds = gdal.Open("data/utmsmall_bilinear_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_3():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubic.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubic.tiff')
+ ds = gdal.Open("data/utmsmall_cubic.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubic.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_3_short():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubic_short.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubic.tiff')
+ ds = gdal.Open("data/utmsmall_cubic_short.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubic.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_3_ushort():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubic_ushort.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubic.tiff')
+ ds = gdal.Open("data/utmsmall_cubic_ushort.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubic.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_3_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubic_2.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubic_2.tif')
+ ds = gdal.Open("data/utmsmall_cubic_2.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubic_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_3_float_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubic_2_float.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubic_2.tif')
+ ds = gdal.Open("data/utmsmall_cubic_2_float.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubic_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline.tiff')
+ ds = gdal.Open("data/utmsmall_cubicspline.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4_short():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline_short.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline.tiff')
+ ds = gdal.Open("data/utmsmall_cubicspline_short.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4_ushort():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline_ushort.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline.tiff')
+ ds = gdal.Open("data/utmsmall_cubicspline_ushort.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline_2.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline_2.tif')
+ ds = gdal.Open("data/utmsmall_cubicspline_2.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4_short_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline_wt_short.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline_2.tif')
+ ds = gdal.Open("data/utmsmall_cubicspline_wt_short.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_4_float_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_cubicspline_wt_float32.vrt')
- ref_ds = gdal.Open('data/utmsmall_cubicspline_2.tif')
+ ds = gdal.Open("data/utmsmall_cubicspline_wt_float32.vrt")
+ ref_ds = gdal.Open("data/utmsmall_cubicspline_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_5():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_lanczos.vrt')
- ref_ds = gdal.Open('data/utmsmall_lanczos.tiff')
+ ds = gdal.Open("data/utmsmall_lanczos.vrt")
+ ref_ds = gdal.Open("data/utmsmall_lanczos.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_5_downsize():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_lanczos_2.vrt')
- ref_ds = gdal.Open('data/utmsmall_lanczos_2.tif')
+ ds = gdal.Open("data/utmsmall_lanczos_2.vrt")
+ ref_ds = gdal.Open("data/utmsmall_lanczos_2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Downsampling
def test_warp_6():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'utmsmall_ds_near.vrt', 1, 4770)
+ tst = gdaltest.GDALTest("VRT", "utmsmall_ds_near.vrt", 1, 4770)
return tst.testOpen()
def test_warp_7():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'utmsmall_ds_blinear.vrt', 1, 4755)
+ tst = gdaltest.GDALTest("VRT", "utmsmall_ds_blinear.vrt", 1, 4755)
return tst.testOpen()
def test_warp_8():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'utmsmall_ds_cubic.vrt', 1, 4833)
+ tst = gdaltest.GDALTest("VRT", "utmsmall_ds_cubic.vrt", 1, 4833)
return tst.testOpen()
def test_warp_9():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_ds_cubicspline.vrt')
- ref_ds = gdal.Open('data/utmsmall_ds_cubicspline.tiff')
+ ds = gdal.Open("data/utmsmall_ds_cubicspline.vrt")
+ ref_ds = gdal.Open("data/utmsmall_ds_cubicspline.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_10():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_ds_lanczos.vrt')
- ref_ds = gdal.Open('data/utmsmall_ds_lanczos.tiff')
+ ds = gdal.Open("data/utmsmall_ds_lanczos.vrt")
+ ref_ds = gdal.Open("data/utmsmall_ds_lanczos.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
def test_warp_11():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'rgbsmall_dstalpha.vrt', 4, 30658)
+ tst = gdaltest.GDALTest("VRT", "rgbsmall_dstalpha.vrt", 4, 30658)
return tst.testOpen()
+
# Test warping an empty RGBA with bilinear resampling
def test_warp_12():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/empty.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/empty.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(0)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -455,24 +457,25 @@ def test_warp_12():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'empty_rb.vrt', 4, 0)
+ tst = gdaltest.GDALTest("VRT", "empty_rb.vrt", 4, 0)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/empty.tif')
+ gdaltest.tiff_drv.Delete("tmp/empty.tif")
return ret
+
# Test warping an empty RGBA with cubic resampling
def test_warp_13():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/empty.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/empty.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(0)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -480,24 +483,25 @@ def test_warp_13():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'empty_rc.vrt', 4, 0)
+ tst = gdaltest.GDALTest("VRT", "empty_rc.vrt", 4, 0)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/empty.tif')
+ gdaltest.tiff_drv.Delete("tmp/empty.tif")
return ret
+
# Test warping an empty RGBA with cubic spline resampling
def test_warp_14():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/empty.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/empty.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(0)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -505,24 +509,25 @@ def test_warp_14():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'empty_rcs.vrt', 4, 0)
+ tst = gdaltest.GDALTest("VRT", "empty_rcs.vrt", 4, 0)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/empty.tif')
+ gdaltest.tiff_drv.Delete("tmp/empty.tif")
return ret
+
# Test GWKNearestFloat with transparent source alpha band
def test_warp_15():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/test.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/test.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(0)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -530,24 +535,25 @@ def test_warp_15():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'test_nearest_float.vrt', 4, 0)
+ tst = gdaltest.GDALTest("VRT", "test_nearest_float.vrt", 4, 0)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/test.tif')
+ gdaltest.tiff_drv.Delete("tmp/test.tif")
return ret
+
# Test GWKNearestFloat with opaque source alpha band
def test_warp_16():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/test.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/test.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(255)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -555,24 +561,25 @@ def test_warp_16():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'test_nearest_float.vrt', 4, 4921)
+ tst = gdaltest.GDALTest("VRT", "test_nearest_float.vrt", 4, 4921)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/test.tif')
+ gdaltest.tiff_drv.Delete("tmp/test.tif")
return ret
+
# Test GWKNearestShort with transparent source alpha band
def test_warp_17():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/test.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/test.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(0)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -580,24 +587,25 @@ def test_warp_17():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'test_nearest_short.vrt', 4, 0)
+ tst = gdaltest.GDALTest("VRT", "test_nearest_short.vrt", 4, 0)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/test.tif')
+ gdaltest.tiff_drv.Delete("tmp/test.tif")
return ret
+
# Test GWKNearestShort with opaque source alpha band
def test_warp_18():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/test.tif', 20, 20, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/test.tif", 20, 20, 4)
ds.GetRasterBand(1).Fill(255)
ds.GetRasterBand(2).Fill(0)
ds.GetRasterBand(3).Fill(0)
@@ -605,21 +613,25 @@ def test_warp_18():
ds = None
# The alpha channel must be empty
- tst = gdaltest.GDALTest('VRT', 'test_nearest_short.vrt', 4, 4921)
+ tst = gdaltest.GDALTest("VRT", "test_nearest_short.vrt", 4, 4921)
ret = tst.testOpen()
- gdaltest.tiff_drv.Delete('tmp/test.tif')
+ gdaltest.tiff_drv.Delete("tmp/test.tif")
return ret
# Test all data types and resampling methods for very small images
# to test edge behaviour
-@pytest.mark.parametrize('size', [1, 2, 3, 7])
-@pytest.mark.parametrize('resampling_string', [
- 'near', 'bilinear', 'cubic', 'cubicspline', 'lanczos', 'average'])
-@pytest.mark.parametrize('datatype', [
+@pytest.mark.parametrize("size", [1, 2, 3, 7])
+@pytest.mark.parametrize(
+ "resampling_string",
+ ["near", "bilinear", "cubic", "cubicspline", "lanczos", "average"],
+)
+@pytest.mark.parametrize(
+ "datatype",
+ [
gdal.GDT_Byte,
gdal.GDT_Int16,
gdal.GDT_CInt16,
@@ -632,24 +644,26 @@ def test_warp_18():
gdal.GDT_Float64,
gdal.GDT_CFloat64,
],
- ids=gdal.GetDataTypeName
+ ids=gdal.GetDataTypeName,
)
def test_warp_19(tmpdir, size, datatype, resampling_string):
- test_file = str(tmpdir.join('test.tif'))
- warp_file = str(tmpdir.join('testwarp.tif'))
+ test_file = str(tmpdir.join("test.tif"))
+ warp_file = str(tmpdir.join("testwarp.tif"))
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
ds = gdaltest.tiff_drv.Create(test_file, size, size, 1, datatype)
ds.SetGeoTransform((10, 5, 0, 30, 0, -5))
- ds.SetProjection('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]')
+ ds.SetProjection(
+ 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]'
+ )
ds.GetRasterBand(1).Fill(10.1, 20.1)
ds = None
- gdal.Warp(warp_file, test_file, options=f'-r {resampling_string}')
+ gdal.Warp(warp_file, test_file, options=f"-r {resampling_string}")
ref_ds = gdal.Open(test_file)
ds = gdal.Open(warp_file)
@@ -668,27 +682,28 @@ def test_warp_19(tmpdir, size, datatype, resampling_string):
# Test fix for #2724 (initialization of destination area to nodata in warped VRT)
def test_warp_20():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'white_nodata.vrt', 1, 1705)
+ tst = gdaltest.GDALTest("VRT", "white_nodata.vrt", 1, 1705)
return tst.testOpen()
+
###############################################################################
# Test overviews on warped VRT files
def test_warp_21():
- shutil.copy('data/utmsmall_near.vrt', 'tmp/warp_21.vrt')
+ shutil.copy("data/utmsmall_near.vrt", "tmp/warp_21.vrt")
- ds = gdal.Open('tmp/warp_21.vrt', gdal.GA_Update)
- ds.BuildOverviews('NEAR', overviewlist=[2])
+ ds = gdal.Open("tmp/warp_21.vrt", gdal.GA_Update)
+ ds.BuildOverviews("NEAR", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/warp_21.vrt')
+ ds = gdal.Open("tmp/warp_21.vrt")
if ds.GetRasterBand(1).GetOverviewCount() != 1:
pytest.skip()
@@ -696,40 +711,44 @@ def test_warp_21():
ds = None
- os.remove('tmp/warp_21.vrt')
+ os.remove("tmp/warp_21.vrt")
+
###############################################################################
# Test warping with datasets which are "bigger" than the wm parameter.
# Would have detected issue of #3458
-@pytest.mark.parametrize('option1', ['', '-wo OPTIMIZE_SIZE=TRUE'],
- ids=['default', 'optimizeSize'])
-@pytest.mark.parametrize('option2', [
- '',
- '-co TILED=YES',
- '-co TILED=YES -co BLOCKXSIZE=16 -co BLOCKYSIZE=16',
+@pytest.mark.parametrize(
+ "option1", ["", "-wo OPTIMIZE_SIZE=TRUE"], ids=["default", "optimizeSize"]
+)
+@pytest.mark.parametrize(
+ "option2",
+ [
+ "",
+ "-co TILED=YES",
+ "-co TILED=YES -co BLOCKXSIZE=16 -co BLOCKYSIZE=16",
],
- ids=['default', 'tiled', 'tiled16']
+ ids=["default", "tiled", "tiled16"],
)
def test_warp_22(tmpdir, option1, option2):
- src = str(tmpdir.join('warp_22_src.tif'))
- dst = str(tmpdir.join('warp_22_dst.tif'))
+ src = str(tmpdir.join("warp_22_src.tif"))
+ dst = str(tmpdir.join("warp_22_dst.tif"))
# Generate source image with non uniform data
w = 1001
h = 1001
- ds = gdal.GetDriverByName('GTiff').Create(src, w, h, 1)
+ ds = gdal.GetDriverByName("GTiff").Create(src, w, h, 1)
ds.SetGeoTransform([2, 0.01, 0, 49, 0, -0.01])
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
ds.SetProjection(sr.ExportToWkt())
for j in range(h):
- line = ''
+ line = ""
for i in range(w):
- line = line + '%c' % int((i * i + h * j / (i + 1)) % 256)
+ line = line + "%c" % int((i * i + h * j / (i + 1)) % 256)
ds.GetRasterBand(1).WriteRaster(0, j, w, 1, line)
expected_cs = ds.GetRasterBand(1).Checksum()
@@ -737,7 +756,7 @@ def test_warp_22(tmpdir, option1, option2):
# -wm should not be greater than 2 * w * h. Let's put it at its minimum
# value.
- gdal.Warp(dst, src, options=f'-wm 100000 {option1} {option2}')
+ gdal.Warp(dst, src, options=f"-wm 100000 {option1} {option2}")
ds = gdal.Open(dst)
cs = ds.GetRasterBand(1).Checksum()
assert cs == expected_cs
@@ -802,24 +821,27 @@ def test_warp_23():
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
- ds = gdal.GetDriverByName('GTiff').Create('tmp/test3582.tif', 70, 170, 4, options=['SPARSE_OK=YES'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/test3582.tif", 70, 170, 4, options=["SPARSE_OK=YES"]
+ )
for i, gcp in enumerate(gcps):
gcps[i].GCPPixel = gcp.GCPPixel / 10
gcps[i].GCPLine = gcp.GCPLine / 10
ds.SetGCPs(gcps, sr.ExportToWkt())
ds = None
- ds = gdal.Warp('', 'tmp/test3582.tif', format='MEM')
- ret = 'success'
+ ds = gdal.Warp("", "tmp/test3582.tif", format="MEM")
+ ret = "success"
if ds is None:
- gdaltest.post_reason('could not open output dataset')
- ret = 'fail'
+ gdaltest.post_reason("could not open output dataset")
+ ret = "fail"
ds = None
- os.remove('tmp/test3582.tif')
+ os.remove("tmp/test3582.tif")
return ret
+
###############################################################################
# Test fix for #3658 (numerical imprecision with Ubuntu 8.10 GCC 4.4.3 -O2 leading to upper
# left pixel being not set in GWKBilinearResample() case)
@@ -827,12 +849,13 @@ def test_warp_23():
def test_warp_24():
- ds_ref = gdal.Open('data/test3658.tif')
+ ds_ref = gdal.Open("data/test3658.tif")
cs_ref = ds_ref.GetRasterBand(1).Checksum()
- ds = gdal.Warp('', ds_ref, options='-of MEM -r bilinear')
+ ds = gdal.Warp("", ds_ref, options="-of MEM -r bilinear")
cs = ds.GetRasterBand(1).Checksum()
- assert cs == cs_ref, 'did not get expected checksum'
+ assert cs == cs_ref, "did not get expected checksum"
+
###############################################################################
# Test -refine_gcps (#4143)
@@ -840,11 +863,12 @@ def test_warp_24():
def test_warp_25():
- ds = gdal.Open('data/refine_gcps.vrt')
+ ds = gdal.Open("data/refine_gcps.vrt")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 4672, 'did not get expected checksum'
+ assert cs == 4672, "did not get expected checksum"
+
###############################################################################
# Test serializing and deserializing TPS transformer
@@ -852,20 +876,23 @@ def test_warp_25():
def test_warp_26():
- gdal.Translate('tmp/warp_25_gcp.vrt', '../gcore/data/byte.tif',
- options='-of VRT -gcp 0 0 0 20 -gcp 0 20 0 0 '
- '-gcp 20 0 20 20 -gcp 20 20 20 0')
- gdal.Warp('tmp/warp_25_warp.vrt', 'tmp/warp_25_gcp.vrt',
- options='-of VRT -tps')
+ gdal.Translate(
+ "tmp/warp_25_gcp.vrt",
+ "../gcore/data/byte.tif",
+ options="-of VRT -gcp 0 0 0 20 -gcp 0 20 0 0 "
+ "-gcp 20 0 20 20 -gcp 20 20 20 0",
+ )
+ gdal.Warp("tmp/warp_25_warp.vrt", "tmp/warp_25_gcp.vrt", options="-of VRT -tps")
- ds = gdal.Open('tmp/warp_25_warp.vrt')
+ ds = gdal.Open("tmp/warp_25_warp.vrt")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 4672, 'did not get expected checksum'
+ assert cs == 4672, "did not get expected checksum"
+
+ os.unlink("tmp/warp_25_gcp.vrt")
+ os.unlink("tmp/warp_25_warp.vrt")
- os.unlink('tmp/warp_25_gcp.vrt')
- os.unlink('tmp/warp_25_warp.vrt')
###############################################################################
# Pure Python reprojection example. Nothing particular, just make use of existing
@@ -880,7 +907,7 @@ def warp_27_progress_callback(pct, message, user_data):
def test_warp_27():
# Open source dataset
- src_ds = gdal.Open('../gcore/data/byte.tif')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
# Desfine target SRS
dst_srs = osr.SpatialReference()
@@ -891,19 +918,22 @@ def test_warp_27():
resampling = gdal.GRA_Bilinear
# Call AutoCreateWarpedVRT() to fetch default values for target raster dimensions and geotransform
- tmp_ds = gdal.AutoCreateWarpedVRT(src_ds,
- None, # src_wkt : left to default value --> will use the one from source \
- dst_wkt, \
- resampling, \
- error_threshold)
+ tmp_ds = gdal.AutoCreateWarpedVRT(
+ src_ds,
+ None, # src_wkt : left to default value --> will use the one from source \
+ dst_wkt,
+ resampling,
+ error_threshold,
+ )
dst_xsize = tmp_ds.RasterXSize
dst_ysize = tmp_ds.RasterYSize
dst_gt = tmp_ds.GetGeoTransform()
tmp_ds = None
# Now create the true target dataset
- dst_ds = gdal.GetDriverByName('GTiff').Create('tmp/warp_27.tif', dst_xsize, dst_ysize,
- src_ds.RasterCount)
+ dst_ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/warp_27.tif", dst_xsize, dst_ysize, src_ds.RasterCount
+ )
dst_ds.SetProjection(dst_wkt)
dst_ds.SetGeoTransform(dst_gt)
@@ -912,32 +942,37 @@ def test_warp_27():
cbk = warp_27_progress_callback
cbk_user_data = None # value for last parameter of above warp_27_progress_callback
- gdal.ReprojectImage(src_ds,
- dst_ds,
- None, # src_wkt : left to default value --> will use the one from source \
- None, # dst_wkt : left to default value --> will use the one from destination \
- resampling, \
- 0, # WarpMemoryLimit : left to default value \
- error_threshold,
- cbk, # Progress callback : could be left to None or unspecified for silent progress
- cbk_user_data) # Progress callback user data
+ gdal.ReprojectImage(
+ src_ds,
+ dst_ds,
+ None, # src_wkt : left to default value --> will use the one from source \
+ None, # dst_wkt : left to default value --> will use the one from destination \
+ resampling,
+ 0, # WarpMemoryLimit : left to default value \
+ error_threshold,
+ cbk, # Progress callback : could be left to None or unspecified for silent progress
+ cbk_user_data,
+ ) # Progress callback user data
# Done !
dst_ds = None
# Check that we have the same result as produced by 'gdalwarp -rb -t_srs EPSG:4326 ../gcore/data/byte.tif tmp/warp_27.tif'
- ds = gdal.Open('tmp/warp_27.tif')
+ ds = gdal.Open("tmp/warp_27.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- ds = gdal.Warp('tmp/warp_27_ref.tif', '../gcore/data/byte.tif', options='-rb -t_srs EPSG:4326')
+ ds = gdal.Warp(
+ "tmp/warp_27_ref.tif", "../gcore/data/byte.tif", options="-rb -t_srs EPSG:4326"
+ )
ref_cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == ref_cs
- gdal.Unlink('tmp/warp_27.tif')
- gdal.Unlink('tmp/warp_27_ref.tif')
+ gdal.Unlink("tmp/warp_27.tif")
+ gdal.Unlink("tmp/warp_27_ref.tif")
+
###############################################################################
# Test reading a VRT with a destination alpha band, but no explicit
@@ -946,70 +981,72 @@ def test_warp_27():
def test_warp_28():
- ds = gdal.Open('data/utm_alpha_noinit.vrt')
+ ds = gdal.Open("data/utm_alpha_noinit.vrt")
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
- assert not (cs1 == 0 or cs2 == 0), 'bad checksum'
+ assert not (cs1 == 0 or cs2 == 0), "bad checksum"
ds = None
+
###############################################################################
# Test multi-thread computations
def test_warp_29():
- ds = gdal.Open('data/white_nodata.vrt')
+ ds = gdal.Open("data/white_nodata.vrt")
cs_monothread = ds.GetRasterBand(1).Checksum()
ds = None
- old_val = gdal.GetConfigOption('GDAL_NUM_THREADS')
- gdal.SetConfigOption('GDAL_NUM_THREADS', 'ALL_CPUS')
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', '0')
- ds = gdal.Open('data/white_nodata.vrt')
+ old_val = gdal.GetConfigOption("GDAL_NUM_THREADS")
+ gdal.SetConfigOption("GDAL_NUM_THREADS", "ALL_CPUS")
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", "0")
+ ds = gdal.Open("data/white_nodata.vrt")
cs_multithread = ds.GetRasterBand(1).Checksum()
ds = None
- gdal.SetConfigOption('GDAL_NUM_THREADS', old_val)
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', None)
+ gdal.SetConfigOption("GDAL_NUM_THREADS", old_val)
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", None)
assert cs_monothread == cs_multithread
- old_val = gdal.GetConfigOption('GDAL_NUM_THREADS')
- gdal.SetConfigOption('GDAL_NUM_THREADS', '2')
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', '0')
- ds = gdal.Open('data/white_nodata.vrt')
+ old_val = gdal.GetConfigOption("GDAL_NUM_THREADS")
+ gdal.SetConfigOption("GDAL_NUM_THREADS", "2")
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", "0")
+ ds = gdal.Open("data/white_nodata.vrt")
cs_multithread = ds.GetRasterBand(1).Checksum()
ds = None
- gdal.SetConfigOption('GDAL_NUM_THREADS', old_val)
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', None)
+ gdal.SetConfigOption("GDAL_NUM_THREADS", old_val)
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", None)
assert cs_monothread == cs_multithread
- src_ds = gdal.Open('../gcore/data/byte.tif')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
- ds = gdal.Open('data/byte_gcp.vrt')
- old_val = gdal.GetConfigOption('GDAL_NUM_THREADS')
- gdal.SetConfigOption('GDAL_NUM_THREADS', '2')
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', '0')
+ ds = gdal.Open("data/byte_gcp.vrt")
+ old_val = gdal.GetConfigOption("GDAL_NUM_THREADS")
+ gdal.SetConfigOption("GDAL_NUM_THREADS", "2")
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", "0")
got_cs = ds.GetRasterBand(1).Checksum()
- gdal.SetConfigOption('GDAL_NUM_THREADS', old_val)
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', None)
+ gdal.SetConfigOption("GDAL_NUM_THREADS", old_val)
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", None)
ds = None
assert got_cs == src_ds.GetRasterBand(1).Checksum()
- ds = gdal.Open('data/byte_tps.vrt')
- old_val = gdal.GetConfigOption('GDAL_NUM_THREADS')
- gdal.SetConfigOption('GDAL_NUM_THREADS', '2')
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', '0')
+ ds = gdal.Open("data/byte_tps.vrt")
+ old_val = gdal.GetConfigOption("GDAL_NUM_THREADS")
+ gdal.SetConfigOption("GDAL_NUM_THREADS", "2")
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", "0")
got_cs = ds.GetRasterBand(1).Checksum()
- gdal.SetConfigOption('GDAL_NUM_THREADS', old_val)
- gdal.SetConfigOption('WARP_THREAD_CHUNK_SIZE', None)
+ gdal.SetConfigOption("GDAL_NUM_THREADS", old_val)
+ gdal.SetConfigOption("WARP_THREAD_CHUNK_SIZE", None)
ds = None
assert got_cs == src_ds.GetRasterBand(1).Checksum()
src_ds = None
+
###############################################################################
# Test warping interruption
@@ -1022,7 +1059,7 @@ def warp_30_progress_callback(pct, message, user_data):
def test_warp_30():
# Open source dataset
- src_ds = gdal.Open('../gcore/data/byte.tif')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
# Desfine target SRS
dst_srs = osr.SpatialReference()
@@ -1033,19 +1070,22 @@ def test_warp_30():
resampling = gdal.GRA_Bilinear
# Call AutoCreateWarpedVRT() to fetch default values for target raster dimensions and geotransform
- tmp_ds = gdal.AutoCreateWarpedVRT(src_ds,
- None, # src_wkt : left to default value --> will use the one from source \
- dst_wkt, \
- resampling, \
- error_threshold)
+ tmp_ds = gdal.AutoCreateWarpedVRT(
+ src_ds,
+ None, # src_wkt : left to default value --> will use the one from source \
+ dst_wkt,
+ resampling,
+ error_threshold,
+ )
dst_xsize = tmp_ds.RasterXSize
dst_ysize = tmp_ds.RasterYSize
dst_gt = tmp_ds.GetGeoTransform()
tmp_ds = None
# Now create the true target dataset
- dst_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/warp_30.tif', dst_xsize, dst_ysize,
- src_ds.RasterCount)
+ dst_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/warp_30.tif", dst_xsize, dst_ysize, src_ds.RasterCount
+ )
dst_ds.SetProjection(dst_wkt)
dst_ds.SetGeoTransform(dst_gt)
@@ -1054,140 +1094,151 @@ def test_warp_30():
cbk = warp_30_progress_callback
cbk_user_data = None # value for last parameter of above warp_27_progress_callback
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ret = gdal.ReprojectImage(src_ds,
- dst_ds,
- None, # src_wkt : left to default value --> will use the one from source \
- None, # dst_wkt : left to default value --> will use the one from destination \
- resampling, \
- 0, # WarpMemoryLimit : left to default value \
- error_threshold,
- cbk, # Progress callback : could be left to None or unspecified for silent progress
- cbk_user_data) # Progress callback user data
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ret = gdal.ReprojectImage(
+ src_ds,
+ dst_ds,
+ None, # src_wkt : left to default value --> will use the one from source \
+ None, # dst_wkt : left to default value --> will use the one from destination \
+ resampling,
+ 0, # WarpMemoryLimit : left to default value \
+ error_threshold,
+ cbk, # Progress callback : could be left to None or unspecified for silent progress
+ cbk_user_data,
+ ) # Progress callback user data
gdal.PopErrorHandler()
assert ret != 0
- old_val = gdal.GetConfigOption('GDAL_NUM_THREADS')
- gdal.SetConfigOption('GDAL_NUM_THREADS', '2')
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ret = gdal.ReprojectImage(src_ds,
- dst_ds,
- None, # src_wkt : left to default value --> will use the one from source \
- None, # dst_wkt : left to default value --> will use the one from destination \
- resampling, \
- 0, # WarpMemoryLimit : left to default value \
- error_threshold,
- cbk, # Progress callback : could be left to None or unspecified for silent progress
- cbk_user_data) # Progress callback user data
+ old_val = gdal.GetConfigOption("GDAL_NUM_THREADS")
+ gdal.SetConfigOption("GDAL_NUM_THREADS", "2")
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ret = gdal.ReprojectImage(
+ src_ds,
+ dst_ds,
+ None, # src_wkt : left to default value --> will use the one from source \
+ None, # dst_wkt : left to default value --> will use the one from destination \
+ resampling,
+ 0, # WarpMemoryLimit : left to default value \
+ error_threshold,
+ cbk, # Progress callback : could be left to None or unspecified for silent progress
+ cbk_user_data,
+ ) # Progress callback user data
gdal.PopErrorHandler()
- gdal.SetConfigOption('GDAL_NUM_THREADS', old_val)
+ gdal.SetConfigOption("GDAL_NUM_THREADS", old_val)
assert ret != 0
- gdal.Unlink('/vsimem/warp_30.tif')
+ gdal.Unlink("/vsimem/warp_30.tif")
+
# Average (Byte)
def test_warp_31():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_average.vrt')
- ref_ds = gdal.Open('data/utmsmall_average.tiff')
+ ds = gdal.Open("data/utmsmall_average.vrt")
+ ref_ds = gdal.Open("data/utmsmall_average.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Average (Float)
def test_warp_32():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_average_float.vrt')
- ref_ds = gdal.Open('data/utmsmall_average_float.tiff')
+ ds = gdal.Open("data/utmsmall_average_float.vrt")
+ ref_ds = gdal.Open("data/utmsmall_average_float.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Mode (Byte)
def test_warp_33():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_mode.vrt')
- ref_ds = gdal.Open('data/utmsmall_mode.tiff')
+ ds = gdal.Open("data/utmsmall_mode.vrt")
+ ref_ds = gdal.Open("data/utmsmall_mode.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Mode (Int16)
def test_warp_34():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_mode_int16.vrt')
- ref_ds = gdal.Open('data/utmsmall_mode_int16.tiff')
+ ds = gdal.Open("data/utmsmall_mode_int16.vrt")
+ ref_ds = gdal.Open("data/utmsmall_mode_int16.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Mode (Int16 - signed with negative values)
def test_warp_35():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_mode.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_mode.tiff')
+ ds = gdal.Open("data/utmsmall-int16-neg_mode.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_mode.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Mode (Int32) - this uses algorithm 2 (inefficient)
def test_warp_36():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_mode_int32.vrt')
- ref_ds = gdal.Open('data/utmsmall_mode_int32.tiff')
+ ds = gdal.Open("data/utmsmall_mode_int32.vrt")
+ ref_ds = gdal.Open("data/utmsmall_mode_int32.tiff")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
###############################################################################
# Test a few error cases
@@ -1196,11 +1247,12 @@ def test_warp_36():
def test_warp_37():
# Open source dataset
- src_ds = gdal.Open('../gcore/data/byte.tif')
+ src_ds = gdal.Open("../gcore/data/byte.tif")
# Dummy proj.4 method
sr = osr.SpatialReference()
- sr.ImportFromWkt("""PROJCS["unnamed",
+ sr.ImportFromWkt(
+ """PROJCS["unnamed",
GEOGCS["unnamed ellipse",
DATUM["unknown",
SPHEROID["unnamed",6378137,298.257223563]],
@@ -1208,15 +1260,17 @@ def test_warp_37():
UNIT["degree",0.0174532925199433]],
PROJECTION["custom_proj4"],
UNIT["Meter",1],
- EXTENSION["PROJ4","+proj=dummy_method +units=m +wktext"]]""")
+ EXTENSION["PROJ4","+proj=dummy_method +units=m +wktext"]]"""
+ )
dst_wkt = sr.ExportToWkt()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
tmp_ds = gdal.AutoCreateWarpedVRT(src_ds, None, dst_wkt)
gdal.PopErrorHandler()
gdal.ErrorReset()
assert tmp_ds is None
+
###############################################################################
# Test a warp with GCPs on the *destination* image.
@@ -1224,8 +1278,8 @@ def test_warp_37():
def test_warp_38():
# Create an output file with GCPs.
- out_file = 'tmp/warp_38.tif'
- ds = gdal.GetDriverByName('GTiff').Create(out_file, 50, 50, 3)
+ out_file = "tmp/warp_38.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(out_file, 50, 50, 3)
gcp_list = [
gdal.GCP(397000, 5642000, 0, 0, 0),
@@ -1234,10 +1288,10 @@ def test_warp_38():
gdal.GCP(397010, 5641990, 0, 50, 50),
gdal.GCP(397005, 5641995, 0, 25, 25),
]
- ds.SetGCPs(gcp_list, gdaltest.user_srs_to_wkt('EPSG:32632'))
+ ds.SetGCPs(gcp_list, gdaltest.user_srs_to_wkt("EPSG:32632"))
ds = None
- gdal.Warp(out_file, 'data/test3658.tif', options='-to DST_METHOD=GCP_POLYNOMIAL')
+ gdal.Warp(out_file, "data/test3658.tif", options="-to DST_METHOD=GCP_POLYNOMIAL")
ds = gdal.Open(out_file)
cs = ds.GetRasterBand(1).Checksum()
@@ -1249,6 +1303,7 @@ def test_warp_38():
os.unlink(out_file)
+
###############################################################################
# Test a warp with GCPs for TPS on the *destination* image.
@@ -1256,8 +1311,8 @@ def test_warp_38():
def test_warp_39():
# Create an output file with GCPs.
- out_file = 'tmp/warp_39.tif'
- ds = gdal.GetDriverByName('GTiff').Create(out_file, 50, 50, 3)
+ out_file = "tmp/warp_39.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(out_file, 50, 50, 3)
gcp_list = [
gdal.GCP(397000, 5642000, 0, 0, 0),
@@ -1266,10 +1321,10 @@ def test_warp_39():
gdal.GCP(397010, 5641990, 0, 50, 50),
gdal.GCP(397005, 5641995, 0, 25, 25),
]
- ds.SetGCPs(gcp_list, gdaltest.user_srs_to_wkt('EPSG:32632'))
+ ds.SetGCPs(gcp_list, gdaltest.user_srs_to_wkt("EPSG:32632"))
ds = None
- gdal.Warp(out_file, 'data/test3658.tif', options='-to DST_METHOD=GCP_TPS')
+ gdal.Warp(out_file, "data/test3658.tif", options="-to DST_METHOD=GCP_TPS")
ds = gdal.Open(out_file)
cs = ds.GetRasterBand(1).Checksum()
@@ -1281,23 +1336,25 @@ def test_warp_39():
os.unlink(out_file)
+
###############################################################################
# test average (#5311)
def test_warp_40():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/2by2.vrt')
- ref_ds = gdal.Open('data/2by2.tif')
+ ds = gdal.Open("data/2by2.vrt")
+ ref_ds = gdal.Open("data/2by2.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
###############################################################################
# test weighted average
@@ -1305,17 +1362,18 @@ def test_warp_40():
def test_warp_weighted_average():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/3by3_average.vrt')
- ref_ds = gdal.Open('data/3by3_average.tif')
+ ds = gdal.Open("data/3by3_average.vrt")
+ ref_ds = gdal.Open("data/3by3_average.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
###############################################################################
# test weighted average, with src offset (fix for #2665)
@@ -1323,27 +1381,29 @@ def test_warp_weighted_average():
def test_warp_weighted_average_with_srcoffset():
- ds = gdal.Open('data/3by3_average_with_srcoffset.vrt')
- val = struct.unpack('d', ds.ReadRaster(0, 0, 1, 1))[0]
+ ds = gdal.Open("data/3by3_average_with_srcoffset.vrt")
+ val = struct.unpack("d", ds.ReadRaster(0, 0, 1, 1))[0]
assert val == pytest.approx(8.5, abs=1e-5)
+
###############################################################################
# test sum
def test_warp_sum():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/3by3_sum.vrt')
- ref_ds = gdal.Open('data/3by3_sum.tif')
+ ds = gdal.Open("data/3by3_sum.vrt")
+ ref_ds = gdal.Open("data/3by3_sum.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
###############################################################################
# test GDALSuggestedWarpOutput (#5693)
@@ -1351,7 +1411,8 @@ def test_warp_sum():
def test_warp_41():
- src_ds = gdal.Open("""
+ src_ds = gdal.Open(
+ """
-2.0037508340000000e+07, 5.9716428339481353e-01, 0.0000000000000000e+00, 2.0037508340000000e+07, 0.0000000000000000e+00, -5.9716428339481353e-01
@@ -1362,9 +1423,12 @@ def test_warp_41():
-""")
+"""
+ )
- vrt_ds = gdal.AutoCreateWarpedVRT(src_ds, None, None, gdal.GRA_NearestNeighbour, 0.3)
+ vrt_ds = gdal.AutoCreateWarpedVRT(
+ src_ds, None, None, gdal.GRA_NearestNeighbour, 0.3
+ )
assert vrt_ds.RasterXSize == src_ds.RasterXSize
assert vrt_ds.RasterYSize == src_ds.RasterYSize
src_gt = src_ds.GetGeoTransform()
@@ -1380,170 +1444,180 @@ def test_warp_41():
def test_warp_42():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_max.vrt')
- ref_ds = gdal.Open('data/utmsmall_max.tif')
+ ds = gdal.Open("data/utmsmall_max.vrt")
+ ref_ds = gdal.Open("data/utmsmall_max.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Minimum
def test_warp_43():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_min.vrt')
- ref_ds = gdal.Open('data/utmsmall_min.tif')
+ ds = gdal.Open("data/utmsmall_min.vrt")
+ ref_ds = gdal.Open("data/utmsmall_min.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Median
def test_warp_44():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_med.vrt')
- ref_ds = gdal.Open('data/utmsmall_med.tif')
+ ds = gdal.Open("data/utmsmall_med.vrt")
+ ref_ds = gdal.Open("data/utmsmall_med.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Quartile 1
def test_warp_45():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_Q1.vrt')
- ref_ds = gdal.Open('data/utmsmall_Q1.tif')
+ ds = gdal.Open("data/utmsmall_Q1.vrt")
+ ref_ds = gdal.Open("data/utmsmall_Q1.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Quartile 3
def test_warp_46():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_Q3.vrt')
- ref_ds = gdal.Open('data/utmsmall_Q3.tif')
+ ds = gdal.Open("data/utmsmall_Q3.vrt")
+ ref_ds = gdal.Open("data/utmsmall_Q3.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Maximum (Int16 - signed with negative values)
def test_warp_47():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_max.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_max.tif')
+ ds = gdal.Open("data/utmsmall-int16-neg_max.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_max.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Minimum (Int16 - signed with negative values)
def test_warp_48():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_min.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_min.tif')
+ ds = gdal.Open("data/utmsmall-int16-neg_min.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_min.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Median (Int16 - signed with negative values)
def test_warp_49():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_med.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_med.tif')
+ ds = gdal.Open("data/utmsmall-int16-neg_med.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_med.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Quartile 1 (Int16 - signed with negative values)
def test_warp_50():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_Q1.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_Q1.tif')
+ ds = gdal.Open("data/utmsmall-int16-neg_Q1.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_Q1.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
# Quartile 3 (Int16 - signed with negative values)
def test_warp_51():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall-int16-neg_Q3.vrt')
- ref_ds = gdal.Open('data/utmsmall-int16-neg_Q3.tif')
+ ds = gdal.Open("data/utmsmall-int16-neg_Q3.vrt")
+ ref_ds = gdal.Open("data/utmsmall-int16-neg_Q3.tif")
maxdiff = gdaltest.compare_ds(ds, ref_ds)
ds = None
ref_ds = None
- assert maxdiff <= 1, 'Image too different from reference'
+ assert maxdiff <= 1, "Image too different from reference"
+
###############################################################################
# Test fix for #6182
@@ -1551,7 +1625,7 @@ def test_warp_51():
def test_warp_52():
- src_ds = gdal.GetDriverByName('MEM').Create('', 4096, 4096, 3, gdal.GDT_UInt16)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 4096, 4096, 3, gdal.GDT_UInt16)
rpc = [
"HEIGHT_OFF=1466.05894327379",
"HEIGHT_SCALE=144.837606185489",
@@ -1566,58 +1640,71 @@ def test_warp_52():
"SAMP_DEN_COEFF=1 -0.000632078047521022 -0.000544107268758971 0.000172438016778527 -0.00206391734870399 -0.00204445747536872 -0.000715754551621987 -0.00195545265530244 -0.00168532972557267 -0.00114709980708329 -0.00699131177532728 0.0038551339822296 0.00283631282133365 -0.00436885468926666 -0.00381335885955994 0.0018742043611019 -0.0027263909314293 -0.00237054119407013 0.00246374716379501 -0.00121074576302219",
"SAMP_NUM_COEFF=0.00249293151551852 -0.581492592442025 -1.00947448466175 0.00121597346320039 -0.00552825219917498 -0.00194683170765094 -0.00166012459012905 -0.00338315804553888 -0.00152062885009498 -0.000214562164393127 -0.00219914905535387 -0.000662800177832777 -0.00118644828432841 -0.00180061222825708 -0.00364756875260519 -0.00287273485650089 -0.000540077934728493 -0.00166800463003749 0.000201057249109451 -8.49620129025469e-05",
"SAMP_OFF=3300.34602166792",
- "SAMP_SCALE=3297.51222987611"
+ "SAMP_SCALE=3297.51222987611",
]
src_ds.SetMetadata(rpc, "RPC")
import time
+
start = time.time()
- out_ds = gdal.Warp('', src_ds, format='MEM',
- outputBounds=[8453323.83095, 4676723.13796, 8472891.71018, 4696291.0172],
- xRes=4.77731426716,
- yRes=4.77731426716,
- dstSRS='EPSG:3857',
- warpOptions=['SKIP_NOSOURCE=YES', 'DST_ALPHA_MAX=255'],
- transformerOptions=['RPC_DEM=data/warp_52_dem.tif'],
- dstAlpha=True,
- errorThreshold=0,
- resampleAlg=gdal.GRA_Cubic)
+ out_ds = gdal.Warp(
+ "",
+ src_ds,
+ format="MEM",
+ outputBounds=[8453323.83095, 4676723.13796, 8472891.71018, 4696291.0172],
+ xRes=4.77731426716,
+ yRes=4.77731426716,
+ dstSRS="EPSG:3857",
+ warpOptions=["SKIP_NOSOURCE=YES", "DST_ALPHA_MAX=255"],
+ transformerOptions=["RPC_DEM=data/warp_52_dem.tif"],
+ dstAlpha=True,
+ errorThreshold=0,
+ resampleAlg=gdal.GRA_Cubic,
+ )
end = time.time()
- assert end - start <= 10, 'processing time was way too long'
+ assert end - start <= 10, "processing time was way too long"
cs = out_ds.GetRasterBand(4).Checksum()
assert cs == 3188
+
###############################################################################
# Test Grey+Alpha
-@pytest.mark.parametrize('typestr', ('Byte', 'UInt16', 'Int16'))
-@pytest.mark.parametrize('option', ('-wo USE_GENERAL_CASE=TRUE', ''),
- ids=['generalCase', 'default'])
-@pytest.mark.parametrize('alg_name, expected_cs', (
- pytest.param('near', [1192], id='near'),
- pytest.param('cubic', [1061], id='cubic'),
- pytest.param('cubicspline', [1252], id='cubicspline'),
- pytest.param('bilinear', [1206, 1204], id='bilinear'),
-))
+@pytest.mark.parametrize("typestr", ("Byte", "UInt16", "Int16"))
+@pytest.mark.parametrize(
+ "option", ("-wo USE_GENERAL_CASE=TRUE", ""), ids=["generalCase", "default"]
+)
+@pytest.mark.parametrize(
+ "alg_name, expected_cs",
+ (
+ pytest.param("near", [1192], id="near"),
+ pytest.param("cubic", [1061], id="cubic"),
+ pytest.param("cubicspline", [1252], id="cubicspline"),
+ pytest.param("bilinear", [1206, 1204], id="bilinear"),
+ ),
+)
def test_warp_53(typestr, option, alg_name, expected_cs):
- src_ds = gdal.Translate('', '../gcore/data/byte.tif',
- options=f'-a_srs EPSG:32611 -of MEM -b 1 -b 1 -ot {typestr}')
+ src_ds = gdal.Translate(
+ "",
+ "../gcore/data/byte.tif",
+ options=f"-a_srs EPSG:32611 -of MEM -b 1 -b 1 -ot {typestr}",
+ )
src_ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
src_ds.GetRasterBand(2).Fill(255)
- zero = struct.pack('B' * 1, 0)
- src_ds.GetRasterBand(2).WriteRaster(10, 10, 1, 1, zero,
- buf_type=gdal.GDT_Byte)
- dst_ds = gdal.Translate('', src_ds,
- options='-outsize 10 10 -of MEM -a_srs EPSG:32611')
+ zero = struct.pack("B" * 1, 0)
+ src_ds.GetRasterBand(2).WriteRaster(10, 10, 1, 1, zero, buf_type=gdal.GDT_Byte)
+ dst_ds = gdal.Translate(
+ "", src_ds, options="-outsize 10 10 -of MEM -a_srs EPSG:32611"
+ )
dst_ds.GetRasterBand(1).Fill(0)
dst_ds.GetRasterBand(2).Fill(0)
- gdal.Warp(dst_ds, src_ds, options=f'-r {alg_name} {option}')
+ gdal.Warp(dst_ds, src_ds, options=f"-r {alg_name} {option}")
cs1 = dst_ds.GetRasterBand(1).Checksum()
cs2 = dst_ds.GetRasterBand(2).Checksum()
assert cs1 in expected_cs
@@ -1628,43 +1715,53 @@ def test_warp_53(typestr, option, alg_name, expected_cs):
# Test Alpha on UInt16/Int16
-@pytest.mark.parametrize('use_optim', ['YES', 'NO'])
+@pytest.mark.parametrize("use_optim", ["YES", "NO"])
def test_warp_54(use_optim):
# UInt16
- src_ds = gdal.Translate('', '../gcore/data/stefan_full_rgba.tif',
- options='-of MEM -scale 0 255 0 65535 -ot UInt16 -a_ullr -162 150 0 0')
- with gdaltest.config_option('GDAL_WARP_USE_TRANSLATION_OPTIM', use_optim):
- dst_ds = gdal.Warp('', src_ds, format='MEM')
+ src_ds = gdal.Translate(
+ "",
+ "../gcore/data/stefan_full_rgba.tif",
+ options="-of MEM -scale 0 255 0 65535 -ot UInt16 -a_ullr -162 150 0 0",
+ )
+ with gdaltest.config_option("GDAL_WARP_USE_TRANSLATION_OPTIM", use_optim):
+ dst_ds = gdal.Warp("", src_ds, format="MEM")
for i in range(4):
expected_cs = src_ds.GetRasterBand(i + 1).Checksum()
got_cs = dst_ds.GetRasterBand(i + 1).Checksum()
assert expected_cs == got_cs, i
# Int16
- src_ds = gdal.Translate('', '../gcore/data/stefan_full_rgba.tif',
- options='-of MEM -scale 0 255 0 32767 -ot Int16 -a_ullr -162 150 0 0')
- with gdaltest.config_option('GDAL_WARP_USE_TRANSLATION_OPTIM', use_optim):
- dst_ds = gdal.Warp('', src_ds, format='MEM')
+ src_ds = gdal.Translate(
+ "",
+ "../gcore/data/stefan_full_rgba.tif",
+ options="-of MEM -scale 0 255 0 32767 -ot Int16 -a_ullr -162 150 0 0",
+ )
+ with gdaltest.config_option("GDAL_WARP_USE_TRANSLATION_OPTIM", use_optim):
+ dst_ds = gdal.Warp("", src_ds, format="MEM")
for i in range(4):
expected_cs = src_ds.GetRasterBand(i + 1).Checksum()
got_cs = dst_ds.GetRasterBand(i + 1).Checksum()
assert expected_cs == got_cs, i
# Test NBITS
- src_ds = gdal.Translate('', '../gcore/data/stefan_full_rgba.tif',
- options='-of MEM -scale 0 255 0 32767 -ot UInt16 -a_ullr -162 150 0 0')
+ src_ds = gdal.Translate(
+ "",
+ "../gcore/data/stefan_full_rgba.tif",
+ options="-of MEM -scale 0 255 0 32767 -ot UInt16 -a_ullr -162 150 0 0",
+ )
for i in range(4):
- src_ds.GetRasterBand(i + 1).SetMetadataItem('NBITS', '15', 'IMAGE_STRUCTURE')
- with gdaltest.config_option('GDAL_WARP_USE_TRANSLATION_OPTIM', use_optim):
- dst_ds = gdal.Warp('/vsimem/warp_54.tif', src_ds, options='-co NBITS=15')
+ src_ds.GetRasterBand(i + 1).SetMetadataItem("NBITS", "15", "IMAGE_STRUCTURE")
+ with gdaltest.config_option("GDAL_WARP_USE_TRANSLATION_OPTIM", use_optim):
+ dst_ds = gdal.Warp("/vsimem/warp_54.tif", src_ds, options="-co NBITS=15")
for i in range(4):
expected_cs = src_ds.GetRasterBand(i + 1).Checksum()
got_cs = dst_ds.GetRasterBand(i + 1).Checksum()
assert expected_cs == got_cs, i
dst_ds = None
- gdal.Unlink('/vsimem/warp_54.tif')
+ gdal.Unlink("/vsimem/warp_54.tif")
+
###############################################################################
# Test warped VRT with source overview, target GT != GenImgProjection target GT
@@ -1673,133 +1770,138 @@ def test_warp_54(use_optim):
def test_warp_55():
- ds = gdal.Open('data/warpedvrt_with_ovr.vrt')
+ ds = gdal.Open("data/warpedvrt_with_ovr.vrt")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 25128
ds = None
+
###############################################################################
# Test bilinear interpolation when warping into same coordinate system (and
# same size). This test crops a single pixel out of a 3-by-3 image.
-@pytest.mark.parametrize('use_optim', ['YES', 'NO'])
+@pytest.mark.parametrize("use_optim", ["YES", "NO"])
def test_warp_56(use_optim):
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- pix_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
- src_ds = gdal.GetDriverByName('MEM').Create('', 3, 3)
- src_ds.GetRasterBand(1).WriteArray(numpy.array([[0, 0, 0],
- [0, 0, 0],
- [0, 0, 100]]))
- src_ds.SetGeoTransform([1, 1, 0,
- 1, 0, 1])
+ pix_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 3, 3)
+ src_ds.GetRasterBand(1).WriteArray(numpy.array([[0, 0, 0], [0, 0, 0], [0, 0, 100]]))
+ src_ds.SetGeoTransform([1, 1, 0, 1, 0, 1])
for off in numpy.linspace(0, 2, 21):
- pix_ds.SetGeoTransform([off + 1, 1, 0,
- off + 1, 0, 1])
- with gdaltest.config_option('GDAL_WARP_USE_TRANSLATION_OPTIM', use_optim):
- gdal.Warp(pix_ds, src_ds, resampleAlg='bilinear')
+ pix_ds.SetGeoTransform([off + 1, 1, 0, off + 1, 0, 1])
+ with gdaltest.config_option("GDAL_WARP_USE_TRANSLATION_OPTIM", use_optim):
+ gdal.Warp(pix_ds, src_ds, resampleAlg="bilinear")
- exp = 0 if off < 1 else 100 * (off - 1)**2
+ exp = 0 if off < 1 else 100 * (off - 1) ** 2
warped = pix_ds.GetRasterBand(1).ReadAsArray()[0, 0]
- assert warped == pytest.approx(exp, abs=0.6), \
- 'offset: {}, expected: {:.0f}, got: {}'.format(off, exp, warped)
+ assert warped == pytest.approx(
+ exp, abs=0.6
+ ), "offset: {}, expected: {:.0f}, got: {}".format(off, exp, warped)
###############################################################################
# Test bugfix for #1656
+
def test_warp_nearest_real_nodata_multiple_band():
- src_ds = gdal.GetDriverByName('MEM').Create('', 2, 1, 2, gdal.GDT_Float64)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 2, 1, 2, gdal.GDT_Float64)
src_ds.GetRasterBand(1).SetNoDataValue(65535)
- src_ds.GetRasterBand(1).WriteRaster(0,0,1,1,struct.pack('d', 65535))
+ src_ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack("d", 65535))
src_ds.GetRasterBand(2).SetNoDataValue(65535)
- src_ds.GetRasterBand(2).WriteRaster(0,0,1,1,struct.pack('d', 65535))
- src_ds.SetGeoTransform([1, 1, 0,
- 1, 0, 1])
- out_ds = gdal.Warp('', src_ds, options = '-of MEM')
- assert struct.unpack('d' * 4, out_ds.ReadRaster()) == struct.unpack('d' * 4, src_ds.ReadRaster())
+ src_ds.GetRasterBand(2).WriteRaster(0, 0, 1, 1, struct.pack("d", 65535))
+ src_ds.SetGeoTransform([1, 1, 0, 1, 0, 1])
+ out_ds = gdal.Warp("", src_ds, options="-of MEM")
+ assert struct.unpack("d" * 4, out_ds.ReadRaster()) == struct.unpack(
+ "d" * 4, src_ds.ReadRaster()
+ )
###############################################################################
# Test bugfix for #2365
+
def test_warp_med_out_of_bounds_src_pixels():
- ds = gdal.Open('data/test_bug_2365_wraped_med.vrt')
+ ds = gdal.Open("data/test_bug_2365_wraped_med.vrt")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 0
ds = None
+
###############################################################################
# Test fix for #2460
def test_warp_rpc_source_has_geotransform():
- out_ds = gdal.Warp('', 'data/test_rpc_with_gt_bug_2460.tif',
- format='MEM',
- transformerOptions=['METHOD=RPC', 'RPC_HEIGHT=1118'])
+ out_ds = gdal.Warp(
+ "",
+ "data/test_rpc_with_gt_bug_2460.tif",
+ format="MEM",
+ transformerOptions=["METHOD=RPC", "RPC_HEIGHT=1118"],
+ )
cs = out_ds.GetRasterBand(1).Checksum()
assert cs == 60397
+
###############################################################################
# Test RMS resampling
+
def test_warp_ds_rms():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'utmsmall_ds_rms.vrt', 1, 4926)
+ tst = gdaltest.GDALTest("VRT", "utmsmall_ds_rms.vrt", 1, 4926)
return tst.testOpen()
+
def test_warp_rms_1():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- tst = gdaltest.GDALTest('VRT', 'utmsmall_rms_float.vrt', 1, 29819)
+ tst = gdaltest.GDALTest("VRT", "utmsmall_rms_float.vrt", 1, 29819)
return tst.testOpen()
+
def test_warp_rms_2():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.tiff_drv is None:
pytest.skip()
- ds = gdal.Open('data/utmsmall_rms.vrt')
+ ds = gdal.Open("data/utmsmall_rms.vrt")
# 29818 on non-Intel archs
- assert ds.GetRasterBand(1).Checksum() in (29818,
- 29819,
- 29828, # Intel(R) oneAPI DPC++/C++ Compiler 2022.1.0
- )
+ assert ds.GetRasterBand(1).Checksum() in (
+ 29818,
+ 29819,
+ 29828, # Intel(R) oneAPI DPC++/C++ Compiler 2022.1.0
+ )
def test_warp_mode_ties():
# when performing mode resampling the result in case of a tie will be
# the first value identified as the mode in scanline processing
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- src_ds = gdal.GetDriverByName('MEM').Create('', 3, 3, 1, gdal.GDT_Int16)
- src_ds.SetGeoTransform([1, 1, 0,
- 1, 0, 1])
- src_ds.GetRasterBand(1).WriteArray(numpy.array([[1, 1, 1],
- [2, 3, 4],
- [5, 5, 5]]))
- out_ds = gdal.Warp('', src_ds, format='MEM', resampleAlg='mode', xRes=3, yRes=3)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 3, 3, 1, gdal.GDT_Int16)
+ src_ds.SetGeoTransform([1, 1, 0, 1, 0, 1])
+ src_ds.GetRasterBand(1).WriteArray(numpy.array([[1, 1, 1], [2, 3, 4], [5, 5, 5]]))
+ out_ds = gdal.Warp("", src_ds, format="MEM", resampleAlg="mode", xRes=3, yRes=3)
assert out_ds.GetRasterBand(1).ReadAsArray()[0, 0] == 1
- src_ds.GetRasterBand(1).WriteArray(numpy.array([[1, 5, 1],
- [2, 5, 4],
- [5, 1, 0]]))
- out_ds = gdal.Warp('', src_ds, format='MEM', resampleAlg='mode', xRes=3, yRes=3)
+ src_ds.GetRasterBand(1).WriteArray(numpy.array([[1, 5, 1], [2, 5, 4], [5, 1, 0]]))
+ out_ds = gdal.Warp("", src_ds, format="MEM", resampleAlg="mode", xRes=3, yRes=3)
assert out_ds.GetRasterBand(1).ReadAsArray()[0, 0] == 5
diff --git a/autotest/conftest.py b/autotest/conftest.py
index 29bb354d334a..9c605bb6510b 100755
--- a/autotest/conftest.py
+++ b/autotest/conftest.py
@@ -17,17 +17,20 @@
# These files may be non-importable, and don't contain tests anyway.
# So we skip searching them during test collection.
-collect_ignore = ["kml_generate_test_files.py",
- "gdrivers/netcdf_cfchecks.py",
- "gdrivers/generate_bag.py",
- "gdrivers/generate_fits.py"]
+collect_ignore = [
+ "kml_generate_test_files.py",
+ "gdrivers/netcdf_cfchecks.py",
+ "gdrivers/generate_bag.py",
+ "gdrivers/generate_fits.py",
+]
# we set ECW to not resolve projection and datum strings to get 3.x behavior.
gdal.SetConfigOption("ECW_DO_NOT_RESOLVE_DATUM_PROJECTION", "YES")
-if 'APPLY_LOCALE' in os.environ:
+if "APPLY_LOCALE" in os.environ:
import locale
- locale.setlocale(locale.LC_ALL, '')
+
+ locale.setlocale(locale.LC_ALL, "")
@pytest.fixture(scope="module", autouse=True)
@@ -62,16 +65,16 @@ def pytest_collection_modifyitems(config, items):
drivers_checked = {}
for item in items:
- for mark in item.iter_markers('require_driver'):
+ for mark in item.iter_markers("require_driver"):
driver_name = mark.args[0]
if driver_name not in drivers_checked:
driver = gdal.GetDriverByName(driver_name)
drivers_checked[driver_name] = bool(driver)
if driver:
# Store the driver on gdaltest module so test functions can assume it's there.
- setattr(gdaltest, '%s_drv' % driver_name.lower(), driver)
+ setattr(gdaltest, "%s_drv" % driver_name.lower(), driver)
if not drivers_checked[driver_name]:
item.add_marker(skip_driver_not_present)
- if not gdal.GetConfigOption('RUN_ON_DEMAND'):
- for mark in item.iter_markers('require_run_on_demand'):
+ if not gdal.GetConfigOption("RUN_ON_DEMAND"):
+ for mark in item.iter_markers("require_run_on_demand"):
item.add_marker(skip_run_on_demand_not_set)
diff --git a/autotest/gcore/aaigrid_read.py b/autotest/gcore/aaigrid_read.py
index ea769b3fff98..cad2e1b83c81 100755
--- a/autotest/gcore/aaigrid_read.py
+++ b/autotest/gcore/aaigrid_read.py
@@ -25,24 +25,23 @@
# Boston, MA 02111-1307, USA.
###############################################################################
-import pytest
-
import gdaltest
+import pytest
###############################################################################
# When imported build a list of units based on the files available.
init_list = [
- ('byte.tif.grd', 4672),
+ ("byte.tif.grd", 4672),
]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('AAIGrid')
+@pytest.mark.require_driver("AAIGrid")
def test_aaigrid_open(filename, checksum):
- ut = gdaltest.GDALTest('AAIGrid', filename, 1, checksum)
+ ut = gdaltest.GDALTest("AAIGrid", filename, 1, checksum)
ut.testOpen()
diff --git a/autotest/gcore/aaigrid_write.py b/autotest/gcore/aaigrid_write.py
index e840e526de6a..e4028b2898a7 100755
--- a/autotest/gcore/aaigrid_write.py
+++ b/autotest/gcore/aaigrid_write.py
@@ -26,27 +26,27 @@
# Boston, MA 02111-1307, USA.
###############################################################################
-import pytest
-
import gdaltest
+import pytest
###############################################################################
# When imported build a list of units based on the files available.
init_list = [
- ('byte.tif', 4672),
- ('int16.tif', 4672),
- ('uint16.tif', 4672),
- ('float32.tif', 4672),
- ('utmsmall.tif', 50054)]
+ ("byte.tif", 4672),
+ ("int16.tif", 4672),
+ ("uint16.tif", 4672),
+ ("float32.tif", 4672),
+ ("utmsmall.tif", 50054),
+]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('AAIGrid')
+@pytest.mark.require_driver("AAIGrid")
def test_aaigrid_create(filename, checksum):
- ut = gdaltest.GDALTest('AAIGrid', filename, 1, checksum)
+ ut = gdaltest.GDALTest("AAIGrid", filename, 1, checksum)
ut.testCreateCopy()
diff --git a/autotest/gcore/asyncreader.py b/autotest/gcore/asyncreader.py
index 5582e68399bb..2ea1f098a9a7 100755
--- a/autotest/gcore/asyncreader.py
+++ b/autotest/gcore/asyncreader.py
@@ -29,7 +29,6 @@
###############################################################################
-
from osgeo import gdal
###############################################################################
@@ -38,16 +37,23 @@
def test_asyncreader_1():
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
asyncreader = ds.BeginAsyncReader(0, 0, ds.RasterXSize, ds.RasterYSize)
buf = asyncreader.GetBuffer()
result = asyncreader.GetNextUpdatedRegion(0)
- assert result == [gdal.GARIO_COMPLETE, 0, 0, ds.RasterXSize, ds.RasterYSize], \
- 'wrong return values for GetNextUpdatedRegion()'
+ assert result == [
+ gdal.GARIO_COMPLETE,
+ 0,
+ 0,
+ ds.RasterXSize,
+ ds.RasterYSize,
+ ], "wrong return values for GetNextUpdatedRegion()"
ds.EndAsyncReader(asyncreader)
asyncreader = None
- out_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/asyncresult.tif', ds.RasterXSize, ds.RasterYSize, ds.RasterCount)
+ out_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/asyncresult.tif", ds.RasterXSize, ds.RasterYSize, ds.RasterCount
+ )
out_ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, buf)
expected_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
@@ -55,12 +61,9 @@ def test_asyncreader_1():
ds = None
out_ds = None
- gdal.Unlink('/vsimem/asyncresult.tif')
+ gdal.Unlink("/vsimem/asyncresult.tif")
for i, csum in enumerate(cs):
- assert csum == expected_cs[i], ('did not get expected checksum for band %d' % (i + 1))
-
-
-
-
-
+ assert csum == expected_cs[i], "did not get expected checksum for band %d" % (
+ i + 1
+ )
diff --git a/autotest/gcore/basic_test.py b/autotest/gcore/basic_test.py
index f8adb597892b..60225a49659c 100755
--- a/autotest/gcore/basic_test.py
+++ b/autotest/gcore/basic_test.py
@@ -33,38 +33,41 @@
import subprocess
import sys
-
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
# Nothing exciting here. Just trying to open non existing files,
# or empty names, or files that are not valid datasets...
def matches_non_existing_error_msg(msg):
- m1 = "does not exist in the file system, and is not recognized as a supported dataset name." in msg
- m2 = 'No such file or directory' in msg
- m3 = 'Permission denied' in msg
+ m1 = (
+ "does not exist in the file system, and is not recognized as a supported dataset name."
+ in msg
+ )
+ m2 = "No such file or directory" in msg
+ m3 = "Permission denied" in msg
return m1 or m2 or m3
def test_basic_test_1():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('non_existing_ds', gdal.GA_ReadOnly)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("non_existing_ds", gdal.GA_ReadOnly)
gdal.PopErrorHandler()
if ds is None and matches_non_existing_error_msg(gdal.GetLastErrorMsg()):
return
- pytest.fail('did not get expected error message, got %s' % gdal.GetLastErrorMsg())
+ pytest.fail("did not get expected error message, got %s" % gdal.GetLastErrorMsg())
-@pytest.mark.skipif(sys.platform != 'linux', reason='Incorrect platform')
+@pytest.mark.skipif(sys.platform != "linux", reason="Incorrect platform")
def test_basic_test_strace_non_existing_file():
python_exe = sys.executable
- cmd = "strace -f %s -c \"from osgeo import gdal; " % python_exe + (
- "gdal.OpenEx('non_existing_ds', gdal.OF_RASTER)"
- " \" ")
+ cmd = 'strace -f %s -c "from osgeo import gdal; ' % python_exe + (
+ "gdal.OpenEx('non_existing_ds', gdal.OF_RASTER)" ' " '
+ )
try:
(_, err) = gdaltest.runexternal_out_and_err(cmd)
except Exception:
@@ -72,50 +75,51 @@ def test_basic_test_strace_non_existing_file():
pytest.skip()
interesting_lines = []
- for line in err.split('\n'):
- if 'non_existing_ds' in line:
- interesting_lines += [ line ]
+ for line in err.split("\n"):
+ if "non_existing_ds" in line:
+ interesting_lines += [line]
# Only 3 calls on the file are legit: open(), stat() and readlink()
- assert len(interesting_lines) <= 3, 'too many system calls accessing file'
+ assert len(interesting_lines) <= 3, "too many system calls accessing file"
def test_basic_test_2():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('non_existing_ds', gdal.GA_Update)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("non_existing_ds", gdal.GA_Update)
gdal.PopErrorHandler()
if ds is None and matches_non_existing_error_msg(gdal.GetLastErrorMsg()):
return
- pytest.fail('did not get expected error message, got %s' % gdal.GetLastErrorMsg())
+ pytest.fail("did not get expected error message, got %s" % gdal.GetLastErrorMsg())
def test_basic_test_3():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('', gdal.GA_ReadOnly)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("", gdal.GA_ReadOnly)
gdal.PopErrorHandler()
if ds is None and matches_non_existing_error_msg(gdal.GetLastErrorMsg()):
return
- pytest.fail('did not get expected error message, got %s' % gdal.GetLastErrorMsg())
+ pytest.fail("did not get expected error message, got %s" % gdal.GetLastErrorMsg())
def test_basic_test_4():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('', gdal.GA_Update)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("", gdal.GA_Update)
gdal.PopErrorHandler()
if ds is None and matches_non_existing_error_msg(gdal.GetLastErrorMsg()):
return
- pytest.fail('did not get expected error message, got %s' % gdal.GetLastErrorMsg())
+ pytest.fail("did not get expected error message, got %s" % gdal.GetLastErrorMsg())
def test_basic_test_5():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/doctype.xml', gdal.GA_ReadOnly)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/doctype.xml", gdal.GA_ReadOnly)
gdal.PopErrorHandler()
last_error = gdal.GetLastErrorMsg()
- expected = '`data/doctype.xml\' not recognized as a supported file format'
+ expected = "`data/doctype.xml' not recognized as a supported file format"
if ds is None and expected in last_error:
return
pytest.fail()
+
###############################################################################
# Issue several AllRegister() to check that GDAL drivers are good citizens
@@ -125,6 +129,7 @@ def test_basic_test_6():
gdal.AllRegister()
gdal.AllRegister()
+
###############################################################################
# Test fix for #3077 (check that errors are cleared when using UseExceptions())
@@ -132,22 +137,26 @@ def test_basic_test_6():
def basic_test_7_internal():
with pytest.raises(Exception):
- gdal.Open('non_existing_ds', gdal.GA_ReadOnly)
+ gdal.Open("non_existing_ds", gdal.GA_ReadOnly)
# Special case: we should still be able to get the error message
# until we call a new GDAL function
- assert matches_non_existing_error_msg(gdal.GetLastErrorMsg()), ('did not get expected error message, got %s' % gdal.GetLastErrorMsg())
+ assert matches_non_existing_error_msg(gdal.GetLastErrorMsg()), (
+ "did not get expected error message, got %s" % gdal.GetLastErrorMsg()
+ )
# Special case: we should still be able to get the error message
# until we call a new GDAL function
- assert matches_non_existing_error_msg(gdal.GetLastErrorMsg()), 'did not get expected error message, got %s' % gdal.GetLastErrorMsg()
+ assert matches_non_existing_error_msg(gdal.GetLastErrorMsg()), (
+ "did not get expected error message, got %s" % gdal.GetLastErrorMsg()
+ )
- assert gdal.GetLastErrorType() != 0, 'did not get expected error type'
+ assert gdal.GetLastErrorType() != 0, "did not get expected error type"
# Should issue an implicit CPLErrorReset()
gdal.GetCacheMax()
- assert gdal.GetLastErrorType() == 0, 'got unexpected error type'
+ assert gdal.GetLastErrorType() == 0, "got unexpected error type"
def test_basic_test_7():
@@ -158,38 +167,36 @@ def test_basic_test_7():
gdal.DontUseExceptions()
return ret
+
###############################################################################
# Test gdal.VersionInfo('RELEASE_DATE') and gdal.VersionInfo('LICENSE')
def test_basic_test_8():
- ret = gdal.VersionInfo('RELEASE_DATE')
+ ret = gdal.VersionInfo("RELEASE_DATE")
assert len(ret) == 8
python_exe = sys.executable
- if sys.platform == 'win32':
- python_exe = python_exe.replace('\\', '/')
+ if sys.platform == "win32":
+ python_exe = python_exe.replace("\\", "/")
- license_text = gdal.VersionInfo('LICENSE')
+ license_text = gdal.VersionInfo("LICENSE")
assert (
- license_text.startswith('GDAL/OGR is released under the MIT license')
- or 'GDAL/OGR Licensing' in license_text
+ license_text.startswith("GDAL/OGR is released under the MIT license")
+ or "GDAL/OGR Licensing" in license_text
)
# Use a subprocess to avoid the cached license text
env = os.environ.copy()
- env['GDAL_DATA'] = 'tmp'
- with open('tmp/LICENSE.TXT', 'wt') as f:
- f.write('fake_license')
+ env["GDAL_DATA"] = "tmp"
+ with open("tmp/LICENSE.TXT", "wt") as f:
+ f.write("fake_license")
license_text = subprocess.check_output(
- [sys.executable, 'basic_test_subprocess.py'],
- env=env
- ).decode('utf-8')
- os.unlink('tmp/LICENSE.TXT')
- assert (
- license_text.startswith(u'fake_license')
- )
+ [sys.executable, "basic_test_subprocess.py"], env=env
+ ).decode("utf-8")
+ os.unlink("tmp/LICENSE.TXT")
+ assert license_text.startswith("fake_license")
###############################################################################
@@ -206,16 +213,17 @@ def test_basic_test_9():
gdaltest.eErrClass = 0
gdaltest.err_no = 0
- gdaltest.msg = ''
+ gdaltest.msg = ""
gdal.PushErrorHandler(my_python_error_handler)
- gdal.Error(1, 2, 'test')
+ gdal.Error(1, 2, "test")
gdal.PopErrorHandler()
assert gdaltest.eErrClass == 1
assert gdaltest.err_no == 2
- assert gdaltest.msg == 'test'
+ assert gdaltest.msg == "test"
+
###############################################################################
# Test gdal.PushErrorHandler() with a Python error handler as a method (#5186)
@@ -237,19 +245,20 @@ def test_basic_test_10():
# Check that reference counting works OK
gdal.PushErrorHandler(my_python_error_handler_class().handler)
- gdal.Error(1, 2, 'test')
+ gdal.Error(1, 2, "test")
gdal.PopErrorHandler()
error_handler = my_python_error_handler_class()
gdal.PushErrorHandler(error_handler.handler)
- gdal.Error(1, 2, 'test')
+ gdal.Error(1, 2, "test")
gdal.PopErrorHandler()
assert error_handler.eErrClass == 1
assert error_handler.err_no == 2
- assert error_handler.msg == 'test'
+ assert error_handler.msg == "test"
+
###############################################################################
# Test gdal.OpenEx()
@@ -257,90 +266,95 @@ def test_basic_test_10():
def test_basic_test_11():
- ds = gdal.OpenEx('data/byte.tif')
+ ds = gdal.OpenEx("data/byte.tif")
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_RASTER)
+ ds = gdal.OpenEx("data/byte.tif", gdal.OF_RASTER)
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_VECTOR)
+ ds = gdal.OpenEx("data/byte.tif", gdal.OF_VECTOR)
assert ds is None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_RASTER | gdal.OF_VECTOR)
+ ds = gdal.OpenEx("data/byte.tif", gdal.OF_RASTER | gdal.OF_VECTOR)
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_ALL)
+ ds = gdal.OpenEx("data/byte.tif", gdal.OF_ALL)
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_UPDATE)
+ ds = gdal.OpenEx("data/byte.tif", gdal.OF_UPDATE)
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', gdal.OF_RASTER | gdal.OF_VECTOR | gdal.OF_UPDATE | gdal.OF_VERBOSE_ERROR)
+ ds = gdal.OpenEx(
+ "data/byte.tif",
+ gdal.OF_RASTER | gdal.OF_VECTOR | gdal.OF_UPDATE | gdal.OF_VERBOSE_ERROR,
+ )
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', allowed_drivers=[])
+ ds = gdal.OpenEx("data/byte.tif", allowed_drivers=[])
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', allowed_drivers=['GTiff'])
+ ds = gdal.OpenEx("data/byte.tif", allowed_drivers=["GTiff"])
assert ds is not None
- ds = gdal.OpenEx('data/byte.tif', allowed_drivers=['PNG'])
+ ds = gdal.OpenEx("data/byte.tif", allowed_drivers=["PNG"])
assert ds is None
with gdaltest.error_handler():
- ds = gdal.OpenEx('data/byte.tif', open_options=['FOO'])
+ ds = gdal.OpenEx("data/byte.tif", open_options=["FOO"])
assert ds is not None
- ar_ds = [gdal.OpenEx('data/byte.tif', gdal.OF_SHARED) for _ in range(1024)]
+ ar_ds = [gdal.OpenEx("data/byte.tif", gdal.OF_SHARED) for _ in range(1024)]
assert ar_ds[1023] is not None
ar_ds = None
- ds = gdal.OpenEx('../ogr/data/poly.shp', gdal.OF_RASTER)
+ ds = gdal.OpenEx("../ogr/data/poly.shp", gdal.OF_RASTER)
assert ds is None
- ds = gdal.OpenEx('../ogr/data/poly.shp', gdal.OF_VECTOR)
+ ds = gdal.OpenEx("../ogr/data/poly.shp", gdal.OF_VECTOR)
assert ds is not None
assert ds.GetLayerCount() == 1
assert ds.GetLayer(0) is not None
ds.GetLayer(0).GetMetadata()
- ds = gdal.OpenEx('../ogr/data/poly.shp', allowed_drivers=['ESRI Shapefile'])
+ ds = gdal.OpenEx("../ogr/data/poly.shp", allowed_drivers=["ESRI Shapefile"])
assert ds is not None
- ds = gdal.OpenEx('../ogr/data/poly.shp', gdal.OF_RASTER | gdal.OF_VECTOR)
+ ds = gdal.OpenEx("../ogr/data/poly.shp", gdal.OF_RASTER | gdal.OF_VECTOR)
assert ds is not None
- ds = gdal.OpenEx('non existing')
- assert ds is None and gdal.GetLastErrorMsg() == ''
+ ds = gdal.OpenEx("non existing")
+ assert ds is None and gdal.GetLastErrorMsg() == ""
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.OpenEx('non existing', gdal.OF_VERBOSE_ERROR)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.OpenEx("non existing", gdal.OF_VERBOSE_ERROR)
gdal.PopErrorHandler()
- assert ds is None and gdal.GetLastErrorMsg() != ''
+ assert ds is None and gdal.GetLastErrorMsg() != ""
old_use_exceptions_status = gdal.GetUseExceptions()
gdal.UseExceptions()
got_exception = False
try:
- ds = gdal.OpenEx('non existing')
+ ds = gdal.OpenEx("non existing")
except RuntimeError:
got_exception = True
if old_use_exceptions_status == 0:
gdal.DontUseExceptions()
assert got_exception
+
###############################################################################
# Test GDAL layer API
def test_basic_test_12():
- ds = gdal.GetDriverByName('MEMORY').Create('bar', 0, 0, 0)
- assert ds.GetDescription() == 'bar'
+ ds = gdal.GetDriverByName("MEMORY").Create("bar", 0, 0, 0)
+ assert ds.GetDescription() == "bar"
lyr = ds.CreateLayer("foo")
assert lyr is not None
- assert lyr.GetDescription() == 'foo'
+ assert lyr.GetDescription() == "foo"
from osgeo import ogr
+
assert lyr.TestCapability(ogr.OLCCreateField) == 1
assert ds.GetLayerCount() == 1
lyr = ds.GetLayerByName("foo")
@@ -350,23 +364,24 @@ def test_basic_test_12():
lyr = ds.GetLayer(0)
assert lyr is not None
assert not ds.IsLayerPrivate(0)
- sql_lyr = ds.ExecuteSQL('SELECT * FROM foo')
+ sql_lyr = ds.ExecuteSQL("SELECT * FROM foo")
assert sql_lyr is not None
ds.ReleaseResultSet(sql_lyr)
- new_lyr = ds.CopyLayer(lyr, 'bar')
+ new_lyr = ds.CopyLayer(lyr, "bar")
assert new_lyr is not None
assert ds.DeleteLayer(0) == 0
- assert ds.DeleteLayer('bar') == 0
+ assert ds.DeleteLayer("bar") == 0
ds.SetStyleTable(ds.GetStyleTable())
ds = None
+
###############################################################################
# Test correct sorting of StringList / metadata (#5540, #5557)
def test_basic_test_13():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
for i in range(3):
if i == 0:
ds.SetMetadataItem("ScaleBounds", "True")
@@ -381,18 +396,18 @@ def test_basic_test_13():
ds.SetMetadataItem("ScaleBounds", "True")
ds.SetMetadataItem("ScaleBounds.MaxScale", "2000000")
- assert ds.GetMetadataItem('scalebounds') == 'True'
- assert ds.GetMetadataItem('ScaleBounds') == 'True'
- assert ds.GetMetadataItem('SCALEBOUNDS') == 'True'
- assert ds.GetMetadataItem('ScaleBounds.MinScale') == '0'
- assert ds.GetMetadataItem('ScaleBounds.MaxScale') == '2000000'
+ assert ds.GetMetadataItem("scalebounds") == "True"
+ assert ds.GetMetadataItem("ScaleBounds") == "True"
+ assert ds.GetMetadataItem("SCALEBOUNDS") == "True"
+ assert ds.GetMetadataItem("ScaleBounds.MinScale") == "0"
+ assert ds.GetMetadataItem("ScaleBounds.MaxScale") == "2000000"
ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
for i in range(200):
ds.SetMetadataItem("FILENAME_%d" % i, "%d" % i)
for i in range(200):
- assert ds.GetMetadataItem("FILENAME_%d" % i) == '%d' % i
+ assert ds.GetMetadataItem("FILENAME_%d" % i) == "%d" % i
###############################################################################
@@ -401,70 +416,70 @@ def test_basic_test_13():
def test_basic_test_14():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
- ds.SetMetadata('foo')
- assert ds.GetMetadata_List() == ['foo']
+ ds.SetMetadata("foo")
+ assert ds.GetMetadata_List() == ["foo"]
with pytest.raises(Exception):
ds.SetMetadata(5)
-
- ds.SetMetadata(['foo=bar'])
- assert ds.GetMetadata_List() == ['foo=bar']
+ ds.SetMetadata(["foo=bar"])
+ assert ds.GetMetadata_List() == ["foo=bar"]
with gdaltest.error_handler():
with pytest.raises(Exception):
ds.SetMetadata([5])
+ ds.SetMetadata({"foo": "baz"})
+ assert ds.GetMetadata_List() == ["foo=baz"]
- ds.SetMetadata({'foo': 'baz'})
- assert ds.GetMetadata_List() == ['foo=baz']
-
- ds.SetMetadata({'foo': b'baz'})
- assert ds.GetMetadata_List() == ['foo=baz']
+ ds.SetMetadata({"foo": b"baz"})
+ assert ds.GetMetadata_List() == ["foo=baz"]
with gdaltest.error_handler():
with pytest.raises(Exception):
- ds.SetMetadata({'foo': b'zero_byte_in_string\0'})
+ ds.SetMetadata({"foo": b"zero_byte_in_string\0"})
- ds.SetMetadata({'foo': 5})
- assert ds.GetMetadata_List() == ['foo=5']
+ ds.SetMetadata({"foo": 5})
+ assert ds.GetMetadata_List() == ["foo=5"]
- ds.SetMetadata({5: 'baz'})
- assert ds.GetMetadata_List() == ['5=baz']
+ ds.SetMetadata({5: "baz"})
+ assert ds.GetMetadata_List() == ["5=baz"]
ds.SetMetadata({5: 6})
- assert ds.GetMetadata_List() == ['5=6']
+ assert ds.GetMetadata_List() == ["5=6"]
- val = '\u00e9ven'
+ val = "\u00e9ven"
- ds.SetMetadata({'bar': val})
- assert ds.GetMetadata()['bar'] == val
+ ds.SetMetadata({"bar": val})
+ assert ds.GetMetadata()["bar"] == val
- ds.SetMetadata({val: 'baz'})
- assert ds.GetMetadata()[val] == 'baz'
+ ds.SetMetadata({val: "baz"})
+ assert ds.GetMetadata()[val] == "baz"
ds.SetMetadata({val: 5})
- assert ds.GetMetadata_List() == ['\u00e9ven=5']
+ assert ds.GetMetadata_List() == ["\u00e9ven=5"]
ds.SetMetadata({5: val})
- assert ds.GetMetadata_List() == ['5=\u00e9ven']
+ assert ds.GetMetadata_List() == ["5=\u00e9ven"]
class ClassWithoutStrRepr:
def __init__(self):
pass
+
def __str__(self):
- raise Exception('no string representation')
+ raise Exception("no string representation")
with pytest.raises(Exception):
- ds.SetMetadata({'a': ClassWithoutStrRepr()})
+ ds.SetMetadata({"a": ClassWithoutStrRepr()})
with pytest.raises(Exception):
- ds.SetMetadata({ClassWithoutStrRepr(): 'a'})
+ ds.SetMetadata({ClassWithoutStrRepr(): "a"})
+
+ ds.SetMetadata([b"foo=\xE8\x03"])
+ assert ds.GetMetadata_List() == [b"foo=\xe8\x03"]
- ds.SetMetadata([b'foo=\xE8\x03'])
- assert ds.GetMetadata_List() == [b'foo=\xe8\x03']
###############################################################################
# Test errors with progress callback
@@ -481,29 +496,37 @@ def basic_test_15_cbk_no_ret(a, b, c):
def basic_test_15_cbk_bad_ret(a, b, c):
# pylint: disable=unused-argument
- return 'ok'
+ return "ok"
def test_basic_test_15():
- mem_driver = gdal.GetDriverByName('MEM')
+ mem_driver = gdal.GetDriverByName("MEM")
with pytest.raises(Exception):
with gdaltest.error_handler():
- gdal.GetDriverByName('MEM').CreateCopy('', gdal.GetDriverByName('MEM').Create('', 1, 1), callback='foo')
-
+ gdal.GetDriverByName("MEM").CreateCopy(
+ "", gdal.GetDriverByName("MEM").Create("", 1, 1), callback="foo"
+ )
with gdaltest.error_handler():
- ds = mem_driver.CreateCopy('', mem_driver.Create('', 1, 1), callback=basic_test_15_cbk_no_argument)
+ ds = mem_driver.CreateCopy(
+ "", mem_driver.Create("", 1, 1), callback=basic_test_15_cbk_no_argument
+ )
assert ds is None
with gdaltest.error_handler():
- ds = mem_driver.CreateCopy('', mem_driver.Create('', 1, 1), callback=basic_test_15_cbk_no_ret)
+ ds = mem_driver.CreateCopy(
+ "", mem_driver.Create("", 1, 1), callback=basic_test_15_cbk_no_ret
+ )
assert ds is not None
with gdaltest.error_handler():
- ds = mem_driver.CreateCopy('', mem_driver.Create('', 1, 1), callback=basic_test_15_cbk_bad_ret)
+ ds = mem_driver.CreateCopy(
+ "", mem_driver.Create("", 1, 1), callback=basic_test_15_cbk_bad_ret
+ )
assert ds is None
+
###############################################################################
# Test unrecognized and recognized open options prefixed by @
@@ -511,15 +534,18 @@ def test_basic_test_15():
def test_basic_test_16():
gdal.ErrorReset()
- gdal.OpenEx('data/byte.tif', open_options=['@UNRECOGNIZED=FOO'])
- assert gdal.GetLastErrorMsg() == ''
+ gdal.OpenEx("data/byte.tif", open_options=["@UNRECOGNIZED=FOO"])
+ assert gdal.GetLastErrorMsg() == ""
gdal.ErrorReset()
- gdal.Translate('/vsimem/temp.tif', 'data/byte.tif', options='-co BLOCKYSIZE=10')
+ gdal.Translate("/vsimem/temp.tif", "data/byte.tif", options="-co BLOCKYSIZE=10")
with gdaltest.error_handler():
- gdal.OpenEx('/vsimem/temp.tif', gdal.OF_UPDATE, open_options=['@NUM_THREADS=INVALID'])
- gdal.Unlink('/vsimem/temp.tif')
- assert 'Invalid value for NUM_THREADS: INVALID' in gdal.GetLastErrorMsg()
+ gdal.OpenEx(
+ "/vsimem/temp.tif", gdal.OF_UPDATE, open_options=["@NUM_THREADS=INVALID"]
+ )
+ gdal.Unlink("/vsimem/temp.tif")
+ assert "Invalid value for NUM_THREADS: INVALID" in gdal.GetLastErrorMsg()
+
###############################################################################
# Test mix of gdal/ogr.UseExceptions()/DontUseExceptions()
@@ -534,11 +560,11 @@ def test_basic_test_17():
gdal.UseExceptions()
flag = False
try:
- gdal.Open('do_not_exist')
+ gdal.Open("do_not_exist")
flag = True
except RuntimeError:
pass
- assert not flag, 'expected failure'
+ assert not flag, "expected failure"
gdal.DontUseExceptions()
ogr.DontUseExceptions()
assert not gdal.GetUseExceptions()
@@ -565,25 +591,25 @@ def test_basic_test_17_part_2():
except:
gdal.DontUseExceptions()
ogr.DontUseExceptions()
- assert not flag, 'expected failure'
+ assert not flag, "expected failure"
assert not gdal.GetUseExceptions()
assert not ogr.GetUseExceptions()
def test_gdal_getspatialref():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
assert ds.GetSpatialRef() is not None
- ds = gdal.Open('data/minfloat.tif')
+ ds = gdal.Open("data/minfloat.tif")
assert ds.GetSpatialRef() is None
def test_gdal_setspatialref():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
sr = ds.GetSpatialRef()
- ds = gdal.GetDriverByName('MEM').Create('',1,1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
assert ds.SetSpatialRef(sr) == gdal.CE_None
sr_got = ds.GetSpatialRef()
assert sr_got
@@ -592,18 +618,18 @@ def test_gdal_setspatialref():
def test_gdal_getgcpspatialref():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
assert ds.GetGCPSpatialRef() is None
- ds = gdal.Open('data/byte_gcp.tif')
+ ds = gdal.Open("data/byte_gcp.tif")
assert ds.GetGCPSpatialRef() is not None
def test_gdal_setgcpspatialref():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
sr = ds.GetSpatialRef()
- ds = gdal.GetDriverByName('MEM').Create('',1,1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
gcp = gdal.GCP()
gcp.GCPPixel = 0
gcp.GCPLine = 0
@@ -617,111 +643,109 @@ def test_gdal_setgcpspatialref():
def test_gdal_getdatatypename():
- assert gdal.GetDataTypeName(gdal.GDT_Byte) == 'Byte'
+ assert gdal.GetDataTypeName(gdal.GDT_Byte) == "Byte"
with pytest.raises(Exception):
gdal.GetDataTypeName(-1)
with pytest.raises(Exception):
gdal.GetDataTypeName(100)
with pytest.raises(Exception):
- gdal.GetDataTypeName('invalid')
+ gdal.GetDataTypeName("invalid")
def test_gdal_EscapeString():
- assert gdal.EscapeString( '', scheme = gdal.CPLES_XML ) == ''
-
- assert gdal.EscapeString( b'', scheme = gdal.CPLES_XML ) == b''
-
- assert gdal.EscapeString( '&', gdal.CPLES_XML ) == '&'
-
- assert gdal.EscapeString( '<', gdal.CPLES_XML ) == '<'
+ assert gdal.EscapeString("", scheme=gdal.CPLES_XML) == ""
- assert gdal.EscapeString( '>', gdal.CPLES_XML ) == '>'
+ assert gdal.EscapeString(b"", scheme=gdal.CPLES_XML) == b""
- assert gdal.EscapeString( '"', gdal.CPLES_XML ) == '"'
+ assert gdal.EscapeString("&", gdal.CPLES_XML) == "&"
- assert gdal.EscapeString( b'\xEF\xBB\xBF', gdal.CPLES_XML ) == b''
+ assert gdal.EscapeString("<", gdal.CPLES_XML) == "<"
- assert gdal.EscapeString( '\t', gdal.CPLES_XML ) == '\t'
+ assert gdal.EscapeString(">", gdal.CPLES_XML) == ">"
- assert gdal.EscapeString( '\n', gdal.CPLES_XML ) == '\n'
+ assert gdal.EscapeString('"', gdal.CPLES_XML) == """
- assert gdal.EscapeString( b'\x01a', gdal.CPLES_XML ) == b'a'
+ assert gdal.EscapeString(b"\xEF\xBB\xBF", gdal.CPLES_XML) == b""
+ assert gdal.EscapeString("\t", gdal.CPLES_XML) == "\t"
- assert gdal.EscapeString( '', gdal.CPLES_XML_BUT_QUOTES ) == ''
+ assert gdal.EscapeString("\n", gdal.CPLES_XML) == "\n"
- assert gdal.EscapeString( '&', gdal.CPLES_XML_BUT_QUOTES ) == '&'
+ assert gdal.EscapeString(b"\x01a", gdal.CPLES_XML) == b"a"
- assert gdal.EscapeString( '<', gdal.CPLES_XML_BUT_QUOTES ) == '<'
+ assert gdal.EscapeString("", gdal.CPLES_XML_BUT_QUOTES) == ""
- assert gdal.EscapeString( '>', gdal.CPLES_XML_BUT_QUOTES ) == '>'
+ assert gdal.EscapeString("&", gdal.CPLES_XML_BUT_QUOTES) == "&"
- assert gdal.EscapeString( '"', gdal.CPLES_XML_BUT_QUOTES ) == '"'
+ assert gdal.EscapeString("<", gdal.CPLES_XML_BUT_QUOTES) == "<"
- assert gdal.EscapeString( b'\xEF\xBB\xBF', gdal.CPLES_XML_BUT_QUOTES ) == b''
+ assert gdal.EscapeString(">", gdal.CPLES_XML_BUT_QUOTES) == ">"
- assert gdal.EscapeString( '\t', gdal.CPLES_XML_BUT_QUOTES ) == '\t'
+ assert gdal.EscapeString('"', gdal.CPLES_XML_BUT_QUOTES) == '"'
- assert gdal.EscapeString( '\n', gdal.CPLES_XML_BUT_QUOTES ) == '\n'
+ assert gdal.EscapeString(b"\xEF\xBB\xBF", gdal.CPLES_XML_BUT_QUOTES) == b""
- assert gdal.EscapeString( b'\x01a', gdal.CPLES_XML_BUT_QUOTES ) == b'a'
+ assert gdal.EscapeString("\t", gdal.CPLES_XML_BUT_QUOTES) == "\t"
+ assert gdal.EscapeString("\n", gdal.CPLES_XML_BUT_QUOTES) == "\n"
- assert gdal.EscapeString( '', gdal.CPLES_BackslashQuotable ) == ''
+ assert gdal.EscapeString(b"\x01a", gdal.CPLES_XML_BUT_QUOTES) == b"a"
- assert gdal.EscapeString( 'a', gdal.CPLES_BackslashQuotable ) == 'a'
+ assert gdal.EscapeString("", gdal.CPLES_BackslashQuotable) == ""
- assert gdal.EscapeString( b'\x00x', gdal.CPLES_BackslashQuotable ) == b'\\0x'
+ assert gdal.EscapeString("a", gdal.CPLES_BackslashQuotable) == "a"
- assert gdal.EscapeString( b'\x01', gdal.CPLES_BackslashQuotable ) == b'\x01'
+ assert gdal.EscapeString(b"\x00x", gdal.CPLES_BackslashQuotable) == b"\\0x"
- assert gdal.EscapeString( '\\', gdal.CPLES_BackslashQuotable ) == '\\\\'
+ assert gdal.EscapeString(b"\x01", gdal.CPLES_BackslashQuotable) == b"\x01"
- assert gdal.EscapeString( '\n', gdal.CPLES_BackslashQuotable ) == '\\n'
+ assert gdal.EscapeString("\\", gdal.CPLES_BackslashQuotable) == "\\\\"
- assert gdal.EscapeString( '"', gdal.CPLES_BackslashQuotable ) == '\\"'
+ assert gdal.EscapeString("\n", gdal.CPLES_BackslashQuotable) == "\\n"
+ assert gdal.EscapeString('"', gdal.CPLES_BackslashQuotable) == '\\"'
- assert gdal.EscapeString( '', gdal.CPLES_URL ) == ''
+ assert gdal.EscapeString("", gdal.CPLES_URL) == ""
- assert gdal.EscapeString( 'aZAZ09$-_.+!*\'(), ', gdal.CPLES_URL ) == 'aZAZ09$-_.+!*\'(),%20'
-
-
- assert gdal.EscapeString( "", gdal.CPLES_SQL ) == ""
+ assert (
+ gdal.EscapeString("aZAZ09$-_.+!*'(), ", gdal.CPLES_URL)
+ == "aZAZ09$-_.+!*'(),%20"
+ )
- assert gdal.EscapeString( "a", gdal.CPLES_SQL ) == "a"
+ assert gdal.EscapeString("", gdal.CPLES_SQL) == ""
- assert gdal.EscapeString( "a'a", gdal.CPLES_SQL ) == "a''a"
+ assert gdal.EscapeString("a", gdal.CPLES_SQL) == "a"
+ assert gdal.EscapeString("a'a", gdal.CPLES_SQL) == "a''a"
- assert gdal.EscapeString( "", gdal.CPLES_CSV ) == ""
+ assert gdal.EscapeString("", gdal.CPLES_CSV) == ""
- assert gdal.EscapeString( "a'b", gdal.CPLES_CSV ) == "a'b"
+ assert gdal.EscapeString("a'b", gdal.CPLES_CSV) == "a'b"
- assert gdal.EscapeString( 'a"b', gdal.CPLES_CSV ) == '"a""b"'
+ assert gdal.EscapeString('a"b', gdal.CPLES_CSV) == '"a""b"'
- assert gdal.EscapeString( 'a,b', gdal.CPLES_CSV ) == '"a,b"'
+ assert gdal.EscapeString("a,b", gdal.CPLES_CSV) == '"a,b"'
- assert gdal.EscapeString( 'a,b', gdal.CPLES_CSV ) == '"a,b"'
+ assert gdal.EscapeString("a,b", gdal.CPLES_CSV) == '"a,b"'
- assert gdal.EscapeString( 'a\tb', gdal.CPLES_CSV ) == '"a\tb"'
+ assert gdal.EscapeString("a\tb", gdal.CPLES_CSV) == '"a\tb"'
- assert gdal.EscapeString( 'a\nb', gdal.CPLES_CSV ) == '"a\nb"'
+ assert gdal.EscapeString("a\nb", gdal.CPLES_CSV) == '"a\nb"'
- assert gdal.EscapeString( 'a\rb', gdal.CPLES_CSV ) == '"a\rb"'
+ assert gdal.EscapeString("a\rb", gdal.CPLES_CSV) == '"a\rb"'
def test_gdal_EscapeString_errors():
if sys.maxsize > 2**32:
- pytest.skip('Test not available on 64 bit')
+ pytest.skip("Test not available on 64 bit")
# Allocation will be < 4 GB, but will fail being > 2 GB
- assert gdal.EscapeString( b'"' * (((1 << 32)-1) // 6), gdal.CPLES_XML ) is None
+ assert gdal.EscapeString(b'"' * (((1 << 32) - 1) // 6), gdal.CPLES_XML) is None
# Allocation will be > 4 GB
- assert gdal.EscapeString( b'"' * (((1 << 32)-1) // 6 + 1), gdal.CPLES_XML ) is None
+ assert gdal.EscapeString(b'"' * (((1 << 32) - 1) // 6 + 1), gdal.CPLES_XML) is None
def test_gdal_DataTypeUnion():
diff --git a/autotest/gcore/basic_test_subprocess.py b/autotest/gcore/basic_test_subprocess.py
index a6142521ee73..34e2a8cd23a4 100755
--- a/autotest/gcore/basic_test_subprocess.py
+++ b/autotest/gcore/basic_test_subprocess.py
@@ -31,7 +31,6 @@
from osgeo import gdal
-
-if __name__ == '__main__':
+if __name__ == "__main__":
# test_basic_test_8
- print(gdal.VersionInfo('LICENSE'))
+ print(gdal.VersionInfo("LICENSE"))
diff --git a/autotest/gcore/bmp_read.py b/autotest/gcore/bmp_read.py
index 4c9dd18b55c5..bfb099f38c2e 100755
--- a/autotest/gcore/bmp_read.py
+++ b/autotest/gcore/bmp_read.py
@@ -27,49 +27,53 @@
###############################################################################
-import pytest
-
import gdaltest
-
+import pytest
init_list = [
- ('1bit.bmp', 200),
- ('4bit_pal.bmp', 2587),
- ('8bit_pal.bmp', 4672),
- ('byte_rle8.bmp', 4672)]
+ ("1bit.bmp", 200),
+ ("4bit_pal.bmp", 2587),
+ ("8bit_pal.bmp", 4672),
+ ("byte_rle8.bmp", 4672),
+]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('BMP')
+@pytest.mark.require_driver("BMP")
def test_bmp_open(filename, checksum):
- ut = gdaltest.GDALTest('BMP', filename, 1, checksum)
+ ut = gdaltest.GDALTest("BMP", filename, 1, checksum)
ut.testOpen()
def test_bmp_online_1():
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/bmp/8bit_pal_rle.bmp', '8bit_pal_rle.bmp'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/bmp/8bit_pal_rle.bmp", "8bit_pal_rle.bmp"
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('BMP', 'tmp/cache/8bit_pal_rle.bmp', 1, 17270, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "BMP", "tmp/cache/8bit_pal_rle.bmp", 1, 17270, filename_absolute=1
+ )
return tst.testOpen()
def test_bmp_online_2():
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/bmp/24bit.bmp', '24bit.bmp'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/bmp/24bit.bmp", "24bit.bmp"
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('BMP', 'tmp/cache/24bit.bmp', 1, 7158, filename_absolute=1)
- if tst == 'success':
- tst = gdaltest.GDALTest('BMP', 'tmp/cache/24bit.bmp', 3, 27670, filename_absolute=1)
+ tst = gdaltest.GDALTest("BMP", "tmp/cache/24bit.bmp", 1, 7158, filename_absolute=1)
+ if tst == "success":
+ tst = gdaltest.GDALTest(
+ "BMP", "tmp/cache/24bit.bmp", 3, 27670, filename_absolute=1
+ )
return tst.testOpen()
-
-
-
diff --git a/autotest/gcore/bmp_write.py b/autotest/gcore/bmp_write.py
index e7140485528f..b03a45ec34a3 100755
--- a/autotest/gcore/bmp_write.py
+++ b/autotest/gcore/bmp_write.py
@@ -28,9 +28,8 @@
###############################################################################
-import pytest
-
import gdaltest
+import pytest
###############################################################################
# Test creating an in memory copy.
@@ -38,7 +37,7 @@
def test_bmp_vsimem():
- tst = gdaltest.GDALTest('BMP', 'byte.tif', 1, 4672)
+ tst = gdaltest.GDALTest("BMP", "byte.tif", 1, 4672)
return tst.testCreateCopy(vsimem=1)
@@ -47,27 +46,26 @@ def test_bmp_vsimem():
# When imported build a list of units based on the files available.
-
init_list = [
- ('byte.tif', 4672),
- ('utmsmall.tif', 50054),
- ('8bit_pal.bmp', 4672), ]
+ ("byte.tif", 4672),
+ ("utmsmall.tif", 50054),
+ ("8bit_pal.bmp", 4672),
+]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ ],
)
-@pytest.mark.require_driver('BMP')
+@pytest.mark.require_driver("BMP")
def test_bmp_create(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('BMP', filename, 1, checksum)
+ ut = gdaltest.GDALTest("BMP", filename, 1, checksum)
getattr(ut, testfunction)()
-
-
diff --git a/autotest/gcore/cog.py b/autotest/gcore/cog.py
index 820943cb4099..e702bbf26906 100755
--- a/autotest/gcore/cog.py
+++ b/autotest/gcore/cog.py
@@ -29,16 +29,15 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import pytest
import struct
import sys
-from osgeo import gdal
-from osgeo import osr
-
import gdaltest
+import pytest
from test_py_scripts import samples_path
+from osgeo import gdal, osr
+
###############################################################################
@@ -48,24 +47,28 @@ def _check_cog(filename):
if path not in sys.path:
sys.path.append(path)
import validate_cloud_optimized_geotiff
+
try:
- _, errors, _ = validate_cloud_optimized_geotiff.validate(filename, full_check=True)
- assert not errors, 'validate_cloud_optimized_geotiff failed'
+ _, errors, _ = validate_cloud_optimized_geotiff.validate(
+ filename, full_check=True
+ )
+ assert not errors, "validate_cloud_optimized_geotiff failed"
except OSError:
- pytest.fail('validate_cloud_optimized_geotiff failed')
+ pytest.fail("validate_cloud_optimized_geotiff failed")
###############################################################################
+
def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micro):
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] == 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] == "INTERNAL":
return True
- if md['LIBTIFF'].startswith('LIBTIFF, Version '):
- version = md['LIBTIFF'][len('LIBTIFF, Version '):]
- version = version[0:version.find('\n')]
- got_maj, got_min, got_micro = version.split('.')
+ if md["LIBTIFF"].startswith("LIBTIFF, Version "):
+ version = md["LIBTIFF"][len("LIBTIFF, Version ") :]
+ version = version[0 : version.find("\n")]
+ got_maj, got_min, got_micro = version.split(".")
got_maj = int(got_maj)
got_min = int(got_min)
got_micro = int(got_micro)
@@ -80,45 +83,50 @@ def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micr
return got_micro >= expected_micro
return False
+
###############################################################################
# Basic test
def test_cog_basic():
- tab = [ 0 ]
+ tab = [0]
+
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- filename = '/vsimem/cog.tif'
- src_ds = gdal.Open('data/byte.tif')
- assert src_ds.GetMetadataItem('GDAL_STRUCTURAL_METADATA', 'TIFF') is None
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ assert src_ds.GetMetadataItem("GDAL_STRUCTURAL_METADATA", "TIFF") is None
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- callback = my_cbk,
- callback_data = tab)
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, callback=my_cbk, callback_data=tab
+ )
src_ds = None
assert tab[0] == 1.0
assert ds
ds = None
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).Checksum() == 4672
- assert ds.GetMetadataItem('LAYOUT', 'IMAGE_STRUCTURE') == 'COG'
- assert ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == 'LZW'
+ assert ds.GetMetadataItem("LAYOUT", "IMAGE_STRUCTURE") == "COG"
+ assert ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE") == "LZW"
assert ds.GetRasterBand(1).GetOverviewCount() == 0
assert ds.GetRasterBand(1).GetBlockSize() == [512, 512]
- assert ds.GetMetadataItem('GDAL_STRUCTURAL_METADATA', 'TIFF') == """GDAL_STRUCTURAL_METADATA_SIZE=000140 bytes
+ assert (
+ ds.GetMetadataItem("GDAL_STRUCTURAL_METADATA", "TIFF")
+ == """GDAL_STRUCTURAL_METADATA_SIZE=000140 bytes
LAYOUT=IFDS_BEFORE_DATA
BLOCK_ORDER=ROW_MAJOR
BLOCK_LEADER=SIZE_AS_UINT4
BLOCK_TRAILER=LAST_4_BYTES_REPEATED
KNOWN_INCOMPATIBLE_EDITION=NO
"""
+ )
ds = None
_check_cog(filename)
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -127,101 +135,107 @@ def my_cbk(pct, _, arg):
def test_cog_creation_options():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.Open('data/byte.tif')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE',
- 'LEVEL=1',
- 'NUM_THREADS=2'])
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE", "LEVEL=1", "NUM_THREADS=2"]
+ )
assert ds
ds = None
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).Checksum() == 4672
- assert ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == 'DEFLATE'
- assert ds.GetMetadataItem('PREDICTOR', 'IMAGE_STRUCTURE') is None
+ assert ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE") == "DEFLATE"
+ assert ds.GetMetadataItem("PREDICTOR", "IMAGE_STRUCTURE") is None
ds = None
filesize = gdal.VSIStatL(filename).size
_check_cog(filename)
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE',
- 'BIGTIFF=YES',
- 'LEVEL=1'])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE", "BIGTIFF=YES", "LEVEL=1"]
+ )
assert gdal.VSIStatL(filename).size != filesize
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE',
- 'PREDICTOR=YES',
- 'LEVEL=1'])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE", "PREDICTOR=YES", "LEVEL=1"]
+ )
assert gdal.VSIStatL(filename).size != filesize
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('PREDICTOR', 'IMAGE_STRUCTURE') == '2'
+ assert ds.GetMetadataItem("PREDICTOR", "IMAGE_STRUCTURE") == "2"
ds = None
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE',
- 'LEVEL=9'])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE", "LEVEL=9"]
+ )
assert gdal.VSIStatL(filename).size < filesize
- colist = gdal.GetDriverByName('COG').GetMetadataItem('DMD_CREATIONOPTIONLIST')
- if 'ZSTD' in colist:
+ colist = gdal.GetDriverByName("COG").GetMetadataItem("DMD_CREATIONOPTIONLIST")
+ if "ZSTD" in colist:
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=ZSTD'])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=ZSTD"]
+ )
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == 'ZSTD'
+ assert ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE") == "ZSTD"
ds = None
- if 'LZMA' in colist:
+ if "LZMA" in colist:
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LZMA'])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LZMA"]
+ )
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == 'LZMA'
+ assert ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE") == "LZMA"
ds = None
- if 'WEBP' in colist:
+ if "WEBP" in colist:
with gdaltest.error_handler():
- assert not gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=WEBP'])
+ assert not gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=WEBP"]
+ )
- if 'LERC' in colist:
+ if "LERC" in colist:
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC'])
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC"]
+ )
filesize_no_z_error = gdal.VSIStatL(filename).size
assert gdal.VSIStatL(filename).size != filesize
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC', 'MAX_Z_ERROR=10'])
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC", "MAX_Z_ERROR=10"]
+ )
filesize_with_z_error = gdal.VSIStatL(filename).size
assert filesize_with_z_error < filesize_no_z_error
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC_DEFLATE'])
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC_DEFLATE"]
+ )
filesize_lerc_deflate = gdal.VSIStatL(filename).size
assert filesize_lerc_deflate < filesize_no_z_error
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC_DEFLATE', 'LEVEL=1'])
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC_DEFLATE", "LEVEL=1"]
+ )
filesize_lerc_deflate_level_1 = gdal.VSIStatL(filename).size
assert filesize_lerc_deflate_level_1 > filesize_lerc_deflate
- if 'ZSTD' in colist:
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC_ZSTD'])
+ if "ZSTD" in colist:
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC_ZSTD"]
+ )
filesize_lerc_zstd = gdal.VSIStatL(filename).size
assert filesize_lerc_zstd < filesize_no_z_error
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LERC_ZSTD', 'LEVEL=1'])
+ assert gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=LERC_ZSTD", "LEVEL=1"]
+ )
filesize_lerc_zstd_level_1 = gdal.VSIStatL(filename).size
assert filesize_lerc_zstd_level_1 > filesize_lerc_zstd
src_ds = None
with gdaltest.error_handler():
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -230,33 +244,34 @@ def test_cog_creation_options():
def test_cog_creation_of_overviews():
- tab = [ 0 ]
+ tab = [0]
+
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- directory = '/vsimem/test_cog_creation_of_overviews'
- filename = directory + '/cog.tif'
- src_ds = gdal.Translate('', 'data/byte.tif',
- options='-of MEM -outsize 2048 300')
+ directory = "/vsimem/test_cog_creation_of_overviews"
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Translate("", "data/byte.tif", options="-of MEM -outsize 2048 300")
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- check_filename = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').CreateCopy(check_filename, src_ds,
- options = ['TILED=YES'])
- ds.BuildOverviews('CUBIC', [2, 4])
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ check_filename = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ check_filename, src_ds, options=["TILED=YES"]
+ )
+ ds.BuildOverviews("CUBIC", [2, 4])
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
ds = None
gdal.Unlink(check_filename)
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- callback = my_cbk,
- callback_data = tab)
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, callback=my_cbk, callback_data=tab
+ )
assert tab[0] == 1.0
assert ds
- assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
+ assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
ds = None
ds = gdal.Open(filename)
@@ -268,38 +283,42 @@ def my_cbk(pct, _, arg):
_check_cog(filename)
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
+
###############################################################################
# Test creation of overviews with a different compression method
+
def test_cog_creation_of_overviews_with_compression():
- directory = '/vsimem/test_cog_creation_of_overviews_with_compression'
- filename = directory + '/cog.tif'
- src_ds = gdal.Translate('', 'data/byte.tif',
- options='-of MEM -outsize 2048 300')
+ directory = "/vsimem/test_cog_creation_of_overviews_with_compression"
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Translate("", "data/byte.tif", options="-of MEM -outsize 2048 300")
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=LZW', 'OVERVIEW_COMPRESS=JPEG', 'OVERVIEW_QUALITY=50'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["COMPRESS=LZW", "OVERVIEW_COMPRESS=JPEG", "OVERVIEW_QUALITY=50"],
+ )
assert ds.GetRasterBand(1).GetOverviewCount() == 2
- assert ds.GetMetadata('IMAGE_STRUCTURE')['COMPRESSION'] == 'LZW'
+ assert ds.GetMetadata("IMAGE_STRUCTURE")["COMPRESSION"] == "LZW"
- ds_overview_a = gdal.Open('GTIFF_DIR:2:' + filename)
- assert ds_overview_a.GetMetadata('IMAGE_STRUCTURE')['COMPRESSION'] == 'JPEG'
- assert ds_overview_a.GetMetadata('IMAGE_STRUCTURE')['JPEG_QUALITY'] == '50'
+ ds_overview_a = gdal.Open("GTIFF_DIR:2:" + filename)
+ assert ds_overview_a.GetMetadata("IMAGE_STRUCTURE")["COMPRESSION"] == "JPEG"
+ assert ds_overview_a.GetMetadata("IMAGE_STRUCTURE")["JPEG_QUALITY"] == "50"
- ds_overview_b = gdal.Open('GTIFF_DIR:3:' + filename)
- assert ds_overview_b.GetMetadata('IMAGE_STRUCTURE')['COMPRESSION'] == 'JPEG'
- assert ds_overview_a.GetMetadata('IMAGE_STRUCTURE')['JPEG_QUALITY'] == '50'
+ ds_overview_b = gdal.Open("GTIFF_DIR:3:" + filename)
+ assert ds_overview_b.GetMetadata("IMAGE_STRUCTURE")["COMPRESSION"] == "JPEG"
+ assert ds_overview_a.GetMetadata("IMAGE_STRUCTURE")["JPEG_QUALITY"] == "50"
ds_overview_a = None
ds_overview_b = None
ds = None
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
@@ -309,37 +328,39 @@ def test_cog_creation_of_overviews_with_compression():
def test_cog_creation_of_overviews_with_mask():
- tab = [ 0 ]
+ tab = [0]
+
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- directory = '/vsimem/test_cog_creation_of_overviews_with_mask'
+ directory = "/vsimem/test_cog_creation_of_overviews_with_mask"
gdal.Mkdir(directory, 0o755)
- filename = directory + '/cog.tif'
- src_ds = gdal.Translate('', 'data/byte.tif',
- options='-of MEM -outsize 2048 300')
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Translate("", "data/byte.tif", options="-of MEM -outsize 2048 300")
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1024, 300, b'\xFF',
- buf_xsize = 1, buf_ysize = 1)
-
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- check_filename = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').CreateCopy(check_filename, src_ds,
- options = ['TILED=YES'])
- ds.BuildOverviews('CUBIC', [2, 4])
+ src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(
+ 0, 0, 1024, 300, b"\xFF", buf_xsize=1, buf_ysize=1
+ )
+
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ check_filename = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ check_filename, src_ds, options=["TILED=YES"]
+ )
+ ds.BuildOverviews("CUBIC", [2, 4])
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
ds = None
gdal.Unlink(check_filename)
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- callback = my_cbk,
- callback_data = tab)
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, callback=my_cbk, callback_data=tab
+ )
assert tab[0] == 1.0
assert ds
- assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
+ assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
ds = None
ds = gdal.Open(filename)
@@ -352,34 +373,37 @@ def my_cbk(pct, _, arg):
_check_cog(filename)
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
-
###############################################################################
# Test full world reprojection to WebMercator
def test_cog_small_world_to_web_mercator():
- tab = [ 0 ]
+ tab = [0]
+
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- directory = '/vsimem/test_cog_small_world_to_web_mercator'
+ directory = "/vsimem/test_cog_small_world_to_web_mercator"
gdal.Mkdir(directory, 0o755)
- filename = directory + '/cog.tif'
- src_ds = gdal.Open('../gdrivers/data/small_world.tif')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'COMPRESS=JPEG'],
- callback = my_cbk,
- callback_data = tab)
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Open("../gdrivers/data/small_world.tif")
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "COMPRESS=JPEG"],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
- assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
+ assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
ds = None
ds = gdal.Open(filename)
@@ -389,51 +413,61 @@ def my_cbk(pct, _, arg):
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
assert ds.GetRasterBand(1).GetBlockSize() == [256, 256]
gt = ds.GetGeoTransform()
- assert gt[1] == -gt[5] # yes, checking for strict equality
- expected_gt = [-20037508.342789248, 156543.033928041, 0.0,
- 20037508.342789248, 0.0, -156543.033928041]
+ assert gt[1] == -gt[5] # yes, checking for strict equality
+ expected_gt = [
+ -20037508.342789248,
+ 156543.033928041,
+ 0.0,
+ 20037508.342789248,
+ 0.0,
+ -156543.033928041,
+ ]
for i in range(6):
if gt[i] != pytest.approx(expected_gt[i], abs=1e-10 * abs(expected_gt[i])):
assert False, gt
- got_cs = [ds.GetRasterBand(i+1).Checksum() for i in range(3)]
- assert got_cs in ([26293, 23439, 14955],
- [26228, 22085, 12992],
- [25088, 23140, 13265], # libjpeg 9e
- )
+ got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(3)]
+ assert got_cs in (
+ [26293, 23439, 14955],
+ [26228, 22085, 12992],
+ [25088, 23140, 13265], # libjpeg 9e
+ )
assert ds.GetRasterBand(1).GetMaskBand().Checksum() == 17849
assert ds.GetRasterBand(1).GetOverviewCount() == 0
ds = None
_check_cog(filename)
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
-
###############################################################################
# Test reprojection of small extent to WebMercator
def test_cog_byte_to_web_mercator():
- tab = [ 0 ]
+ tab = [0]
+
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- directory = '/vsimem/test_cog_byte_to_web_mercator'
+ directory = "/vsimem/test_cog_byte_to_web_mercator"
gdal.Mkdir(directory, 0o755)
- filename = directory + '/cog.tif'
- src_ds = gdal.Open('data/byte.tif')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'ALIGNED_LEVELS=3'],
- callback = my_cbk,
- callback_data = tab)
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "ALIGNED_LEVELS=3"],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
- assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
+ assert len(gdal.ReadDir(directory)) == 1 # check that the temp file has gone away
ds = None
ds = gdal.Open(filename)
@@ -441,19 +475,26 @@ def my_cbk(pct, _, arg):
assert ds.RasterXSize == 1024
assert ds.RasterYSize == 1024
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET
- assert ds.GetRasterBand(1).GetBlockSize() == [256,256]
+ assert ds.GetRasterBand(1).GetBlockSize() == [256, 256]
gt = ds.GetGeoTransform()
- assert gt[1] == -gt[5] # yes, checking for strict equality
- expected_gt = [-13149614.849955443, 76.43702828517598, 0.0,
- 4070118.8821290657, 0.0, -76.43702828517598]
+ assert gt[1] == -gt[5] # yes, checking for strict equality
+ expected_gt = [
+ -13149614.849955443,
+ 76.43702828517598,
+ 0.0,
+ 4070118.8821290657,
+ 0.0,
+ -76.43702828517598,
+ ]
for i in range(6):
if gt[i] != pytest.approx(expected_gt[i], abs=1e-10 * abs(expected_gt[i])):
assert False, gt
- assert ds.GetRasterBand(1).Checksum() in (4363,
- 4264, # got on Mac at some point
- 4362, # libjpeg 9d
- 4569, # libjpeg 9e
- )
+ assert ds.GetRasterBand(1).Checksum() in (
+ 4363,
+ 4264, # got on Mac at some point
+ 4362, # libjpeg 9d
+ 4569, # libjpeg 9e
+ )
assert ds.GetRasterBand(1).GetMaskBand().Checksum() == 4356
assert ds.GetRasterBand(1).GetOverviewCount() == 2
ds = None
@@ -461,7 +502,7 @@ def my_cbk(pct, _, arg):
# Use our generated COG as the input of the same COG generation: reprojection
# should be skipped
- filename2 = directory + '/cog2.tif'
+ filename2 = directory + "/cog2.tif"
src_ds = gdal.Open(filename)
class my_error_handler(object):
@@ -475,50 +516,59 @@ def handler(self, eErrClass, err_no, msg):
else:
self.other_msg_list.append(msg)
- handler = my_error_handler();
+ handler = my_error_handler()
try:
gdal.PushErrorHandler(handler.handler)
gdal.SetCurrentErrorHandlerCatchDebug(True)
- with gdaltest.config_option('CPL_DEBUG', 'COG'):
- ds = gdal.GetDriverByName('COG').CreateCopy(filename2, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'ALIGNED_LEVELS=3'])
+ with gdaltest.config_option("CPL_DEBUG", "COG"):
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename2,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "ALIGNED_LEVELS=3"],
+ )
finally:
gdal.PopErrorHandler()
assert ds
- assert 'COG: Skipping reprojection step: source dataset matches reprojection specifications' in handler.debug_msg_list
+ assert (
+ "COG: Skipping reprojection step: source dataset matches reprojection specifications"
+ in handler.debug_msg_list
+ )
assert handler.other_msg_list == []
src_ds = None
ds = None
# Cleanup
- gdal.GetDriverByName('GTiff').Delete(filename)
- gdal.GetDriverByName('GTiff').Delete(filename2)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename2)
gdal.Unlink(directory)
-
-
###############################################################################
# Same as previous test case but with other input options
def test_cog_byte_to_web_mercator_manual():
- directory = '/vsimem/test_cog_byte_to_web_mercator_manual'
+ directory = "/vsimem/test_cog_byte_to_web_mercator_manual"
gdal.Mkdir(directory, 0o755)
- filename = directory + '/cog.tif'
- src_ds = gdal.Open('data/byte.tif')
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Open("data/byte.tif")
res = 76.43702828517598
minx = -13149614.849955443
maxx = minx + 1024 * res
maxy = 4070118.8821290657
miny = maxy - 1024 * res
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['BLOCKSIZE=256',
- 'TARGET_SRS=EPSG:3857',
- 'RES=%.18g' % res,
- 'EXTENT=%.18g,%.18g,%.18g,%.18g' % (minx,miny,maxx,maxy)])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "BLOCKSIZE=256",
+ "TARGET_SRS=EPSG:3857",
+ "RES=%.18g" % res,
+ "EXTENT=%.18g,%.18g,%.18g,%.18g" % (minx, miny, maxx, maxy),
+ ],
+ )
assert ds
ds = None
@@ -527,51 +577,58 @@ def test_cog_byte_to_web_mercator_manual():
assert ds.RasterXSize == 1024
assert ds.RasterYSize == 1024
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET
- assert ds.GetRasterBand(1).GetBlockSize() == [256,256]
+ assert ds.GetRasterBand(1).GetBlockSize() == [256, 256]
gt = ds.GetGeoTransform()
- expected_gt = [-13149614.849955443, 76.43702828517598, 0.0,
- 4070118.8821290657, 0.0, -76.43702828517598]
+ expected_gt = [
+ -13149614.849955443,
+ 76.43702828517598,
+ 0.0,
+ 4070118.8821290657,
+ 0.0,
+ -76.43702828517598,
+ ]
for i in range(6):
if gt[i] != pytest.approx(expected_gt[i], abs=1e-10 * abs(expected_gt[i])):
assert False, gt
- assert ds.GetRasterBand(1).Checksum() in (4363,
- 4264, # got on Mac at some point
- 4362, # libjpeg 9d
- 4569, # libjpeg 9e
- )
+ assert ds.GetRasterBand(1).Checksum() in (
+ 4363,
+ 4264, # got on Mac at some point
+ 4362, # libjpeg 9d
+ 4569, # libjpeg 9e
+ )
assert ds.GetRasterBand(1).GetMaskBand().Checksum() == 4356
assert ds.GetRasterBand(1).GetOverviewCount() == 2
ds = None
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
-
###############################################################################
# Test OVERVIEWS creation option
def test_cog_overviews_co():
-
def my_cbk(pct, _, arg):
assert pct >= tab[0]
tab[0] = pct
return 1
- directory = '/vsimem/test_cog_overviews_co'
- filename = directory + '/cog.tif'
- src_ds = gdal.Translate('', 'data/byte.tif',
- options='-of MEM -outsize 2048 300')
+ directory = "/vsimem/test_cog_overviews_co"
+ filename = directory + "/cog.tif"
+ src_ds = gdal.Translate("", "data/byte.tif", options="-of MEM -outsize 2048 300")
- for val in ['NONE', 'FORCE_USE_EXISTING']:
+ for val in ["NONE", "FORCE_USE_EXISTING"]:
- tab = [ 0 ]
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['OVERVIEWS=' + val],
- callback = my_cbk,
- callback_data = tab)
+ tab = [0]
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["OVERVIEWS=" + val],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
@@ -582,13 +639,16 @@ def my_cbk(pct, _, arg):
ds = None
_check_cog(filename)
- for val in ['AUTO', 'IGNORE_EXISTING']:
+ for val in ["AUTO", "IGNORE_EXISTING"]:
- tab = [ 0 ]
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['OVERVIEWS=' + val],
- callback = my_cbk,
- callback_data = tab)
+ tab = [0]
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["OVERVIEWS=" + val],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
@@ -600,15 +660,13 @@ def my_cbk(pct, _, arg):
ds = None
_check_cog(filename)
-
# Add overviews to source
- src_ds.BuildOverviews('NONE', [2])
+ src_ds.BuildOverviews("NONE", [2])
- tab = [ 0 ]
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['OVERVIEWS=NONE'],
- callback = my_cbk,
- callback_data = tab)
+ tab = [0]
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["OVERVIEWS=NONE"], callback=my_cbk, callback_data=tab
+ )
assert tab[0] == 1.0
assert ds
@@ -619,11 +677,14 @@ def my_cbk(pct, _, arg):
ds = None
_check_cog(filename)
- tab = [ 0 ]
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['OVERVIEWS=FORCE_USE_EXISTING'],
- callback = my_cbk,
- callback_data = tab)
+ tab = [0]
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["OVERVIEWS=FORCE_USE_EXISTING"],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
@@ -635,11 +696,14 @@ def my_cbk(pct, _, arg):
ds = None
_check_cog(filename)
- tab = [ 0 ]
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['OVERVIEWS=IGNORE_EXISTING'],
- callback = my_cbk,
- callback_data = tab)
+ tab = [0]
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["OVERVIEWS=IGNORE_EXISTING"],
+ callback=my_cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
assert ds
@@ -651,26 +715,27 @@ def my_cbk(pct, _, arg):
ds = None
_check_cog(filename)
-
src_ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
gdal.Unlink(directory)
+
###############################################################################
# Test editing and invalidating a COG file
def test_cog_invalidation_by_data_change():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 100, 100)
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE'])
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 100, 100)
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE"]
+ )
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
- assert ds.GetMetadataItem('LAYOUT', 'IMAGE_STRUCTURE') == 'COG'
- src_ds = gdal.Open('data/byte.tif')
+ assert ds.GetMetadataItem("LAYOUT", "IMAGE_STRUCTURE") == "COG"
+ src_ds = gdal.Open("data/byte.tif")
data = src_ds.ReadRaster()
ds.GetRasterBand(1).WriteRaster(0, 0, 20, 20, data)
with gdaltest.error_handler():
@@ -679,14 +744,17 @@ def test_cog_invalidation_by_data_change():
with gdaltest.error_handler():
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('LAYOUT', 'IMAGE_STRUCTURE') is None
+ assert ds.GetMetadataItem("LAYOUT", "IMAGE_STRUCTURE") is None
ds = None
- with pytest.raises(AssertionError, match='KNOWN_INCOMPATIBLE_EDITION=YES is declared in the file'):
+ with pytest.raises(
+ AssertionError, match="KNOWN_INCOMPATIBLE_EDITION=YES is declared in the file"
+ ):
_check_cog(filename)
with gdaltest.error_handler():
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test editing and invalidating a COG file
@@ -694,10 +762,11 @@ def test_cog_invalidation_by_data_change():
def test_cog_invalidation_by_metadata_change():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['COMPRESS=DEFLATE'])
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["COMPRESS=DEFLATE"]
+ )
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
@@ -706,11 +775,11 @@ def test_cog_invalidation_by_metadata_change():
with gdaltest.error_handler():
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('LAYOUT', 'IMAGE_STRUCTURE') is None
+ assert ds.GetMetadataItem("LAYOUT", "IMAGE_STRUCTURE") is None
ds = None
with gdaltest.error_handler():
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -720,7 +789,7 @@ def test_cog_invalidation_by_metadata_change():
def test_cog_northing_easting_and_non_power_of_two_ratios():
- filename = '/vsimem/cog.tif'
+ filename = "/vsimem/cog.tif"
x0_NZTM2000 = -1000000
y0_NZTM2000 = 10000000
@@ -729,18 +798,28 @@ def test_cog_northing_easting_and_non_power_of_two_ratios():
scale_denom_zoom_level_13 = 2500
scale_denom_zoom_level_12 = 5000
- ds = gdal.Translate(filename, 'data/byte.tif',
- options='-of COG -a_srs EPSG:2193 -a_ullr 1000001 5000001 1000006.6 4999995.4 -co TILING_SCHEME=NZTM2000 -co ALIGNED_LEVELS=2')
+ ds = gdal.Translate(
+ filename,
+ "data/byte.tif",
+ options="-of COG -a_srs EPSG:2193 -a_ullr 1000001 5000001 1000006.6 4999995.4 -co TILING_SCHEME=NZTM2000 -co ALIGNED_LEVELS=2",
+ )
assert ds.RasterXSize == 1280
assert ds.RasterYSize == 1280
b = ds.GetRasterBand(1)
- assert [(b.GetOverview(i).XSize, b.GetOverview(i).YSize) for i in range(b.GetOverviewCount())] == [(512, 512), (256, 256)]
+ assert [
+ (b.GetOverview(i).XSize, b.GetOverview(i).YSize)
+ for i in range(b.GetOverviewCount())
+ ] == [(512, 512), (256, 256)]
gt = ds.GetGeoTransform()
- assert gt[1] == -gt[5] # yes, checking for strict equality
+ assert gt[1] == -gt[5] # yes, checking for strict equality
- res_zoom_level_14 = scale_denom_zoom_level_14 * 0.28e-3 # According to OGC Tile Matrix Set formula
- assert gt == pytest.approx((999872, res_zoom_level_14, 0, 5000320, 0, -res_zoom_level_14), abs=1e-8)
+ res_zoom_level_14 = (
+ scale_denom_zoom_level_14 * 0.28e-3
+ ) # According to OGC Tile Matrix Set formula
+ assert gt == pytest.approx(
+ (999872, res_zoom_level_14, 0, 5000320, 0, -res_zoom_level_14), abs=1e-8
+ )
# Check that gt origin matches the corner of a tile at zoom 14
res = gt[1]
@@ -751,7 +830,10 @@ def test_cog_northing_easting_and_non_power_of_two_ratios():
# Check that overview=0 corresponds to the resolution of zoom level=13 / OGC ScaleDenom = 2500
ovr0_xsize = b.GetOverview(0).XSize
- assert float(ovr0_xsize) / ds.RasterXSize == float(scale_denom_zoom_level_14) / scale_denom_zoom_level_13
+ assert (
+ float(ovr0_xsize) / ds.RasterXSize
+ == float(scale_denom_zoom_level_14) / scale_denom_zoom_level_13
+ )
# Check that gt origin matches the corner of a tile at zoom 13
ovr0_res = res * scale_denom_zoom_level_13 / scale_denom_zoom_level_14
tile_x = (gt[0] - x0_NZTM2000) / (blocksize * ovr0_res)
@@ -761,7 +843,10 @@ def test_cog_northing_easting_and_non_power_of_two_ratios():
# Check that overview=1 corresponds to the resolution of zoom level=12 / OGC ScaleDenom = 5000
ovr1_xsize = b.GetOverview(1).XSize
- assert float(ovr1_xsize) / ds.RasterXSize == float(scale_denom_zoom_level_14) / scale_denom_zoom_level_12
+ assert (
+ float(ovr1_xsize) / ds.RasterXSize
+ == float(scale_denom_zoom_level_14) / scale_denom_zoom_level_12
+ )
# Check that gt origin matches the corner of a tile at zoom 12
ovr1_res = res * scale_denom_zoom_level_12 / scale_denom_zoom_level_14
tile_x = (gt[0] - x0_NZTM2000) / (blocksize * ovr1_res)
@@ -772,11 +857,11 @@ def test_cog_northing_easting_and_non_power_of_two_ratios():
assert ds.GetMetadata("TILING_SCHEME") == {
"NAME": "NZTM2000",
"ZOOM_LEVEL": "14",
- "ALIGNED_LEVELS": "2"
+ "ALIGNED_LEVELS": "2",
}
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -785,30 +870,50 @@ def test_cog_northing_easting_and_non_power_of_two_ratios():
def test_cog_sparse():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512)
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512)
src_ds.GetRasterBand(1).Fill(255)
- src_ds.WriteRaster(0, 0, 256, 256, '\x00' * 256 * 256)
- src_ds.WriteRaster(256, 256, 128, 128, '\x00' * 128 * 128)
- src_ds.BuildOverviews('NEAREST', [2])
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['BLOCKSIZE=128', 'SPARSE_OK=YES', 'COMPRESS=LZW'])
+ src_ds.WriteRaster(0, 0, 256, 256, "\x00" * 256 * 256)
+ src_ds.WriteRaster(256, 256, 128, 128, "\x00" * 128 * 128)
+ src_ds.BuildOverviews("NEAREST", [2])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=128", "SPARSE_OK=YES", "COMPRESS=LZW"]
+ )
_check_cog(filename)
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_2_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF") is None
+ assert (
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_2_0", "TIFF") is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF")
+ is not None
+ )
+ assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(
+ 1
+ ).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
if check_libtiff_internal_or_at_least(4, 0, 11):
# This file is the same as the one generated above, except that we have,
# with an hex editor, zeroify all entries of TileByteCounts except the
# last tile of the main IFD, and for a tile when the next tile is sparse
- ds = gdal.Open('data/cog_sparse_strile_arrays_zeroified_when_possible.tif')
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
+ ds = gdal.Open("data/cog_sparse_strile_arrays_zeroified_when_possible.tif")
+ assert ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 512, 512
+ ) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
ds = None
gdal.Unlink(filename)
@@ -820,33 +925,89 @@ def test_cog_sparse():
def test_cog_sparse_mask():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512, 4)
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512, 4)
for i in range(4):
- src_ds.GetRasterBand(i+1).SetColorInterpretation(gdal.GCI_RedBand + i)
- src_ds.GetRasterBand(i+1).Fill(255)
- src_ds.GetRasterBand(i+1).WriteRaster(0, 0, 256, 256, '\x00' * 256 * 256)
- src_ds.GetRasterBand(i+1).WriteRaster(256, 256, 128, 128, '\x00' * 128 * 128)
- src_ds.BuildOverviews('NEAREST', [2])
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['BLOCKSIZE=128', 'SPARSE_OK=YES', 'COMPRESS=JPEG', 'RESAMPLING=NEAREST'])
- assert gdal.GetLastErrorMsg() == ''
+ src_ds.GetRasterBand(i + 1).SetColorInterpretation(gdal.GCI_RedBand + i)
+ src_ds.GetRasterBand(i + 1).Fill(255)
+ src_ds.GetRasterBand(i + 1).WriteRaster(0, 0, 256, 256, "\x00" * 256 * 256)
+ src_ds.GetRasterBand(i + 1).WriteRaster(256, 256, 128, 128, "\x00" * 128 * 128)
+ src_ds.BuildOverviews("NEAREST", [2])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "BLOCKSIZE=128",
+ "SPARSE_OK=YES",
+ "COMPRESS=JPEG",
+ "RESAMPLING=NEAREST",
+ ],
+ )
+ assert gdal.GetLastErrorMsg() == ""
_check_cog(filename)
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_2_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_2_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_1_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF") is None
+ assert (
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_2_0", "TIFF") is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_2_0", "TIFF")
+ is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF")
+ is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_1_0", "TIFF")
+ is not None
+ )
+ assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(
+ 1
+ ).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(
+ 0, 0, 512, 512
+ ) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
ds = None
gdal.Unlink(filename)
@@ -858,24 +1019,50 @@ def test_cog_sparse_mask():
def test_cog_sparse_imagery_0_mask_255():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512, 4)
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512, 4)
for i in range(4):
- src_ds.GetRasterBand(i+1).SetColorInterpretation(gdal.GCI_RedBand + i)
- src_ds.GetRasterBand(i+1).Fill(0 if i < 3 else 255)
- src_ds.BuildOverviews('NEAREST', [2])
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['BLOCKSIZE=128', 'SPARSE_OK=YES', 'COMPRESS=JPEG'])
+ src_ds.GetRasterBand(i + 1).SetColorInterpretation(gdal.GCI_RedBand + i)
+ src_ds.GetRasterBand(i + 1).Fill(0 if i < 3 else 255)
+ src_ds.BuildOverviews("NEAREST", [2])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=128", "SPARSE_OK=YES", "COMPRESS=JPEG"]
+ )
_check_cog(filename)
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
+ assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(
+ 1
+ ).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(
+ 0, 0, 512, 512
+ ) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
ds = None
gdal.Unlink(filename)
@@ -887,29 +1074,64 @@ def test_cog_sparse_imagery_0_mask_255():
def test_cog_sparse_imagery_0_or_255_mask_255():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512, 4)
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512, 4)
for i in range(4):
- src_ds.GetRasterBand(i+1).SetColorInterpretation(gdal.GCI_RedBand + i)
+ src_ds.GetRasterBand(i + 1).SetColorInterpretation(gdal.GCI_RedBand + i)
for i in range(3):
- src_ds.GetRasterBand(i+1).Fill(255)
- src_ds.GetRasterBand(i+1).WriteRaster(0, 0, 256, 256, '\x00' * 256 * 256)
- src_ds.GetRasterBand(i+1).WriteRaster(256, 256, 128, 128, '\x00' * 128 * 128)
+ src_ds.GetRasterBand(i + 1).Fill(255)
+ src_ds.GetRasterBand(i + 1).WriteRaster(0, 0, 256, 256, "\x00" * 256 * 256)
+ src_ds.GetRasterBand(i + 1).WriteRaster(256, 256, 128, 128, "\x00" * 128 * 128)
src_ds.GetRasterBand(4).Fill(255)
- src_ds.BuildOverviews('NEAREST', [2])
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['BLOCKSIZE=128', 'SPARSE_OK=YES', 'COMPRESS=JPEG', 'RESAMPLING=NEAREST'])
+ src_ds.BuildOverviews("NEAREST", [2])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "BLOCKSIZE=128",
+ "SPARSE_OK=YES",
+ "COMPRESS=JPEG",
+ "RESAMPLING=NEAREST",
+ ],
+ )
_check_cog(filename)
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_2_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is not None
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert (
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_2_0", "TIFF") is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
+ assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(
+ 1
+ ).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(
+ 0, 0, 512, 512
+ ) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
ds = None
gdal.Unlink(filename)
@@ -921,55 +1143,124 @@ def test_cog_sparse_imagery_0_or_255_mask_255():
def test_cog_sparse_imagery_mask_0():
- filename = '/vsimem/cog.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512, 4)
+ filename = "/vsimem/cog.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512, 4)
for i in range(4):
- src_ds.GetRasterBand(i+1).SetColorInterpretation(gdal.GCI_RedBand + i)
- src_ds.GetRasterBand(i+1).Fill(0)
- src_ds.BuildOverviews('NEAREST', [2])
- gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['BLOCKSIZE=128', 'SPARSE_OK=YES', 'COMPRESS=JPEG'])
+ src_ds.GetRasterBand(i + 1).SetColorInterpretation(gdal.GCI_RedBand + i)
+ src_ds.GetRasterBand(i + 1).Fill(0)
+ src_ds.BuildOverviews("NEAREST", [2])
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=128", "SPARSE_OK=YES", "COMPRESS=JPEG"]
+ )
_check_cog(filename)
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
- assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
- assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(0, 0, 256, 256) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is None
+ )
+ assert ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512) == src_ds.GetRasterBand(
+ 1
+ ).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetMaskBand().ReadRaster(
+ 0, 0, 512, 512
+ ) == src_ds.GetRasterBand(4).ReadRaster(0, 0, 512, 512)
+ assert ds.GetRasterBand(1).GetOverview(0).ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 256, 256)
+ assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().ReadRaster(
+ 0, 0, 256, 256
+ ) == src_ds.GetRasterBand(4).GetOverview(0).ReadRaster(0, 0, 256, 256)
ds = None
gdal.Unlink(filename)
-
###############################################################################
# Test ZOOM_LEVEL_STRATEGY option
-@pytest.mark.parametrize('zoom_level_strategy,expected_gt',
- [('AUTO', (-13110479.09147343, 76.43702828517416, 0.0, 4030983.1236470547, 0.0, -76.43702828517416)),
- ('LOWER', (-13110479.09147343, 76.43702828517416, 0.0, 4030983.1236470547, 0.0, -76.43702828517416)),
- ('UPPER', (-13100695.151852928, 38.21851414258708, 0.0, 4021199.1840265524, 0.0, -38.21851414258708))
- ])
-def test_cog_zoom_level_strategy(zoom_level_strategy,expected_gt):
-
- filename = '/vsimem/test_cog_zoom_level_strategy.tif'
- src_ds = gdal.Open('data/byte.tif')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible',
- 'ZOOM_LEVEL_STRATEGY=' + zoom_level_strategy])
+
+@pytest.mark.parametrize(
+ "zoom_level_strategy,expected_gt",
+ [
+ (
+ "AUTO",
+ (
+ -13110479.09147343,
+ 76.43702828517416,
+ 0.0,
+ 4030983.1236470547,
+ 0.0,
+ -76.43702828517416,
+ ),
+ ),
+ (
+ "LOWER",
+ (
+ -13110479.09147343,
+ 76.43702828517416,
+ 0.0,
+ 4030983.1236470547,
+ 0.0,
+ -76.43702828517416,
+ ),
+ ),
+ (
+ "UPPER",
+ (
+ -13100695.151852928,
+ 38.21851414258708,
+ 0.0,
+ 4021199.1840265524,
+ 0.0,
+ -38.21851414258708,
+ ),
+ ),
+ ],
+)
+def test_cog_zoom_level_strategy(zoom_level_strategy, expected_gt):
+
+ filename = "/vsimem/test_cog_zoom_level_strategy.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "TILING_SCHEME=GoogleMapsCompatible",
+ "ZOOM_LEVEL_STRATEGY=" + zoom_level_strategy,
+ ],
+ )
gt = ds.GetGeoTransform()
assert gt == pytest.approx(expected_gt, rel=1e-10)
# Test that the zoom level strategy applied on input data already on a
# zoom level doesn't lead to selecting another zoom level
- filename2 = '/vsimem/test_cog_zoom_level_strategy_2.tif'
- src_ds = gdal.Open('data/byte.tif')
- ds2 = gdal.GetDriverByName('COG').CreateCopy(filename2, ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible',
- 'ZOOM_LEVEL_STRATEGY=' + zoom_level_strategy])
+ filename2 = "/vsimem/test_cog_zoom_level_strategy_2.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ ds2 = gdal.GetDriverByName("COG").CreateCopy(
+ filename2,
+ ds,
+ options=[
+ "TILING_SCHEME=GoogleMapsCompatible",
+ "ZOOM_LEVEL_STRATEGY=" + zoom_level_strategy,
+ ],
+ )
gt = ds2.GetGeoTransform()
assert gt == pytest.approx(expected_gt, rel=1e-10)
ds2 = None
@@ -979,28 +1270,47 @@ def test_cog_zoom_level_strategy(zoom_level_strategy,expected_gt):
gdal.Unlink(filename)
-
###############################################################################
# Test ZOOM_LEVEL option
+
def test_cog_zoom_level():
- filename = '/vsimem/test_cog_zoom_level.tif'
- src_ds = gdal.Open('data/byte.tif')
+ filename = "/vsimem/test_cog_zoom_level.tif"
+ src_ds = gdal.Open("data/byte.tif")
with gdaltest.error_handler():
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible',
- 'ZOOM_LEVEL=-1']) is None
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible',
- 'ZOOM_LEVEL=25']) is None
-
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible',
- 'ZOOM_LEVEL=12'])
+ assert (
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "ZOOM_LEVEL=-1"],
+ )
+ is None
+ )
+ assert (
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "ZOOM_LEVEL=25"],
+ )
+ is None
+ )
+
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "ZOOM_LEVEL=12"],
+ )
gt = ds.GetGeoTransform()
- expected_gt = (-13100695.151852928, 38.21851414258813, 0.0, 4021199.1840265524, 0.0, -38.21851414258813)
+ expected_gt = (
+ -13100695.151852928,
+ 38.21851414258813,
+ 0.0,
+ 4021199.1840265524,
+ 0.0,
+ -38.21851414258813,
+ )
assert gt == pytest.approx(expected_gt, rel=1e-10)
ds = None
gdal.Unlink(filename)
@@ -1008,37 +1318,56 @@ def test_cog_zoom_level():
###############################################################################
+
def test_cog_resampling_options():
- filename = '/vsimem/test_cog_resampling_options.tif'
- src_ds = gdal.Open('data/byte.tif')
+ filename = "/vsimem/test_cog_resampling_options.tif"
+ src_ds = gdal.Open("data/byte.tif")
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'WARP_RESAMPLING=NEAREST'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "WARP_RESAMPLING=NEAREST"],
+ )
cs1 = ds.GetRasterBand(1).Checksum()
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'WARP_RESAMPLING=CUBIC'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "WARP_RESAMPLING=CUBIC"],
+ )
cs2 = ds.GetRasterBand(1).Checksum()
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'RESAMPLING=NEAREST', 'WARP_RESAMPLING=CUBIC'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "TILING_SCHEME=GoogleMapsCompatible",
+ "RESAMPLING=NEAREST",
+ "WARP_RESAMPLING=CUBIC",
+ ],
+ )
cs3 = ds.GetRasterBand(1).Checksum()
assert cs1 != cs2
assert cs2 == cs3
- src_ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -outsize 129 0')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['BLOCKSIZE=128', 'OVERVIEW_RESAMPLING=NEAREST'])
+ src_ds = gdal.Translate("", "data/byte.tif", options="-of MEM -outsize 129 0")
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=128", "OVERVIEW_RESAMPLING=NEAREST"]
+ )
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['BLOCKSIZE=128','OVERVIEW_RESAMPLING=BILINEAR'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=128", "OVERVIEW_RESAMPLING=BILINEAR"]
+ )
cs2 = ds.GetRasterBand(1).GetOverview(0).Checksum()
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['BLOCKSIZE=128','RESAMPLING=NEAREST', 'OVERVIEW_RESAMPLING=BILINEAR'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["BLOCKSIZE=128", "RESAMPLING=NEAREST", "OVERVIEW_RESAMPLING=BILINEAR"],
+ )
cs3 = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs1 != cs2
@@ -1050,30 +1379,52 @@ def test_cog_resampling_options():
###############################################################################
+
def test_cog_invalid_warp_resampling():
- filename = '/vsimem/test_cog_invalid_warp_resampling.tif'
- src_ds = gdal.Open('data/byte.tif')
+ filename = "/vsimem/test_cog_invalid_warp_resampling.tif"
+ src_ds = gdal.Open("data/byte.tif")
with gdaltest.error_handler():
- assert gdal.GetDriverByName('COG').CreateCopy(filename, src_ds,
- options = ['TILING_SCHEME=GoogleMapsCompatible', 'RESAMPLING=INVALID']) is None
+ assert (
+ gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=["TILING_SCHEME=GoogleMapsCompatible", "RESAMPLING=INVALID"],
+ )
+ is None
+ )
gdal.Unlink(filename)
###############################################################################
+
def test_cog_overview_size():
- src_ds = gdal.GetDriverByName('MEM').Create('', 20480 // 4, 40960 // 4)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 20480 // 4, 40960 // 4)
src_ds.SetGeoTransform([1723840, 7 * 4, 0, 5555840, 0, -7 * 4])
srs = osr.SpatialReference()
srs.ImportFromEPSG(2193)
src_ds.SetProjection(srs.ExportToWkt())
- filename = '/vsimem/test_cog_overview_size.tif'
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options = ['TILING_SCHEME=NZTM2000', 'ALIGNED_LEVELS=4', 'OVERVIEW_RESAMPLING=NONE'])
+ filename = "/vsimem/test_cog_overview_size.tif"
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "TILING_SCHEME=NZTM2000",
+ "ALIGNED_LEVELS=4",
+ "OVERVIEW_RESAMPLING=NONE",
+ ],
+ )
assert (ds.RasterXSize, ds.RasterYSize) == (20480 // 4, 40960 // 4)
- ovr_size = [ (ds.GetRasterBand(1).GetOverview(i).XSize, ds.GetRasterBand(1).GetOverview(i).YSize) for i in range(ds.GetRasterBand(1).GetOverviewCount()) ]
+ ovr_size = [
+ (
+ ds.GetRasterBand(1).GetOverview(i).XSize,
+ ds.GetRasterBand(1).GetOverview(i).YSize,
+ )
+ for i in range(ds.GetRasterBand(1).GetOverviewCount())
+ ]
assert ovr_size == [(2048, 4096), (1024, 2048), (512, 1024), (256, 512), (128, 256)]
gdal.Unlink(filename)
@@ -1084,40 +1435,45 @@ def test_cog_overview_size():
def test_cog_float32_color_table():
- src_ds = gdal.GetDriverByName('MEM').Create('', 1024, 1024, 1, gdal.GDT_Float32)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1024, 1024, 1, gdal.GDT_Float32)
src_ds.GetRasterBand(1).Fill(1.0)
ct = gdal.ColorTable()
src_ds.GetRasterBand(1).SetColorTable(ct)
- filename = '/vsimem/test_cog_float32_color_table.tif'
+ filename = "/vsimem/test_cog_float32_color_table.tif"
# Silence warning about color table not being copied
with gdaltest.error_handler():
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds) # segfault
+ ds = gdal.GetDriverByName("COG").CreateCopy(filename, src_ds) # segfault
assert ds
assert ds.GetRasterBand(1).GetColorTable() is None
- assert struct.unpack('f', ds.ReadRaster(0,0,1,1))[0] == 1.0
- assert struct.unpack('f', ds.GetRasterBand(1).GetOverview(0).ReadRaster(0,0,1,1))[0] == 1.0
+ assert struct.unpack("f", ds.ReadRaster(0, 0, 1, 1))[0] == 1.0
+ assert (
+ struct.unpack("f", ds.GetRasterBand(1).GetOverview(0).ReadRaster(0, 0, 1, 1))[0]
+ == 1.0
+ )
gdal.Unlink(filename)
+
###############################################################################
# Test copy XMP
def test_cog_copy_xmp():
- filename = '/vsimem/cog_xmp.tif'
- src_ds = gdal.Open('../gdrivers/data/gtiff/byte_with_xmp.tif')
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds)
+ filename = "/vsimem/cog_xmp.tif"
+ src_ds = gdal.Open("../gdrivers/data/gtiff/byte_with_xmp.tif")
+ ds = gdal.GetDriverByName("COG").CreateCopy(filename, src_ds)
assert ds
ds = None
ds = gdal.Open(filename)
- xmp = ds.GetMetadata('xml:XMP')
+ xmp = ds.GetMetadata("xml:XMP")
ds = None
- assert 'W5M0MpCehiHzreSzNTczkc9d' in xmp[0], 'Wrong input file without XMP'
+ assert "W5M0MpCehiHzreSzNTczkc9d" in xmp[0], "Wrong input file without XMP"
_check_cog(filename)
gdal.Unlink(filename)
+
###############################################################################
# Test creating COG from a source dataset that has overview with 'odd' sizes
# and a mask without overview
@@ -1125,11 +1481,13 @@ def test_cog_copy_xmp():
def test_cog_odd_overview_size_and_msk():
- filename = '/vsimem/test_cog_odd_overview_size_and_msk.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 511, 511)
- src_ds.BuildOverviews('NEAR', [2])
+ filename = "/vsimem/test_cog_odd_overview_size_and_msk.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 511, 511)
+ src_ds.BuildOverviews("NEAR", [2])
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- ds = gdal.GetDriverByName('COG').CreateCopy(filename, src_ds, options=['BLOCKSIZE=256'])
+ ds = gdal.GetDriverByName("COG").CreateCopy(
+ filename, src_ds, options=["BLOCKSIZE=256"]
+ )
assert ds
assert ds.GetRasterBand(1).GetOverview(0).XSize == 256
assert ds.GetRasterBand(1).GetMaskBand().GetOverview(0).XSize == 256
diff --git a/autotest/gcore/colortable.py b/autotest/gcore/colortable.py
index b16ece1f2e94..a6e1b2b6825f 100755
--- a/autotest/gcore/colortable.py
+++ b/autotest/gcore/colortable.py
@@ -31,11 +31,11 @@
###############################################################################
-
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
###############################################################################
# Create a color table.
@@ -48,7 +48,7 @@ def test_colortable_1():
for i in range(len(gdaltest.test_ct_data)):
gdaltest.test_ct.SetColorEntry(i, gdaltest.test_ct_data[i])
-
+
###############################################################################
# verify contents.
@@ -65,9 +65,9 @@ def test_colortable_2():
else:
o_v = o_data[j]
- assert g_data[j] == o_v, 'color table mismatch'
+ assert g_data[j] == o_v, "color table mismatch"
+
-
###############################################################################
# Test CreateColorRamp()
@@ -86,12 +86,10 @@ def test_colortable_3():
assert ct.GetColorEntry(255) == (0, 0, 255, 255)
+
###############################################################################
# Cleanup.
def test_colortable_cleanup():
gdaltest.test_ct = None
-
-
-
diff --git a/autotest/gcore/envi_read.py b/autotest/gcore/envi_read.py
index ed3d4f621bc8..11302597fcf4 100755
--- a/autotest/gcore/envi_read.py
+++ b/autotest/gcore/envi_read.py
@@ -28,10 +28,10 @@
###############################################################################
+import gdaltest
import pytest
from osgeo import gdal
-import gdaltest
###############################################################################
# Test GDAL_READDIR_LIMIT_ON_OPEN
@@ -39,41 +39,39 @@
def test_envi_1():
- gdal.SetConfigOption('GDAL_READDIR_LIMIT_ON_OPEN', '1')
+ gdal.SetConfigOption("GDAL_READDIR_LIMIT_ON_OPEN", "1")
- ds = gdal.Open('data/utmsmall.raw')
+ ds = gdal.Open("data/utmsmall.raw")
filelist = ds.GetFileList()
- gdal.SetConfigOption('GDAL_READDIR_LIMIT_ON_OPEN', None)
+ gdal.SetConfigOption("GDAL_READDIR_LIMIT_ON_OPEN", None)
+
+ assert len(filelist) == 2, "did not get expected file list."
- assert len(filelist) == 2, 'did not get expected file list.'
###############################################################################
# When imported build a list of units based on the files available.
init_list = [
- ('byte.raw', 4672),
- ('int16.raw', 4672),
- ('uint16.raw', 4672),
- ('int32.raw', 4672),
- ('uint32.raw', 4672),
- ('float32.raw', 4672),
- ('float64.raw', 4672),
+ ("byte.raw", 4672),
+ ("int16.raw", 4672),
+ ("uint16.raw", 4672),
+ ("int32.raw", 4672),
+ ("uint32.raw", 4672),
+ ("float32.raw", 4672),
+ ("float64.raw", 4672),
# ('cfloat32.raw', 5028),
# ('cfloat64.raw', 5028),
]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('ENVI')
+@pytest.mark.require_driver("ENVI")
def test_envi_open(filename, checksum):
- ut = gdaltest.GDALTest('ENVI', filename, 1, checksum)
+ ut = gdaltest.GDALTest("ENVI", filename, 1, checksum)
ut.testOpen()
-
-
-
diff --git a/autotest/gcore/gcps2geotransform.py b/autotest/gcore/gcps2geotransform.py
index 33c5f63c9607..d3b51b086918 100755
--- a/autotest/gcore/gcps2geotransform.py
+++ b/autotest/gcore/gcps2geotransform.py
@@ -29,11 +29,10 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-from osgeo import gdal
-
-
import gdaltest
+from osgeo import gdal
+
###############################################################################
# Helper to make gcps
@@ -53,15 +52,22 @@ def _list2gcps(src_list):
###############################################################################
# Test simple exact case of turning GCPs into a GeoTransform.
+
def test_gcps2gt_1():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.0, 0.0, 400000, 370000),
- (100.0, 0.0, 410000, 370000),
- (100.0, 200.0, 410000, 368000)
- ]))
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.0, 0.0, 400000, 370000),
+ (100.0, 0.0, 410000, 370000),
+ (100.0, 200.0, 410000, 368000),
+ ]
+ )
+ )
assert gdaltest.geotransform_equals(
- gt, (400000.0, 100.0, 0.0, 370000.0, 0.0, -10.0), 0.000001)
+ gt, (400000.0, 100.0, 0.0, 370000.0, 0.0, -10.0), 0.000001
+ )
+
###############################################################################
# Similar but non-exact.
@@ -69,14 +75,20 @@ def test_gcps2gt_1():
def test_gcps2gt_2():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.0, 0.0, 400000, 370000),
- (100.0, 0.0, 410000, 370000),
- (100.0, 200.0, 410000, 368000),
- (0.0, 200.0, 400000, 368000.01)
- ]))
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.0, 0.0, 400000, 370000),
+ (100.0, 0.0, 410000, 370000),
+ (100.0, 200.0, 410000, 368000),
+ (0.0, 200.0, 400000, 368000.01),
+ ]
+ )
+ )
assert gdaltest.geotransform_equals(
- gt, (400000.0, 100.0, 0.0, 370000.0025, -5e-05, -9.999975), 0.000001)
+ gt, (400000.0, 100.0, 0.0, 370000.0025, -5e-05, -9.999975), 0.000001
+ )
+
###############################################################################
# bApproxOK false, and no good solution.
@@ -85,13 +97,19 @@ def test_gcps2gt_2():
def test_gcps2gt_3():
approx_ok = 0
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.0, 0.0, 400000, 370000),
- (100.0, 0.0, 410000, 370000),
- (100.0, 200.0, 410000, 368000),
- (0.0, 200.0, 400000, 360000)
- ]), approx_ok)
- assert gt is None, 'Expected failure when no good solution.'
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.0, 0.0, 400000, 370000),
+ (100.0, 0.0, 410000, 370000),
+ (100.0, 200.0, 410000, 368000),
+ (0.0, 200.0, 400000, 360000),
+ ]
+ ),
+ approx_ok,
+ )
+ assert gt is None, "Expected failure when no good solution."
+
###############################################################################
# Single point - Should return None.
@@ -99,10 +117,15 @@ def test_gcps2gt_3():
def test_gcps2gt_4():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.0, 0.0, 400000, 370000),
- ]))
- assert gt is None, 'Expected failure for single GCP.'
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.0, 0.0, 400000, 370000),
+ ]
+ )
+ )
+ assert gt is None, "Expected failure for single GCP."
+
###############################################################################
# Two points - simple offset and scale, no rotation.
@@ -110,12 +133,18 @@ def test_gcps2gt_4():
def test_gcps2gt_5():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.0, 0.0, 400000, 370000),
- (100.0, 200.0, 410000, 368000),
- ]))
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.0, 0.0, 400000, 370000),
+ (100.0, 200.0, 410000, 368000),
+ ]
+ )
+ )
assert gdaltest.geotransform_equals(
- gt, (400000.0, 100.0, 0.0, 370000.0, 0.0, -10.0), 0.000001)
+ gt, (400000.0, 100.0, 0.0, 370000.0, 0.0, -10.0), 0.000001
+ )
+
###############################################################################
# Special case for four points in a particular order. Exact result.
@@ -123,14 +152,18 @@ def test_gcps2gt_5():
def test_gcps2gt_6():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (400000, 370000, 400000, 370000),
- (410000, 370000, 410000, 370000),
- (410000, 368000, 410000, 368000),
- (400000, 368000, 400000, 368000),
- ]))
- assert gdaltest.geotransform_equals(
- gt, (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), 0.000001)
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (400000, 370000, 400000, 370000),
+ (410000, 370000, 410000, 370000),
+ (410000, 368000, 410000, 368000),
+ (400000, 368000, 400000, 368000),
+ ]
+ )
+ )
+ assert gdaltest.geotransform_equals(gt, (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), 0.000001)
+
###############################################################################
# Try a case that is hard to do without normalization.
@@ -138,14 +171,18 @@ def test_gcps2gt_6():
def test_gcps2gt_7():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (400000, 370000, 400000, 370000),
- (410000, 368000, 410000, 368000),
- (410000, 370000, 410000, 370000),
- (400000, 368000, 400000, 368000),
- ]))
- assert gdaltest.geotransform_equals(
- gt, (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), 0.000001)
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (400000, 370000, 400000, 370000),
+ (410000, 368000, 410000, 368000),
+ (410000, 370000, 410000, 370000),
+ (400000, 368000, 400000, 368000),
+ ]
+ )
+ )
+ assert gdaltest.geotransform_equals(gt, (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), 0.000001)
+
###############################################################################
# A fairly messy real world case without a easy to predict result.
@@ -153,17 +190,24 @@ def test_gcps2gt_7():
def test_gcps2gt_8():
- gt = gdal.GCPsToGeoTransform(_list2gcps([
- (0.01, 0.04, -87.05528672907, 39.22759504228),
- (0.01, 2688.02, -86.97079900719, 39.27075713986),
- (4031.99, 2688.04, -87.05960736744, 39.37569137000),
- (1988.16, 1540.80, -87.055069186699924, 39.304963106777514),
- (1477.41, 2400.83, -87.013419295885001, 39.304705030894979),
- (1466.02, 2376.92, -87.013906298363295, 39.304056190007913),
- ]))
- gt_expected = (-87.056612873288, -2.232795668658e-05, 3.178617809303e-05,
- 39.227856615716, 2.6091510188921e-05, 1.596921026218e-05)
+ gt = gdal.GCPsToGeoTransform(
+ _list2gcps(
+ [
+ (0.01, 0.04, -87.05528672907, 39.22759504228),
+ (0.01, 2688.02, -86.97079900719, 39.27075713986),
+ (4031.99, 2688.04, -87.05960736744, 39.37569137000),
+ (1988.16, 1540.80, -87.055069186699924, 39.304963106777514),
+ (1477.41, 2400.83, -87.013419295885001, 39.304705030894979),
+ (1466.02, 2376.92, -87.013906298363295, 39.304056190007913),
+ ]
+ )
+ )
+ gt_expected = (
+ -87.056612873288,
+ -2.232795668658e-05,
+ 3.178617809303e-05,
+ 39.227856615716,
+ 2.6091510188921e-05,
+ 1.596921026218e-05,
+ )
assert gdaltest.geotransform_equals(gt, gt_expected, 0.00001)
-
-
-
diff --git a/autotest/gcore/gdal_stats.py b/autotest/gcore/gdal_stats.py
index 0f5067aa222e..f0b1677f6952 100755
--- a/autotest/gcore/gdal_stats.py
+++ b/autotest/gcore/gdal_stats.py
@@ -28,35 +28,36 @@
###############################################################################
import os
-import struct
import shutil
-
+import struct
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
###############################################################################
# Test handling NaN with GDT_Float32 data
def test_stats_nan_1():
- gdaltest.gtiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.gtiff_drv = gdal.GetDriverByName("GTiff")
if gdaltest.gtiff_drv is None:
pytest.skip()
stats = (50.0, 58.0, 54.0, 2.5819888974716)
- shutil.copyfile('data/nan32.tif', 'tmp/nan32.tif')
+ shutil.copyfile("data/nan32.tif", "tmp/nan32.tif")
- t = gdaltest.GDALTest('GTiff', 'tmp/nan32.tif', 1, 874, filename_absolute=1)
+ t = gdaltest.GDALTest("GTiff", "tmp/nan32.tif", 1, 874, filename_absolute=1)
ret = t.testOpen(check_approx_stat=stats, check_stat=stats)
- gdal.GetDriverByName('GTiff').Delete('tmp/nan32.tif')
+ gdal.GetDriverByName("GTiff").Delete("tmp/nan32.tif")
return ret
+
###############################################################################
# Test handling NaN with GDT_Float64 data
@@ -68,15 +69,16 @@ def test_stats_nan_2():
stats = (50.0, 58.0, 54.0, 2.5819888974716)
- shutil.copyfile('data/nan64.tif', 'tmp/nan64.tif')
+ shutil.copyfile("data/nan64.tif", "tmp/nan64.tif")
- t = gdaltest.GDALTest('GTiff', 'tmp/nan64.tif', 1, 4414, filename_absolute=1)
+ t = gdaltest.GDALTest("GTiff", "tmp/nan64.tif", 1, 4414, filename_absolute=1)
ret = t.testOpen(check_approx_stat=stats, check_stat=stats)
- gdal.GetDriverByName('GTiff').Delete('tmp/nan64.tif')
+ gdal.GetDriverByName("GTiff").Delete("tmp/nan64.tif")
return ret
+
###############################################################################
# Test stats on signed byte (#3151)
@@ -88,12 +90,14 @@ def test_stats_signedbyte():
stats = (-128.0, 127.0, -0.2, 80.64)
- shutil.copyfile('data/stats_signed_byte.img', 'tmp/stats_signed_byte.img')
+ shutil.copyfile("data/stats_signed_byte.img", "tmp/stats_signed_byte.img")
- t = gdaltest.GDALTest('HFA', 'tmp/stats_signed_byte.img', 1, 11, filename_absolute=1)
+ t = gdaltest.GDALTest(
+ "HFA", "tmp/stats_signed_byte.img", 1, 11, filename_absolute=1
+ )
ret = t.testOpen(check_approx_stat=stats, check_stat=stats, skip_checksum=1)
- gdal.GetDriverByName('HFA').Delete('tmp/stats_signed_byte.img')
+ gdal.GetDriverByName("HFA").Delete("tmp/stats_signed_byte.img")
return ret
@@ -102,77 +106,86 @@ def test_stats_signedbyte():
# Test return of GetStatistics() when we don't have stats and don't
# force their computation (#3572)
+
def test_stats_dont_force():
- gdal.Unlink('data/byte.tif.aux.xml')
- ds = gdal.Open('data/byte.tif')
+ gdal.Unlink("data/byte.tif.aux.xml")
+ ds = gdal.Open("data/byte.tif")
stats = ds.GetRasterBand(1).GetStatistics(0, 0)
- assert stats == [0, 0, 0, -1], 'did not get expected stats'
+ assert stats == [0, 0, 0, -1], "did not get expected stats"
###############################################################################
# Test statistics when stored nodata value doesn't accurately match the nodata
# value used in the imagery (#3573)
+
def test_stats_approx_nodata():
- shutil.copyfile('data/minfloat.tif', 'tmp/minfloat.tif')
+ shutil.copyfile("data/minfloat.tif", "tmp/minfloat.tif")
try:
- os.remove('tmp/minfloat.tif.aux.xml')
+ os.remove("tmp/minfloat.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('tmp/minfloat.tif')
+ ds = gdal.Open("tmp/minfloat.tif")
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
md = ds.GetRasterBand(1).GetMetadata()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- os.remove('tmp/minfloat.tif.aux.xml')
+ os.remove("tmp/minfloat.tif.aux.xml")
- ds = gdal.Open('tmp/minfloat.tif')
+ ds = gdal.Open("tmp/minfloat.tif")
minmax = ds.GetRasterBand(1).ComputeRasterMinMax()
ds = None
- os.remove('tmp/minfloat.tif')
+ os.remove("tmp/minfloat.tif")
- if nodata != -3.4028234663852886e+38:
+ if nodata != -3.4028234663852886e38:
print("%.18g" % nodata)
- pytest.fail('did not get expected nodata')
+ pytest.fail("did not get expected nodata")
- assert stats == [-3.0, 5.0, 1.0, 4.0], 'did not get expected stats'
+ assert stats == [-3.0, 5.0, 1.0, 4.0], "did not get expected stats"
- assert md == {'STATISTICS_MEAN': '1', 'STATISTICS_MAXIMUM': '5', 'STATISTICS_MINIMUM': '-3', 'STATISTICS_STDDEV': '4', 'STATISTICS_VALID_PERCENT': '50'}, \
- 'did not get expected metadata'
+ assert md == {
+ "STATISTICS_MEAN": "1",
+ "STATISTICS_MAXIMUM": "5",
+ "STATISTICS_MINIMUM": "-3",
+ "STATISTICS_STDDEV": "4",
+ "STATISTICS_VALID_PERCENT": "50",
+ }, "did not get expected metadata"
- assert minmax == (-3.0, 5.0), 'did not get expected minmax'
+ assert minmax == (-3.0, 5.0), "did not get expected minmax"
###############################################################################
# Test read and copy of dataset with nan as nodata value (#3576)
+
def test_stats_nan_3():
- src_ds = gdal.Open('data/nan32_nodata.tif')
+ src_ds = gdal.Open("data/nan32_nodata.tif")
nodata = src_ds.GetRasterBand(1).GetNoDataValue()
- assert gdaltest.isnan(nodata), ('expected nan, got %f' % nodata)
+ assert gdaltest.isnan(nodata), "expected nan, got %f" % nodata
- out_ds = gdaltest.gtiff_drv.CreateCopy('tmp/nan32_nodata.tif', src_ds)
+ out_ds = gdaltest.gtiff_drv.CreateCopy("tmp/nan32_nodata.tif", src_ds)
del out_ds
src_ds = None
try:
- os.remove('tmp/nan32_nodata.tif.aux.xml')
+ os.remove("tmp/nan32_nodata.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('tmp/nan32_nodata.tif')
+ ds = gdal.Open("tmp/nan32_nodata.tif")
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- gdaltest.gtiff_drv.Delete('tmp/nan32_nodata.tif')
- assert gdaltest.isnan(nodata), ('expected nan, got %f' % nodata)
+ gdaltest.gtiff_drv.Delete("tmp/nan32_nodata.tif")
+ assert gdaltest.isnan(nodata), "expected nan, got %f" % nodata
+
###############################################################################
# Test reading a VRT with a complex source that define nan as band nodata
@@ -181,14 +194,15 @@ def test_stats_nan_3():
def test_stats_nan_4():
- ds = gdal.Open('data/nan32_nodata.vrt')
+ ds = gdal.Open("data/nan32_nodata.vrt")
cs = ds.GetRasterBand(1).Checksum()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert cs == 874, 'did not get expected checksum'
+ assert cs == 874, "did not get expected checksum"
+
+ assert gdaltest.isnan(nodata), "expected nan, got %f" % nodata
- assert gdaltest.isnan(nodata), ('expected nan, got %f' % nodata)
###############################################################################
# Test reading a VRT with a complex source that define 0 as band nodata
@@ -197,29 +211,31 @@ def test_stats_nan_4():
def test_stats_nan_5():
- ds = gdal.Open('data/nan32_nodata_nan_to_zero.vrt')
+ ds = gdal.Open("data/nan32_nodata_nan_to_zero.vrt")
cs = ds.GetRasterBand(1).Checksum()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert cs == 978, 'did not get expected checksum'
+ assert cs == 978, "did not get expected checksum"
- assert nodata == 0, ('expected nan, got %f' % nodata)
+ assert nodata == 0, "expected nan, got %f" % nodata
###############################################################################
# Test reading a warped VRT with nan as src nodata and dest nodata (#3576)
+
def test_stats_nan_6():
- ds = gdal.Open('data/nan32_nodata_warp.vrt')
+ ds = gdal.Open("data/nan32_nodata_warp.vrt")
cs = ds.GetRasterBand(1).Checksum()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert cs == 874, 'did not get expected checksum'
+ assert cs == 874, "did not get expected checksum"
+
+ assert gdaltest.isnan(nodata), "expected nan, got %f" % nodata
- assert gdaltest.isnan(nodata), ('expected nan, got %f' % nodata)
###############################################################################
# Test reading a warped VRT with nan as src nodata and 0 as dest nodata (#3576)
@@ -227,29 +243,31 @@ def test_stats_nan_6():
def test_stats_nan_7():
- ds = gdal.Open('data/nan32_nodata_warp_nan_to_zero.vrt')
+ ds = gdal.Open("data/nan32_nodata_warp_nan_to_zero.vrt")
cs = ds.GetRasterBand(1).Checksum()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert cs == 978, 'did not get expected checksum'
+ assert cs == 978, "did not get expected checksum"
- assert nodata == 0, ('expected nan, got %f' % nodata)
+ assert nodata == 0, "expected nan, got %f" % nodata
###############################################################################
# Test reading a warped VRT with zero as src nodata and nan as dest nodata (#3576)
+
def test_stats_nan_8():
- ds = gdal.Open('data/nan32_nodata_warp_zero_to_nan.vrt')
+ ds = gdal.Open("data/nan32_nodata_warp_zero_to_nan.vrt")
cs = ds.GetRasterBand(1).Checksum()
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert cs == 874, 'did not get expected checksum'
+ assert cs == 874, "did not get expected checksum"
+
+ assert gdaltest.isnan(nodata), "expected nan, got %f" % nodata
- assert gdaltest.isnan(nodata), ('expected nan, got %f' % nodata)
###############################################################################
# Test statistics computation when nodata = +/- inf
@@ -262,48 +280,60 @@ def stats_nodata_inf_progress_cbk(value, string, extra):
def test_stats_nodata_inf():
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/stats_nodata_inf.img', 3, 1, 1, gdal.GDT_Float32)
+ ds = gdal.GetDriverByName("HFA").Create(
+ "/vsimem/stats_nodata_inf.img", 3, 1, 1, gdal.GDT_Float32
+ )
ds.GetRasterBand(1).SetNoDataValue(gdaltest.neginf())
- ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack('f', gdaltest.neginf()), buf_type=gdal.GDT_Float32)
- ds.GetRasterBand(1).WriteRaster(1, 0, 1, 1, struct.pack('f', 1), buf_type=gdal.GDT_Float32)
- ds.GetRasterBand(1).WriteRaster(2, 0, 1, 1, struct.pack('f', -2), buf_type=gdal.GDT_Float32)
+ ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 1, 1, struct.pack("f", gdaltest.neginf()), buf_type=gdal.GDT_Float32
+ )
+ ds.GetRasterBand(1).WriteRaster(
+ 1, 0, 1, 1, struct.pack("f", 1), buf_type=gdal.GDT_Float32
+ )
+ ds.GetRasterBand(1).WriteRaster(
+ 2, 0, 1, 1, struct.pack("f", -2), buf_type=gdal.GDT_Float32
+ )
ds.GetRasterBand(1).Checksum()
user_data = [0]
- stats = ds.GetRasterBand(1).ComputeStatistics(False, stats_nodata_inf_progress_cbk, user_data)
- assert user_data[0] == 1.0, 'did not get expected pct'
+ stats = ds.GetRasterBand(1).ComputeStatistics(
+ False, stats_nodata_inf_progress_cbk, user_data
+ )
+ assert user_data[0] == 1.0, "did not get expected pct"
ds = None
- gdal.GetDriverByName('HFA').Delete('/vsimem/stats_nodata_inf.img')
+ gdal.GetDriverByName("HFA").Delete("/vsimem/stats_nodata_inf.img")
- assert stats == [-2.0, 1.0, -0.5, 1.5], 'did not get expected stats'
+ assert stats == [-2.0, 1.0, -0.5, 1.5], "did not get expected stats"
###############################################################################
# Test deserialization of +inf/-inf values written by Linux and Windows
+
def stats_nodata_check(filename, expected_nodata):
ds = gdal.Open(filename)
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- assert nodata == expected_nodata, 'did not get expected nodata value'
+ assert nodata == expected_nodata, "did not get expected nodata value"
def test_stats_nodata_neginf_linux():
- return stats_nodata_check('data/stats_nodata_neginf.tif', gdaltest.neginf())
+ return stats_nodata_check("data/stats_nodata_neginf.tif", gdaltest.neginf())
def test_stats_nodata_neginf_msvc():
- return stats_nodata_check('data/stats_nodata_neginf_msvc.tif', gdaltest.neginf())
+ return stats_nodata_check("data/stats_nodata_neginf_msvc.tif", gdaltest.neginf())
def test_stats_nodata_posinf_linux():
- return stats_nodata_check('data/stats_nodata_posinf.tif', gdaltest.posinf())
+ return stats_nodata_check("data/stats_nodata_posinf.tif", gdaltest.posinf())
def test_stats_nodata_posinf_msvc():
- return stats_nodata_check('data/stats_nodata_posinf_msvc.tif', gdaltest.posinf())
+ return stats_nodata_check("data/stats_nodata_posinf_msvc.tif", gdaltest.posinf())
+
###############################################################################
# Test standard deviation computation on huge values
@@ -311,8 +341,9 @@ def test_stats_nodata_posinf_msvc():
def test_stats_stddev_huge_values():
- gdal.FileFromMemBuffer('/vsimem/stats_stddev_huge_values.asc',
- """ncols 4
+ gdal.FileFromMemBuffer(
+ "/vsimem/stats_stddev_huge_values.asc",
+ """ncols 4
nrows 4
xllcorner 0
yllcorner 0
@@ -320,13 +351,19 @@ def test_stats_stddev_huge_values():
100000000 100000002 100000000 100000002
100000000 100000002 100000000 100000002
100000000 100000002 100000000 100000002
- 100000000 100000002 100000000 100000002""")
- ds = gdal.Open('/vsimem/stats_stddev_huge_values.asc')
+ 100000000 100000002 100000000 100000002""",
+ )
+ ds = gdal.Open("/vsimem/stats_stddev_huge_values.asc")
stats = ds.GetRasterBand(1).ComputeStatistics(0)
- assert stats == [100000000.0, 100000002.0, 100000001.0, 1.0], \
- 'did not get expected stats'
+ assert stats == [
+ 100000000.0,
+ 100000002.0,
+ 100000001.0,
+ 1.0,
+ ], "did not get expected stats"
ds = None
- gdal.GetDriverByName('AAIGRID').Delete('/vsimem/stats_stddev_huge_values.asc')
+ gdal.GetDriverByName("AAIGRID").Delete("/vsimem/stats_stddev_huge_values.asc")
+
###############################################################################
# Test approximate statistics computation on a square shaped raster whose first column
@@ -335,21 +372,28 @@ def test_stats_stddev_huge_values():
def test_stats_square_shape():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/stats_square_shape.tif', 32, 32, options=['TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/stats_square_shape.tif",
+ 32,
+ 32,
+ options=["TILED=YES", "BLOCKXSIZE=16", "BLOCKYSIZE=16"],
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
- ds.GetRasterBand(1).WriteRaster(16, 0, 16, 32, struct.pack('B' * 1, 255), buf_xsize=1, buf_ysize=1)
+ ds.GetRasterBand(1).WriteRaster(
+ 16, 0, 16, 32, struct.pack("B" * 1, 255), buf_xsize=1, buf_ysize=1
+ )
stats = ds.GetRasterBand(1).ComputeStatistics(True)
hist = ds.GetRasterBand(1).GetHistogram(approx_ok=1)
minmax = ds.GetRasterBand(1).ComputeRasterMinMax(1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_square_shape.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_square_shape.tif")
- assert stats == [255, 255, 255, 0], 'did not get expected stats'
- assert hist[255] == 16 * 16, 'did not get expected histogram'
+ assert stats == [255, 255, 255, 0], "did not get expected stats"
+ assert hist[255] == 16 * 16, "did not get expected histogram"
if minmax != (255, 255):
print(hist)
- pytest.fail('did not get expected minmax')
+ pytest.fail("did not get expected minmax")
###############################################################################
@@ -358,34 +402,38 @@ def test_stats_square_shape():
def test_stats_flt_min():
- shutil.copyfile('data/flt_min.tif', 'tmp/flt_min.tif')
+ shutil.copyfile("data/flt_min.tif", "tmp/flt_min.tif")
try:
- os.remove('tmp/flt_min.tif.aux.xml')
+ os.remove("tmp/flt_min.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('tmp/flt_min.tif')
+ ds = gdal.Open("tmp/flt_min.tif")
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- os.remove('tmp/flt_min.tif.aux.xml')
+ os.remove("tmp/flt_min.tif.aux.xml")
- ds = gdal.Open('tmp/flt_min.tif')
+ ds = gdal.Open("tmp/flt_min.tif")
minmax = ds.GetRasterBand(1).ComputeRasterMinMax()
ds = None
- os.remove('tmp/flt_min.tif')
+ os.remove("tmp/flt_min.tif")
if nodata != 1.17549435082228751e-38:
print("%.18g" % nodata)
- pytest.fail('did not get expected nodata')
+ pytest.fail("did not get expected nodata")
+
+ assert stats == [0.0, 1.0, 0.33333333333333337, 0.47140452079103168] or stats == [
+ 0.0,
+ 1.0,
+ 0.33333333333333331,
+ 0.47140452079103168,
+ ], "did not get expected stats"
- assert (stats == [0.0, 1.0, 0.33333333333333337, 0.47140452079103168] or \
- stats == [0.0, 1.0, 0.33333333333333331, 0.47140452079103168]), \
- 'did not get expected stats'
+ assert minmax == (0.0, 1.0), "did not get expected minmax"
- assert minmax == (0.0, 1.0), 'did not get expected minmax'
###############################################################################
# Test when nodata = DBL_MIN (#6578)
@@ -393,34 +441,38 @@ def test_stats_flt_min():
def test_stats_dbl_min():
- shutil.copyfile('data/dbl_min.tif', 'tmp/dbl_min.tif')
+ shutil.copyfile("data/dbl_min.tif", "tmp/dbl_min.tif")
try:
- os.remove('tmp/dbl_min.tif.aux.xml')
+ os.remove("tmp/dbl_min.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('tmp/dbl_min.tif')
+ ds = gdal.Open("tmp/dbl_min.tif")
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
nodata = ds.GetRasterBand(1).GetNoDataValue()
ds = None
- os.remove('tmp/dbl_min.tif.aux.xml')
+ os.remove("tmp/dbl_min.tif.aux.xml")
- ds = gdal.Open('tmp/dbl_min.tif')
+ ds = gdal.Open("tmp/dbl_min.tif")
minmax = ds.GetRasterBand(1).ComputeRasterMinMax()
ds = None
- os.remove('tmp/dbl_min.tif')
+ os.remove("tmp/dbl_min.tif")
if nodata != 2.22507385850720138e-308:
print("%.18g" % nodata)
- pytest.fail('did not get expected nodata')
+ pytest.fail("did not get expected nodata")
- assert (stats == [0.0, 1.0, 0.33333333333333337, 0.47140452079103168] or \
- stats == [0.0, 1.0, 0.33333333333333331, 0.47140452079103168]), \
- 'did not get expected stats'
+ assert stats == [0.0, 1.0, 0.33333333333333337, 0.47140452079103168] or stats == [
+ 0.0,
+ 1.0,
+ 0.33333333333333331,
+ 0.47140452079103168,
+ ], "did not get expected stats"
+
+ assert minmax == (0.0, 1.0), "did not get expected minmax"
- assert minmax == (0.0, 1.0), 'did not get expected minmax'
###############################################################################
# Test stats on a tiled Byte with partial tiles
@@ -428,95 +480,117 @@ def test_stats_dbl_min():
def test_stats_byte_partial_tiles():
- ds = gdal.Translate('/vsimem/stats_byte_tiled.tif', '../gdrivers/data/small_world.tif',
- creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64'])
+ ds = gdal.Translate(
+ "/vsimem/stats_byte_tiled.tif",
+ "../gdrivers/data/small_world.tif",
+ creationOptions=["TILED=YES", "BLOCKXSIZE=64", "BLOCKYSIZE=64"],
+ )
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_tiled.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_byte_tiled.tif")
expected_stats = [0.0, 255.0, 50.22115, 67.119029288849973]
- assert stats == expected_stats, 'did not get expected stats'
+ assert stats == expected_stats, "did not get expected stats"
# Same but with nodata set
- ds = gdal.Translate('/vsimem/stats_byte_tiled.tif', '../gdrivers/data/small_world.tif',
- creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64'])
+ ds = gdal.Translate(
+ "/vsimem/stats_byte_tiled.tif",
+ "../gdrivers/data/small_world.tif",
+ creationOptions=["TILED=YES", "BLOCKXSIZE=64", "BLOCKYSIZE=64"],
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_tiled.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_byte_tiled.tif")
expected_stats = [1.0, 255.0, 50.311081057390084, 67.14541389488096]
- assert stats == pytest.approx(expected_stats, rel=1e-10), \
- 'did not get expected stats'
+ assert stats == pytest.approx(
+ expected_stats, rel=1e-10
+ ), "did not get expected stats"
# Same but with nodata set but untiled and with non power of 16 block size
- ds = gdal.Translate('/vsimem/stats_byte_untiled.tif', '../gdrivers/data/small_world.tif',
- options='-srcwin 0 0 399 200')
+ ds = gdal.Translate(
+ "/vsimem/stats_byte_untiled.tif",
+ "../gdrivers/data/small_world.tif",
+ options="-srcwin 0 0 399 200",
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_byte_untiled.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_byte_untiled.tif")
expected_stats = [1.0, 255.0, 50.378183963744554, 67.184793517649453]
- assert stats == pytest.approx(expected_stats, rel=1e-10), 'did not get expected stats'
-
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/stats_byte_tiled.tif', 1000, 512,
- options=['TILED=YES', 'BLOCKXSIZE=512', 'BLOCKYSIZE=512'])
+ assert stats == pytest.approx(
+ expected_stats, rel=1e-10
+ ), "did not get expected stats"
+
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/stats_byte_tiled.tif",
+ 1000,
+ 512,
+ options=["TILED=YES", "BLOCKXSIZE=512", "BLOCKYSIZE=512"],
+ )
ds.GetRasterBand(1).Fill(255)
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.Unlink('/vsimem/stats_byte_tiled.tif')
+ gdal.Unlink("/vsimem/stats_byte_tiled.tif")
expected_stats = [255.0, 255.0, 255.0, 0.0]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
# Non optimized code path
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
- ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack('B' * 1, 1))
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
+ ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack("B" * 1, 1))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [1.0, 1.0, 1.0, 0.0]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
-
- ds = gdal.GetDriverByName('MEM').Create('', 3, 5)
- ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack('B' * 3, 20, 30, 50))
- ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack('B' * 3, 60, 10, 5))
- ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack('B' * 3, 10, 20, 0))
- ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack('B' * 3, 10, 20, 255))
- ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack('B' * 3, 10, 20, 10))
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
+
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 5)
+ ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack("B" * 3, 20, 30, 50))
+ ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack("B" * 3, 60, 10, 5))
+ ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack("B" * 3, 10, 20, 0))
+ ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack("B" * 3, 10, 20, 255))
+ ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack("B" * 3, 10, 20, 10))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 255.0, 35.333333333333336, 60.785597709398971]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
- ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 32 + 2, 2)
ds.GetRasterBand(1).Fill(1)
- ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack('B' * 2, 0, 255))
+ ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack("B" * 2, 0, 255))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 255.0, 4.7205882352941178, 30.576733555893391]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
- ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 32 + 2, 2)
ds.GetRasterBand(1).Fill(1)
ds.GetRasterBand(1).SetNoDataValue(2)
- ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack('B' * 2, 0, 255))
+ ds.GetRasterBand(1).WriteRaster(32, 1, 2, 1, struct.pack("B" * 2, 0, 255))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 255.0, 4.7205882352941178, 30.576733555893391]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
+
###############################################################################
# Test stats on uint16
@@ -524,98 +598,129 @@ def test_stats_byte_partial_tiles():
def test_stats_uint16():
- ds = gdal.Translate('/vsimem/stats_uint16_tiled.tif', '../gdrivers/data/small_world.tif',
- outputType=gdal.GDT_UInt16,
- scaleParams=[[0, 255, 0, 65535]],
- creationOptions=['TILED=YES', 'BLOCKXSIZE=64', 'BLOCKYSIZE=64'])
+ ds = gdal.Translate(
+ "/vsimem/stats_uint16_tiled.tif",
+ "../gdrivers/data/small_world.tif",
+ outputType=gdal.GDT_UInt16,
+ scaleParams=[[0, 255, 0, 65535]],
+ creationOptions=["TILED=YES", "BLOCKXSIZE=64", "BLOCKYSIZE=64"],
+ )
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_tiled.tif')
-
- expected_stats = [0.0, 65535.0, 50.22115 * 65535 / 255, 67.119029288849973 * 65535 / 255]
- assert stats == expected_stats, 'did not get expected stats'
-
- ds = gdal.Translate('/vsimem/stats_uint16_untiled.tif', '../gdrivers/data/small_world.tif',
- options='-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_uint16_tiled.tif")
+
+ expected_stats = [
+ 0.0,
+ 65535.0,
+ 50.22115 * 65535 / 255,
+ 67.119029288849973 * 65535 / 255,
+ ]
+ assert stats == expected_stats, "did not get expected stats"
+
+ ds = gdal.Translate(
+ "/vsimem/stats_uint16_untiled.tif",
+ "../gdrivers/data/small_world.tif",
+ options="-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16",
+ )
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_untiled.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_uint16_untiled.tif")
expected_stats = [0.0, 65535.0, 12923.9921679198, 17259.703026841547]
- assert stats == expected_stats, 'did not get expected stats'
+ assert stats == expected_stats, "did not get expected stats"
# Same but with nodata set but untiled and with non power of 16 block size
- ds = gdal.Translate('/vsimem/stats_uint16_untiled.tif', '../gdrivers/data/small_world.tif',
- options='-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16')
+ ds = gdal.Translate(
+ "/vsimem/stats_uint16_untiled.tif",
+ "../gdrivers/data/small_world.tif",
+ options="-srcwin 0 0 399 200 -scale 0 255 0 65535 -ot UInt16",
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/stats_uint16_untiled.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/stats_uint16_untiled.tif")
- expected_stats = [257.0, 65535.0, 50.378183963744554 * 65535 / 255, 67.184793517649453 * 65535 / 255]
- assert stats == pytest.approx(expected_stats, rel=1e-10), 'did not get expected stats'
+ expected_stats = [
+ 257.0,
+ 65535.0,
+ 50.378183963744554 * 65535 / 255,
+ 67.184793517649453 * 65535 / 255,
+ ]
+ assert stats == pytest.approx(
+ expected_stats, rel=1e-10
+ ), "did not get expected stats"
for fill_val in [0, 1, 32767, 32768, 65535]:
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/stats_uint16_tiled.tif', 1000, 512, 1, gdal.GDT_UInt16,
- options=['TILED=YES', 'BLOCKXSIZE=512', 'BLOCKYSIZE=512'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/stats_uint16_tiled.tif",
+ 1000,
+ 512,
+ 1,
+ gdal.GDT_UInt16,
+ options=["TILED=YES", "BLOCKXSIZE=512", "BLOCKYSIZE=512"],
+ )
ds.GetRasterBand(1).Fill(fill_val)
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
- gdal.Unlink('/vsimem/stats_uint16_tiled.tif')
+ gdal.Unlink("/vsimem/stats_uint16_tiled.tif")
expected_stats = [fill_val, fill_val, fill_val, 0.0]
if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15:
print(fill_val)
- pytest.fail('did not get expected stats')
+ pytest.fail("did not get expected stats")
# Test remaining pixels after multiple of 32
- ds = gdal.GetDriverByName('MEM').Create('', 32 + 2, 1, 1, gdal.GDT_UInt16)
+ ds = gdal.GetDriverByName("MEM").Create("", 32 + 2, 1, 1, gdal.GDT_UInt16)
ds.GetRasterBand(1).Fill(1)
- ds.GetRasterBand(1).WriteRaster(32, 0, 2, 1, struct.pack('H' * 2, 0, 65535))
+ ds.GetRasterBand(1).WriteRaster(32, 0, 2, 1, struct.pack("H" * 2, 0, 65535))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 65535.0, 1928.4411764705883, 11072.48066469611]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
# Non optimized code path
for fill_val in [0, 1, 32767, 32768, 65535]:
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 1, gdal.GDT_UInt16)
- ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack('H' * 1, fill_val))
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 1, gdal.GDT_UInt16)
+ ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, struct.pack("H" * 1, fill_val))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [fill_val, fill_val, fill_val, 0.0]
if max([abs(stats[i] - expected_stats[i]) for i in range(4)]) > 1e-15:
print(fill_val)
- pytest.fail('did not get expected stats')
-
- ds = gdal.GetDriverByName('MEM').Create('', 3, 5, 1, gdal.GDT_UInt16)
- ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack('H' * 3, 20, 30, 50))
- ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack('H' * 3, 60, 10, 5))
- ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack('H' * 3, 10, 20, 0))
- ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack('H' * 3, 10, 20, 65535))
- ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack('H' * 3, 10, 20, 10))
+ pytest.fail("did not get expected stats")
+
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 5, 1, gdal.GDT_UInt16)
+ ds.GetRasterBand(1).WriteRaster(0, 0, 3, 1, struct.pack("H" * 3, 20, 30, 50))
+ ds.GetRasterBand(1).WriteRaster(0, 1, 3, 1, struct.pack("H" * 3, 60, 10, 5))
+ ds.GetRasterBand(1).WriteRaster(0, 2, 3, 1, struct.pack("H" * 3, 10, 20, 0))
+ ds.GetRasterBand(1).WriteRaster(0, 3, 3, 1, struct.pack("H" * 3, 10, 20, 65535))
+ ds.GetRasterBand(1).WriteRaster(0, 4, 3, 1, struct.pack("H" * 3, 10, 20, 10))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 65535.0, 4387.333333333333, 16342.408927558861]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
- ds = gdal.GetDriverByName('MEM').Create('', 2, 2, 1, gdal.GDT_UInt16)
- ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, struct.pack('H' * 2, 0, 65535))
- ds.GetRasterBand(1).WriteRaster(0, 1, 2, 1, struct.pack('H' * 2, 1, 65534))
+ ds = gdal.GetDriverByName("MEM").Create("", 2, 2, 1, gdal.GDT_UInt16)
+ ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, struct.pack("H" * 2, 0, 65535))
+ ds.GetRasterBand(1).WriteRaster(0, 1, 2, 1, struct.pack("H" * 2, 1, 65534))
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
ds = None
expected_stats = [0.0, 65535.0, 32767.5, 32767.000003814814]
- assert max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15, \
- 'did not get expected stats'
+ assert (
+ max([abs(stats[i] - expected_stats[i]) for i in range(4)]) <= 1e-15
+ ), "did not get expected stats"
+
###############################################################################
# Test a case where the nodata value is almost the maximum value of float32
@@ -623,134 +728,161 @@ def test_stats_uint16():
def test_stats_nodata_almost_max_float32():
- gdal.FileFromMemBuffer('/vsimem/float32_almost_nodata_max_float32.tif',
- open('data/float32_almost_nodata_max_float32.tif', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/float32_almost_nodata_max_float32.tif",
+ open("data/float32_almost_nodata_max_float32.tif", "rb").read(),
+ )
- ds = gdal.Open('/vsimem/float32_almost_nodata_max_float32.tif')
+ ds = gdal.Open("/vsimem/float32_almost_nodata_max_float32.tif")
minmax = ds.GetRasterBand(1).ComputeRasterMinMax()
- assert minmax == (0, 0), 'did not get expected minmax'
+ assert minmax == (0, 0), "did not get expected minmax"
stats = ds.GetRasterBand(1).ComputeStatistics(False)
- assert stats == [0, 0, 0, 0], 'did not get expected stats'
+ assert stats == [0, 0, 0, 0], "did not get expected stats"
hist = ds.GetRasterBand(1).GetHistogram(approx_ok=0)
- assert hist[0] == 3, 'did not get expected hist'
+ assert hist[0] == 3, "did not get expected hist"
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/float32_almost_nodata_max_float32.tif')
+ gdal.GetDriverByName("GTiff").Delete(
+ "/vsimem/float32_almost_nodata_max_float32.tif"
+ )
###############################################################################
# Test STATISTICS_APPROXIMATE
-def test_stats_approx_stats_flag(dt=gdal.GDT_Byte, struct_frmt='B'):
+def test_stats_approx_stats_flag(dt=gdal.GDT_Byte, struct_frmt="B"):
- ds = gdal.GetDriverByName('MEM').Create('', 2000, 2000, 1, dt)
+ ds = gdal.GetDriverByName("MEM").Create("", 2000, 2000, 1, dt)
ds.GetRasterBand(1).WriteRaster(1000, 1000, 1, 1, struct.pack(struct_frmt * 1, 20))
approx_ok = 1
force = 1
stats = ds.GetRasterBand(1).GetStatistics(approx_ok, force)
- assert stats == [0.0, 0.0, 0.0, 0.0], 'did not get expected stats'
+ assert stats == [0.0, 0.0, 0.0, 0.0], "did not get expected stats"
md = ds.GetRasterBand(1).GetMetadata()
- assert md == {'STATISTICS_MEAN': '0', 'STATISTICS_MAXIMUM': '0', 'STATISTICS_MINIMUM': '0', 'STATISTICS_APPROXIMATE': 'YES', 'STATISTICS_STDDEV': '0', 'STATISTICS_VALID_PERCENT': '100'}, \
- 'did not get expected metadata'
+ assert md == {
+ "STATISTICS_MEAN": "0",
+ "STATISTICS_MAXIMUM": "0",
+ "STATISTICS_MINIMUM": "0",
+ "STATISTICS_APPROXIMATE": "YES",
+ "STATISTICS_STDDEV": "0",
+ "STATISTICS_VALID_PERCENT": "100",
+ }, "did not get expected metadata"
approx_ok = 0
force = 0
stats = ds.GetRasterBand(1).GetStatistics(approx_ok, force)
- assert stats == [0.0, 0.0, 0.0, -1.0], 'did not get expected stats'
+ assert stats == [0.0, 0.0, 0.0, -1.0], "did not get expected stats"
approx_ok = 0
force = 1
stats = ds.GetRasterBand(1).GetStatistics(approx_ok, force)
- assert stats[1] == 20.0, 'did not get expected stats'
+ assert stats[1] == 20.0, "did not get expected stats"
md = ds.GetRasterBand(1).GetMetadata()
- assert 'STATISTICS_APPROXIMATE' not in md, 'did not get expected metadata'
+ assert "STATISTICS_APPROXIMATE" not in md, "did not get expected metadata"
def test_stats_approx_stats_flag_float():
- return test_stats_approx_stats_flag(dt=gdal.GDT_Float32, struct_frmt='f')
+ return test_stats_approx_stats_flag(dt=gdal.GDT_Float32, struct_frmt="f")
def test_stats_all_nodata():
- ds = gdal.GetDriverByName('MEM').Create('', 2000, 2000)
+ ds = gdal.GetDriverByName("MEM").Create("", 2000, 2000)
ds.GetRasterBand(1).SetNoDataValue(0)
approx_ok = 1
force = 1
with gdaltest.error_handler():
stats = ds.GetRasterBand(1).GetStatistics(approx_ok, force)
- assert stats == [0.0, 0.0, 0.0, 0.0], 'did not get expected stats'
+ assert stats == [0.0, 0.0, 0.0, 0.0], "did not get expected stats"
- ds = gdal.GetDriverByName('MEM').Create('', 2000, 2000, 1,
- gdal.GDT_Float32)
+ ds = gdal.GetDriverByName("MEM").Create("", 2000, 2000, 1, gdal.GDT_Float32)
ds.GetRasterBand(1).SetNoDataValue(0)
approx_ok = 1
force = 1
with gdaltest.error_handler():
stats = ds.GetRasterBand(1).GetStatistics(approx_ok, force)
- assert stats == [0.0, 0.0, 0.0, 0.0], 'did not get expected stats'
+ assert stats == [0.0, 0.0, 0.0, 0.0], "did not get expected stats"
def test_stats_float32_with_nodata_slightly_above_float_max():
- ds = gdal.Open('data/float32_with_nodata_slightly_above_float_max.tif')
+ ds = gdal.Open("data/float32_with_nodata_slightly_above_float_max.tif")
my_min, my_max = ds.GetRasterBand(1).ComputeRasterMinMax()
- assert (my_min, my_max) == (-1.0989999771118164, 0.703338623046875), \
- 'did not get expected stats'
+ assert (my_min, my_max) == (
+ -1.0989999771118164,
+ 0.703338623046875,
+ ), "did not get expected stats"
def test_stats_clear():
- filename = '/vsimem/out.tif'
- gdal.Translate(filename, 'data/byte.tif')
+ filename = "/vsimem/out.tif"
+ gdal.Translate(filename, "data/byte.tif")
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetStatistics(False, False) == [0,0,0,-1]
- assert ds.GetRasterBand(1).ComputeStatistics(False) != [0,0,0,-1]
+ assert ds.GetRasterBand(1).GetStatistics(False, False) == [0, 0, 0, -1]
+ assert ds.GetRasterBand(1).ComputeStatistics(False) != [0, 0, 0, -1]
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetStatistics(False, False) != [0,0,0,-1]
+ assert ds.GetRasterBand(1).GetStatistics(False, False) != [0, 0, 0, -1]
ds.ClearStatistics()
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetStatistics(False, False) == [0,0,0,-1]
-
- gdal.GetDriverByName('GTiff').Delete(filename)
-
-
-@pytest.mark.parametrize('datatype,minval,maxval',
- [(gdal.GDT_Byte, 1, 254),
- (gdal.GDT_Byte, -127, 127),
- (gdal.GDT_UInt16, 1, 65535),
- (gdal.GDT_Int16, -32767, 32766),
- (gdal.GDT_UInt32, 1, (1 << 32) - 2),
- (gdal.GDT_Int32, -(1 << 31) + 1, (1 << 31) - 2),
- (gdal.GDT_UInt64, 1, (1 << 53) - 2),
- (gdal.GDT_Int64, -(1 << 53) + 2, (1 << 53) - 2),
- (gdal.GDT_Float32, -struct.unpack('f', struct.pack('f', 1e20))[0],
- struct.unpack('f', struct.pack('f', 1e20))[0]),
- (gdal.GDT_Float64, -1e100, 1e100),
- (gdal.GDT_CInt16, -32767, 32766),
- (gdal.GDT_CInt32, -(1 << 31) + 1, (1 << 31) - 2),
- (gdal.GDT_CFloat32, -struct.unpack('f', struct.pack('f', 1e20))[0],
- struct.unpack('f', struct.pack('f', 1e20))[0]),
- (gdal.GDT_CFloat64, -1e100, 1e100),])
-@pytest.mark.parametrize('nodata', [None, 0, 1])
+ assert ds.GetRasterBand(1).GetStatistics(False, False) == [0, 0, 0, -1]
+
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
+
+@pytest.mark.parametrize(
+ "datatype,minval,maxval",
+ [
+ (gdal.GDT_Byte, 1, 254),
+ (gdal.GDT_Byte, -127, 127),
+ (gdal.GDT_UInt16, 1, 65535),
+ (gdal.GDT_Int16, -32767, 32766),
+ (gdal.GDT_UInt32, 1, (1 << 32) - 2),
+ (gdal.GDT_Int32, -(1 << 31) + 1, (1 << 31) - 2),
+ (gdal.GDT_UInt64, 1, (1 << 53) - 2),
+ (gdal.GDT_Int64, -(1 << 53) + 2, (1 << 53) - 2),
+ (
+ gdal.GDT_Float32,
+ -struct.unpack("f", struct.pack("f", 1e20))[0],
+ struct.unpack("f", struct.pack("f", 1e20))[0],
+ ),
+ (gdal.GDT_Float64, -1e100, 1e100),
+ (gdal.GDT_CInt16, -32767, 32766),
+ (gdal.GDT_CInt32, -(1 << 31) + 1, (1 << 31) - 2),
+ (
+ gdal.GDT_CFloat32,
+ -struct.unpack("f", struct.pack("f", 1e20))[0],
+ struct.unpack("f", struct.pack("f", 1e20))[0],
+ ),
+ (gdal.GDT_CFloat64, -1e100, 1e100),
+ ],
+)
+@pytest.mark.parametrize("nodata", [None, 0, 1])
def test_stats_computeminmax(datatype, minval, maxval, nodata):
- ds = gdal.GetDriverByName('MEM').Create('', 64, 1, 1, datatype)
+ ds = gdal.GetDriverByName("MEM").Create("", 64, 1, 1, datatype)
minval_mod = minval
expected_minval = minval
if datatype == gdal.GDT_Byte and minval < 0:
- ds.GetRasterBand(1).SetMetadataItem('PIXELTYPE', 'SIGNEDBYTE', 'IMAGE_STRUCTURE')
+ ds.GetRasterBand(1).SetMetadataItem(
+ "PIXELTYPE", "SIGNEDBYTE", "IMAGE_STRUCTURE"
+ )
minval_mod = 256 + minval
if nodata:
ds.GetRasterBand(1).SetNoDataValue(nodata)
if nodata == 1 and minval == 1:
expected_minval = maxval
- ds.GetRasterBand(1).WriteRaster(0, 0, 64, 1,
- struct.pack('d' * 2, minval_mod, maxval),
- buf_type = gdal.GDT_Float64,
- buf_xsize = 2,
- buf_ysize = 1)
+ ds.GetRasterBand(1).WriteRaster(
+ 0,
+ 0,
+ 64,
+ 1,
+ struct.pack("d" * 2, minval_mod, maxval),
+ buf_type=gdal.GDT_Float64,
+ buf_xsize=2,
+ buf_ysize=1,
+ )
assert ds.GetRasterBand(1).ComputeRasterMinMax(0) == (expected_minval, maxval)
-
diff --git a/autotest/gcore/geoloc.py b/autotest/gcore/geoloc.py
index 9aa9ae8e03fd..08088d87e9ac 100755
--- a/autotest/gcore/geoloc.py
+++ b/autotest/gcore/geoloc.py
@@ -31,18 +31,19 @@
import array
import random
-from osgeo import gdal, osr
import gdaltest
import pytest
+from osgeo import gdal, osr
+
###############################################################################
# Verify warped result.
def test_geoloc_1():
- tst = gdaltest.GDALTest('VRT', 'warpsst.vrt', 1, 63034)
+ tst = gdaltest.GDALTest("VRT", "warpsst.vrt", 1, 63034)
return tst.testOpen(check_filelist=False)
@@ -50,68 +51,90 @@ def test_geoloc_1():
# Test that we take into account the min/max of the geoloc arrays
-@pytest.mark.parametrize("use_temp_datasets", ['YES', 'NO'])
+@pytest.mark.parametrize("use_temp_datasets", ["YES", "NO"])
def test_geoloc_bounds(use_temp_datasets):
- lon_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lon.tif', 360, 1, 1, gdal.GDT_Float32)
- lon_ds.WriteRaster(0, 0, 360, 1, array.array('f', [91 + 0.5 * x for x in range(178)] + [-179.9 + 0.5 * x for x in range(182)]))
+ lon_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lon.tif", 360, 1, 1, gdal.GDT_Float32
+ )
+ lon_ds.WriteRaster(
+ 0,
+ 0,
+ 360,
+ 1,
+ array.array(
+ "f",
+ [91 + 0.5 * x for x in range(178)] + [-179.9 + 0.5 * x for x in range(182)],
+ ),
+ )
lon_ds = None
- lat_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lat.tif', 80, 1, 1, gdal.GDT_Float32)
- lat_ds.WriteRaster(0, 0, 80, 1, array.array('f', [60.4 + 0.5 * x for x in range(60)] + [89 - 0.5 * x for x in range(20)]))
+ lat_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lat.tif", 80, 1, 1, gdal.GDT_Float32
+ )
+ lat_ds.WriteRaster(
+ 0,
+ 0,
+ 80,
+ 1,
+ array.array(
+ "f", [60.4 + 0.5 * x for x in range(60)] + [89 - 0.5 * x for x in range(20)]
+ ),
+ )
lat_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 360, 80)
+ ds = gdal.GetDriverByName("MEM").Create("", 360, 80)
md = {
- 'LINE_OFFSET': '0',
- 'LINE_STEP': '1',
- 'PIXEL_OFFSET': '0',
- 'PIXEL_STEP': '1',
- 'X_DATASET': '/vsimem/lon.tif',
- 'X_BAND' : '1',
- 'Y_DATASET': '/vsimem/lat.tif',
- 'Y_BAND' : '1'
+ "LINE_OFFSET": "0",
+ "LINE_STEP": "1",
+ "PIXEL_OFFSET": "0",
+ "PIXEL_STEP": "1",
+ "X_DATASET": "/vsimem/lon.tif",
+ "X_BAND": "1",
+ "Y_DATASET": "/vsimem/lat.tif",
+ "Y_BAND": "1",
}
- ds.SetMetadata(md, 'GEOLOCATION')
- with gdaltest.config_option('GDAL_GEOLOC_USE_TEMP_DATASETS', use_temp_datasets):
- warped_ds = gdal.Warp('', ds, format='MEM')
+ ds.SetMetadata(md, "GEOLOCATION")
+ with gdaltest.config_option("GDAL_GEOLOC_USE_TEMP_DATASETS", use_temp_datasets):
+ warped_ds = gdal.Warp("", ds, format="MEM")
assert warped_ds
- gdal.Unlink('/vsimem/lon.tif')
- gdal.Unlink('/vsimem/lat.tif')
+ gdal.Unlink("/vsimem/lon.tif")
+ gdal.Unlink("/vsimem/lat.tif")
gt = warped_ds.GetGeoTransform()
assert gt[0] == pytest.approx(-179.9)
assert gt[3] == pytest.approx(60.4 + 0.5 * 59)
+
###############################################################################
# Test that the line filling logic works
-@pytest.mark.parametrize("use_temp_datasets", ['YES', 'NO'])
+@pytest.mark.parametrize("use_temp_datasets", ["YES", "NO"])
def test_geoloc_fill_line(use_temp_datasets):
-
- ds = gdal.GetDriverByName('MEM').Create('', 200, 372)
+ ds = gdal.GetDriverByName("MEM").Create("", 200, 372)
md = {
- 'LINE_OFFSET': '0',
- 'LINE_STEP': '1',
- 'PIXEL_OFFSET': '0',
- 'PIXEL_STEP': '1',
- 'X_DATASET': '../alg/data/geoloc/longitude_including_pole.tif',
- 'X_BAND' : '1',
- 'Y_DATASET': '../alg/data/geoloc/latitude_including_pole.tif',
- 'Y_BAND' : '1',
- 'SRS': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]'
+ "LINE_OFFSET": "0",
+ "LINE_STEP": "1",
+ "PIXEL_OFFSET": "0",
+ "PIXEL_STEP": "1",
+ "X_DATASET": "../alg/data/geoloc/longitude_including_pole.tif",
+ "X_BAND": "1",
+ "Y_DATASET": "../alg/data/geoloc/latitude_including_pole.tif",
+ "Y_BAND": "1",
+ "SRS": 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
}
- ds.SetMetadata(md, 'GEOLOCATION')
+ ds.SetMetadata(md, "GEOLOCATION")
ds.GetRasterBand(1).Fill(1)
- with gdaltest.config_option('GDAL_GEOLOC_USE_TEMP_DATASETS', use_temp_datasets):
- warped_ds = gdal.Warp('', ds, format='MEM')
+ with gdaltest.config_option("GDAL_GEOLOC_USE_TEMP_DATASETS", use_temp_datasets):
+ warped_ds = gdal.Warp("", ds, format="MEM")
assert warped_ds
- assert warped_ds.GetRasterBand(1).Checksum() in (22339,
- 22336) # 22336 with Intel(R) oneAPI DPC++/C++ Compiler 2022.1.0
-
+ assert warped_ds.GetRasterBand(1).Checksum() in (
+ 22339,
+ 22336,
+ ) # 22336 with Intel(R) oneAPI DPC++/C++ Compiler 2022.1.0
###############################################################################
@@ -120,30 +143,36 @@ def test_geoloc_fill_line(use_temp_datasets):
def test_geoloc_warp_to_geoloc():
- lon_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lon.tif', 10, 1, 1, gdal.GDT_Float32)
- lon_ds.WriteRaster(0, 0, 10, 1, array.array('f', [-79.5 + 1 * x for x in range(10)]))
+ lon_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lon.tif", 10, 1, 1, gdal.GDT_Float32
+ )
+ lon_ds.WriteRaster(
+ 0, 0, 10, 1, array.array("f", [-79.5 + 1 * x for x in range(10)])
+ )
lon_ds = None
- lat_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lat.tif', 10, 1, 1, gdal.GDT_Float32)
- lat_ds.WriteRaster(0, 0, 10, 1, array.array('f', [49.5 - 1 * x for x in range(10)]))
+ lat_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lat.tif", 10, 1, 1, gdal.GDT_Float32
+ )
+ lat_ds.WriteRaster(0, 0, 10, 1, array.array("f", [49.5 - 1 * x for x in range(10)]))
lat_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
+ ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
md = {
- 'LINE_OFFSET': '0',
- 'LINE_STEP': '1',
- 'PIXEL_OFFSET': '0',
- 'PIXEL_STEP': '1',
- 'X_DATASET': '/vsimem/lon.tif',
- 'X_BAND' : '1',
- 'Y_DATASET': '/vsimem/lat.tif',
- 'Y_BAND' : '1',
- 'SRS': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
- 'GEOREFERENCING_CONVENTION': 'PIXEL_CENTER'
+ "LINE_OFFSET": "0",
+ "LINE_STEP": "1",
+ "PIXEL_OFFSET": "0",
+ "PIXEL_STEP": "1",
+ "X_DATASET": "/vsimem/lon.tif",
+ "X_BAND": "1",
+ "Y_DATASET": "/vsimem/lat.tif",
+ "Y_BAND": "1",
+ "SRS": 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
+ "GEOREFERENCING_CONVENTION": "PIXEL_CENTER",
}
- ds.SetMetadata(md, 'GEOLOCATION')
+ ds.SetMetadata(md, "GEOLOCATION")
- input_ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
+ input_ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
input_ds.SetGeoTransform([-80, 1, 0, 50, 0, -1])
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
@@ -163,8 +192,17 @@ def test_geoloc_warp_to_geoloc():
assert ds.GetRasterBand(1).ComputeRasterMinMax() == (255, 255), ds.ReadAsArray()
# Try with projected coordinates
- input_ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
- input_ds.SetGeoTransform([-8905559.26346189, (-7792364.35552915 - -8905559.26346189)/10, 0, 6446275.84101716, 0, -(6446275.84101716-4865942.27950318)/10])
+ input_ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
+ input_ds.SetGeoTransform(
+ [
+ -8905559.26346189,
+ (-7792364.35552915 - -8905559.26346189) / 10,
+ 0,
+ 6446275.84101716,
+ 0,
+ -(6446275.84101716 - 4865942.27950318) / 10,
+ ]
+ )
srs = osr.SpatialReference()
srs.ImportFromEPSG(3857)
srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
@@ -182,10 +220,8 @@ def test_geoloc_warp_to_geoloc():
assert ds.GetRasterBand(1).ComputeRasterMinMax() == (255, 255), ds.ReadAsArray()
-
- gdal.Unlink('/vsimem/lon.tif')
- gdal.Unlink('/vsimem/lat.tif')
-
+ gdal.Unlink("/vsimem/lon.tif")
+ gdal.Unlink("/vsimem/lat.tif")
###############################################################################
@@ -194,16 +230,22 @@ def test_geoloc_warp_to_geoloc():
def test_geoloc_error_cases():
- lon_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lon.tif', 10, 1, 1, gdal.GDT_Float32)
- lon_ds.WriteRaster(0, 0, 10, 1, array.array('f', [-179.5 + 1 * x for x in range(10)]))
+ lon_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lon.tif", 10, 1, 1, gdal.GDT_Float32
+ )
+ lon_ds.WriteRaster(
+ 0, 0, 10, 1, array.array("f", [-179.5 + 1 * x for x in range(10)])
+ )
lon_ds = None
- lat_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lat.tif', 10, 1, 1, gdal.GDT_Float32)
- lat_ds.WriteRaster(0, 0, 10, 1, array.array('f', [89.5 - 1 * x for x in range(10)]))
+ lat_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lat.tif", 10, 1, 1, gdal.GDT_Float32
+ )
+ lat_ds.WriteRaster(0, 0, 10, 1, array.array("f", [89.5 - 1 * x for x in range(10)]))
lat_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
- ds.SetMetadata({'invalid': 'content'}, 'GEOLOCATION')
+ ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
+ ds.SetMetadata({"invalid": "content"}, "GEOLOCATION")
with gdaltest.error_handler():
transformer = gdal.Transformer(ds, None, [])
@@ -219,38 +261,42 @@ def test_geoloc_error_cases():
@pytest.mark.parametrize("step", [1, 2])
-@pytest.mark.parametrize("convention", ['TOP_LEFT_CORNER', 'PIXEL_CENTER'])
-@pytest.mark.parametrize("inverse_method", ['BACKMAP', 'QUADTREE'])
+@pytest.mark.parametrize("convention", ["TOP_LEFT_CORNER", "PIXEL_CENTER"])
+@pytest.mark.parametrize("inverse_method", ["BACKMAP", "QUADTREE"])
def test_geoloc_affine_transformation(step, convention, inverse_method):
- shift = 0.5 if convention == 'PIXEL_CENTER' else 0
- lon_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lon.tif', 20 // step, 1, 1, gdal.GDT_Float32)
- vals = array.array('f', [-80 + step * (x + shift) for x in range(20 // step)])
+ shift = 0.5 if convention == "PIXEL_CENTER" else 0
+ lon_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lon.tif", 20 // step, 1, 1, gdal.GDT_Float32
+ )
+ vals = array.array("f", [-80 + step * (x + shift) for x in range(20 // step)])
lon_ds.WriteRaster(0, 0, 20 // step, 1, vals)
lon_ds = None
- lat_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lat.tif', 20 // step, 1, 1, gdal.GDT_Float32)
- vals = array.array('f', [50 - step * (x + shift) for x in range(20 // step)])
+ lat_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lat.tif", 20 // step, 1, 1, gdal.GDT_Float32
+ )
+ vals = array.array("f", [50 - step * (x + shift) for x in range(20 // step)])
lat_ds.WriteRaster(0, 0, 20 // step, 1, vals)
lat_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 20, 20)
+ ds = gdal.GetDriverByName("MEM").Create("", 20, 20)
md = {
- 'LINE_OFFSET': '0',
- 'LINE_STEP': str(step),
- 'PIXEL_OFFSET': '0',
- 'PIXEL_STEP': str(step),
- 'X_DATASET': '/vsimem/lon.tif',
- 'X_BAND' : '1',
- 'Y_DATASET': '/vsimem/lat.tif',
- 'Y_BAND' : '1',
- 'SRS': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
- 'GEOREFERENCING_CONVENTION' : convention
+ "LINE_OFFSET": "0",
+ "LINE_STEP": str(step),
+ "PIXEL_OFFSET": "0",
+ "PIXEL_STEP": str(step),
+ "X_DATASET": "/vsimem/lon.tif",
+ "X_BAND": "1",
+ "Y_DATASET": "/vsimem/lat.tif",
+ "Y_BAND": "1",
+ "SRS": 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
+ "GEOREFERENCING_CONVENTION": convention,
}
- ds.SetMetadata(md, 'GEOLOCATION')
+ ds.SetMetadata(md, "GEOLOCATION")
- with gdaltest.config_option('GDAL_GEOLOC_INVERSE_METHOD', inverse_method):
+ with gdaltest.config_option("GDAL_GEOLOC_INVERSE_METHOD", inverse_method):
tr = gdal.Transformer(ds, None, [])
- def check_point(x,y,X,Y):
+ def check_point(x, y, X, Y):
success, pnt = tr.TransformPoint(False, x, y)
assert success
assert pnt == (X, Y, 0)
@@ -261,15 +307,15 @@ def check_point(x,y,X,Y):
check_point(10, 10, -70.0, 40.0)
check_point(1.23, 2.34, -78.77, 47.66)
- check_point(0, 0, -80.0, 50.0)
- check_point(20, 0, -60.0, 50.0)
- check_point(0, 20, -80.0, 30.0)
+ check_point(0, 0, -80.0, 50.0)
+ check_point(20, 0, -60.0, 50.0)
+ check_point(0, 20, -80.0, 30.0)
check_point(20, 20, -60.0, 30.0)
ds = None
- gdal.Unlink('/vsimem/lon.tif')
- gdal.Unlink('/vsimem/lat.tif')
+ gdal.Unlink("/vsimem/lon.tif")
+ gdal.Unlink("/vsimem/lat.tif")
###############################################################################
@@ -277,39 +323,55 @@ def check_point(x,y,X,Y):
@pytest.mark.parametrize("step", [1, 2])
-@pytest.mark.parametrize("convention", ['TOP_LEFT_CORNER', 'PIXEL_CENTER'])
+@pytest.mark.parametrize("convention", ["TOP_LEFT_CORNER", "PIXEL_CENTER"])
def test_geoloc_affine_transformation_with_noise(step, convention):
r = random.Random(0)
- shift = 0.5 if convention == 'PIXEL_CENTER' else 0
- lon_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lon.tif', 20 // step, 20 // step, 1, gdal.GDT_Float32)
+ shift = 0.5 if convention == "PIXEL_CENTER" else 0
+ lon_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lon.tif", 20 // step, 20 // step, 1, gdal.GDT_Float32
+ )
for y in range(lon_ds.RasterYSize):
- vals = array.array('f', [-80 + step * (x + shift) + r.uniform(-0.25,0.25) for x in range(lon_ds.RasterXSize)])
+ vals = array.array(
+ "f",
+ [
+ -80 + step * (x + shift) + r.uniform(-0.25, 0.25)
+ for x in range(lon_ds.RasterXSize)
+ ],
+ )
lon_ds.WriteRaster(0, y, lon_ds.RasterXSize, 1, vals)
lon_ds = None
- lat_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lat.tif', 20 // step, 20 // step, 1, gdal.GDT_Float32)
+ lat_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lat.tif", 20 // step, 20 // step, 1, gdal.GDT_Float32
+ )
for x in range(lat_ds.RasterXSize):
- vals = array.array('f', [50 - step * (y + shift) + r.uniform(-0.25,0.25) for y in range(lat_ds.RasterYSize)])
+ vals = array.array(
+ "f",
+ [
+ 50 - step * (y + shift) + r.uniform(-0.25, 0.25)
+ for y in range(lat_ds.RasterYSize)
+ ],
+ )
lat_ds.WriteRaster(x, 0, 1, lat_ds.RasterYSize, vals)
lat_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 20, 20)
+ ds = gdal.GetDriverByName("MEM").Create("", 20, 20)
md = {
- 'LINE_OFFSET': '0',
- 'LINE_STEP': str(step),
- 'PIXEL_OFFSET': '0',
- 'PIXEL_STEP': str(step),
- 'X_DATASET': '/vsimem/lon.tif',
- 'X_BAND' : '1',
- 'Y_DATASET': '/vsimem/lat.tif',
- 'Y_BAND' : '1',
- 'SRS': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
- 'GEOREFERENCING_CONVENTION' : convention
+ "LINE_OFFSET": "0",
+ "LINE_STEP": str(step),
+ "PIXEL_OFFSET": "0",
+ "PIXEL_STEP": str(step),
+ "X_DATASET": "/vsimem/lon.tif",
+ "X_BAND": "1",
+ "Y_DATASET": "/vsimem/lat.tif",
+ "Y_BAND": "1",
+ "SRS": 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]',
+ "GEOREFERENCING_CONVENTION": convention,
}
- ds.SetMetadata(md, 'GEOLOCATION')
+ ds.SetMetadata(md, "GEOLOCATION")
tr = gdal.Transformer(ds, None, [])
- def check_point(x,y):
+ def check_point(x, y):
success, pnt = tr.TransformPoint(False, x, y)
assert success
success, pnt = tr.TransformPoint(True, pnt[0], pnt[1])
@@ -325,8 +387,8 @@ def check_point(x,y):
ds = None
- gdal.Unlink('/vsimem/lon.tif')
- gdal.Unlink('/vsimem/lat.tif')
+ gdal.Unlink("/vsimem/lon.tif")
+ gdal.Unlink("/vsimem/lat.tif")
###############################################################################
@@ -336,34 +398,40 @@ def check_point(x,y):
def test_geoloc_GEOLOC_ARRAY_transformer_option():
step = 1
- convention = 'TOP_LEFT_CORNER'
+ convention = "TOP_LEFT_CORNER"
x0 = -80
y0 = 50
- shift = 0.5 if convention == 'PIXEL_CENTER' else 0
- geoloc_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lonlat.tif', 20 // step, 20 // step, 2, gdal.GDT_Float32)
+ shift = 0.5 if convention == "PIXEL_CENTER" else 0
+ geoloc_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lonlat.tif", 20 // step, 20 // step, 2, gdal.GDT_Float32
+ )
lon_band = geoloc_ds.GetRasterBand(1)
lat_band = geoloc_ds.GetRasterBand(2)
for y in range(geoloc_ds.RasterYSize):
- vals = array.array('f', [x0 + step * (x + shift) for x in range(geoloc_ds.RasterXSize)])
+ vals = array.array(
+ "f", [x0 + step * (x + shift) for x in range(geoloc_ds.RasterXSize)]
+ )
lon_band.WriteRaster(0, y, geoloc_ds.RasterXSize, 1, vals)
for x in range(geoloc_ds.RasterXSize):
- vals = array.array('f', [y0 - step * (y + shift) for y in range(geoloc_ds.RasterYSize)])
+ vals = array.array(
+ "f", [y0 - step * (y + shift) for y in range(geoloc_ds.RasterYSize)]
+ )
lat_band.WriteRaster(x, 0, 1, geoloc_ds.RasterYSize, vals)
geoloc_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 20, 20)
+ ds = gdal.GetDriverByName("MEM").Create("", 20, 20)
# Non-existing GEOLOC_ARRAY
with gdaltest.error_handler():
- assert gdal.Transformer(ds, None, ['GEOLOC_ARRAY=/vsimem/invalid.tif' ]) is None
+ assert gdal.Transformer(ds, None, ["GEOLOC_ARRAY=/vsimem/invalid.tif"]) is None
# Existing GEOLOC_ARRAY but single band
with gdaltest.error_handler():
- assert gdal.Transformer(ds, None, ['GEOLOC_ARRAY=data/byte.tif' ]) is None
+ assert gdal.Transformer(ds, None, ["GEOLOC_ARRAY=data/byte.tif"]) is None
# Test SRC_GEOLOC_ARRAY transformer option
- tr = gdal.Transformer(ds, None, ['SRC_GEOLOC_ARRAY=/vsimem/lonlat.tif' ])
+ tr = gdal.Transformer(ds, None, ["SRC_GEOLOC_ARRAY=/vsimem/lonlat.tif"])
assert tr
x = 1
y = 20
@@ -372,44 +440,54 @@ def test_geoloc_GEOLOC_ARRAY_transformer_option():
assert pnt == pytest.approx((x0 + x * step, y0 - y * step, 0))
# Test GEOLOC_ARRAY transformer option
- tr = gdal.Transformer(ds, None, ['GEOLOC_ARRAY=/vsimem/lonlat.tif' ])
+ tr = gdal.Transformer(ds, None, ["GEOLOC_ARRAY=/vsimem/lonlat.tif"])
assert tr
success, pnt = tr.TransformPoint(False, x, y)
assert success
assert pnt == pytest.approx((x0 + x * step, y0 - y * step, 0))
# Test with a GEOLOCATION metadata domain
- geoloc_ds = gdal.Open('/vsimem/lonlat.tif', gdal.GA_Update)
+ geoloc_ds = gdal.Open("/vsimem/lonlat.tif", gdal.GA_Update)
srs = osr.SpatialReference()
srs.ImportFromEPSG(32631)
srs.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
geoloc_ds.SetSpatialRef(srs)
md = {
- 'X_BAND': '2',
- 'Y_BAND': '1',
- 'PIXEL_OFFSET': 15,
- 'PIXEL_STEP': '1',
- 'LINE_OFFSET': 5,
- 'LINE_STEP': '1',
- 'X_DATASET': 'ignored',
- 'Y_DATASET': 'ignored',
+ "X_BAND": "2",
+ "Y_BAND": "1",
+ "PIXEL_OFFSET": 15,
+ "PIXEL_STEP": "1",
+ "LINE_OFFSET": 5,
+ "LINE_STEP": "1",
+ "X_DATASET": "ignored",
+ "Y_DATASET": "ignored",
}
- geoloc_ds.SetMetadata(md, 'GEOLOCATION')
+ geoloc_ds.SetMetadata(md, "GEOLOCATION")
geoloc_ds = None
- tr = gdal.Transformer(ds, None, ['DST_SRS=EPSG:32731', 'GEOLOC_ARRAY=/vsimem/lonlat.tif' ])
+ tr = gdal.Transformer(
+ ds, None, ["DST_SRS=EPSG:32731", "GEOLOC_ARRAY=/vsimem/lonlat.tif"]
+ )
assert tr
success, pnt = tr.TransformPoint(False, x, y)
assert success
# The 10e6 offset is the northing offset between EPSG:32631 and EPSG:32731
- assert pnt == pytest.approx((y0 - y * step + md['LINE_OFFSET'], 10e6 + x0 + x * step - md['PIXEL_OFFSET'], 0))
-
- warped_ds = gdal.Warp('', ds, format='MEM', transformerOptions=['GEOLOC_ARRAY=/vsimem/lonlat.tif'])
- assert warped_ds.GetSpatialRef().GetAuthorityCode(None) == '32631'
+ assert pnt == pytest.approx(
+ (
+ y0 - y * step + md["LINE_OFFSET"],
+ 10e6 + x0 + x * step - md["PIXEL_OFFSET"],
+ 0,
+ )
+ )
+
+ warped_ds = gdal.Warp(
+ "", ds, format="MEM", transformerOptions=["GEOLOC_ARRAY=/vsimem/lonlat.tif"]
+ )
+ assert warped_ds.GetSpatialRef().GetAuthorityCode(None) == "32631"
ds = None
- gdal.Unlink('/vsimem/lonlat.tif')
+ gdal.Unlink("/vsimem/lonlat.tif")
###############################################################################
@@ -418,21 +496,27 @@ def test_geoloc_GEOLOC_ARRAY_transformer_option():
def test_geoloc_DST_GEOLOC_ARRAY_transformer_option():
- geoloc_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/lonlat_DST_GEOLOC_ARRAY.tif', 10, 10, 2, gdal.GDT_Float32)
- geoloc_ds.SetMetadataItem('GEOREFERENCING_CONVENTION', 'PIXEL_CENTER')
+ geoloc_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/lonlat_DST_GEOLOC_ARRAY.tif", 10, 10, 2, gdal.GDT_Float32
+ )
+ geoloc_ds.SetMetadataItem("GEOREFERENCING_CONVENTION", "PIXEL_CENTER")
lon_band = geoloc_ds.GetRasterBand(1)
lat_band = geoloc_ds.GetRasterBand(2)
x0 = -80
y0 = 50
for y in range(geoloc_ds.RasterYSize):
- lon_band.WriteRaster(0, 0, 10, 1, array.array('f', [x0 + 0.5 + 1 * x for x in range(10)]))
+ lon_band.WriteRaster(
+ 0, 0, 10, 1, array.array("f", [x0 + 0.5 + 1 * x for x in range(10)])
+ )
for x in range(geoloc_ds.RasterXSize):
- lat_band.WriteRaster(0, 0, 10, 1, array.array('f', [y0 - 0.5 - 1 * x for x in range(10)]))
+ lat_band.WriteRaster(
+ 0, 0, 10, 1, array.array("f", [y0 - 0.5 - 1 * x for x in range(10)])
+ )
geoloc_ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
+ ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
- input_ds = gdal.GetDriverByName('MEM').Create('', 10, 10)
+ input_ds = gdal.GetDriverByName("MEM").Create("", 10, 10)
input_ds.SetGeoTransform([x0, 1, 0, y0, 0, -1])
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
@@ -441,9 +525,14 @@ def test_geoloc_DST_GEOLOC_ARRAY_transformer_option():
# Non-existing DST_GEOLOC_ARRAY
with gdaltest.error_handler():
- assert gdal.Transformer(input_ds, ds, ['DST_GEOLOC_ARRAY=/vsimem/invalid.tif' ]) is None
+ assert (
+ gdal.Transformer(input_ds, ds, ["DST_GEOLOC_ARRAY=/vsimem/invalid.tif"])
+ is None
+ )
- tr = gdal.Transformer(input_ds, ds, ['DST_GEOLOC_ARRAY=/vsimem/lonlat_DST_GEOLOC_ARRAY.tif' ])
+ tr = gdal.Transformer(
+ input_ds, ds, ["DST_GEOLOC_ARRAY=/vsimem/lonlat_DST_GEOLOC_ARRAY.tif"]
+ )
success, pnt = tr.TransformPoint(0, 0.5, 0.5)
assert success
@@ -451,4 +540,4 @@ def test_geoloc_DST_GEOLOC_ARRAY_transformer_option():
ds = None
- gdal.Unlink('/vsimem/lonlat_DST_GEOLOC_ARRAY.tif')
+ gdal.Unlink("/vsimem/lonlat_DST_GEOLOC_ARRAY.tif")
diff --git a/autotest/gcore/gtiff_write.py b/autotest/gcore/gtiff_write.py
index 92e4a1b07acc..7908c404d8ec 100755
--- a/autotest/gcore/gtiff_write.py
+++ b/autotest/gcore/gtiff_write.py
@@ -25,52 +25,54 @@
# Boston, MA 02111-1307, USA.
###############################################################################
-import pytest
-
import gdaltest
+import pytest
init_list = [
- ('byte.tif', 4672),
- ('int16.tif', 4672),
- ('uint16.tif', 4672),
- ('int32.tif', 4672),
- ('uint32.tif', 4672),
- ('float32.tif', 4672),
- ('float64.tif', 4672),
- ('cint16.tif', 5028),
- ('cint32.tif', 5028),
- ('cfloat32.tif', 5028),
- ('cfloat64.tif', 5028)]
+ ("byte.tif", 4672),
+ ("int16.tif", 4672),
+ ("uint16.tif", 4672),
+ ("int32.tif", 4672),
+ ("uint32.tif", 4672),
+ ("float32.tif", 4672),
+ ("float64.tif", 4672),
+ ("cint16.tif", 5028),
+ ("cint32.tif", 5028),
+ ("cfloat32.tif", 5028),
+ ("cfloat64.tif", 5028),
+]
# Some tests we don't need to do for each type.
@pytest.mark.parametrize(
- 'testfunction', [
- 'testSetGeoTransform',
- 'testSetProjection',
- 'testSetMetadata',
- ]
+ "testfunction",
+ [
+ "testSetGeoTransform",
+ "testSetProjection",
+ "testSetMetadata",
+ ],
)
-@pytest.mark.require_driver('GTiff')
+@pytest.mark.require_driver("GTiff")
def test_gtiff_set(testfunction):
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672)
+ ut = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672)
getattr(ut, testfunction)()
# Others we do for each pixel type.
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- 'testSetNoDataValue',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ "testSetNoDataValue",
+ ],
)
-@pytest.mark.require_driver('GTiff')
+@pytest.mark.require_driver("GTiff")
def test_gtiff_create(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('GTiff', filename, 1, checksum)
+ ut = gdaltest.GDALTest("GTiff", filename, 1, checksum)
getattr(ut, testfunction)()
diff --git a/autotest/gcore/hdf4_read.py b/autotest/gcore/hdf4_read.py
index 0e05c590ac07..c439b899b96c 100755
--- a/autotest/gcore/hdf4_read.py
+++ b/autotest/gcore/hdf4_read.py
@@ -27,40 +27,41 @@
###############################################################################
+import gdaltest
import pytest
-import gdaltest
from osgeo import gdal
-pytestmark = pytest.mark.require_driver('HDF4')
+pytestmark = pytest.mark.require_driver("HDF4")
init_list = [
- ('byte_3.hdf', 4672),
- ('int16_3.hdf', 4672),
- ('uint16_3.hdf', 4672),
- ('int32_3.hdf', 4672),
- ('uint32_3.hdf', 4672),
- ('float32_3.hdf', 4672),
- ('float64_3.hdf', 4672),
- ('utmsmall_3.hdf', 50054),
- ('byte_2.hdf', 4672),
- ('int16_2.hdf', 4672),
- ('uint16_2.hdf', 4672),
- ('int32_2.hdf', 4672),
- ('uint32_2.hdf', 4672),
- ('float32_2.hdf', 4672),
- ('float64_2.hdf', 4672),
- ('utmsmall_2.hdf', 50054)]
+ ("byte_3.hdf", 4672),
+ ("int16_3.hdf", 4672),
+ ("uint16_3.hdf", 4672),
+ ("int32_3.hdf", 4672),
+ ("uint32_3.hdf", 4672),
+ ("float32_3.hdf", 4672),
+ ("float64_3.hdf", 4672),
+ ("utmsmall_3.hdf", 50054),
+ ("byte_2.hdf", 4672),
+ ("int16_2.hdf", 4672),
+ ("uint16_2.hdf", 4672),
+ ("int32_2.hdf", 4672),
+ ("uint32_2.hdf", 4672),
+ ("float32_2.hdf", 4672),
+ ("float64_2.hdf", 4672),
+ ("utmsmall_2.hdf", 50054),
+]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('HDF4Image')
+@pytest.mark.require_driver("HDF4Image")
def test_hdf4_open(filename, checksum):
- ut = gdaltest.GDALTest('HDF4Image', filename, 1, checksum)
+ ut = gdaltest.GDALTest("HDF4Image", filename, 1, checksum)
ut.testOpen()
@@ -71,13 +72,14 @@ def test_hdf4_open(filename, checksum):
def test_hdf4_read_gr():
# Generated by https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/hdf/examples/GR_create_and_write_image.c
- ds = gdal.Open('data/General_RImages.hdf')
+ ds = gdal.Open("data/General_RImages.hdf")
assert ds
assert ds.RasterCount == 2
assert ds.GetRasterBand(1).Checksum() == 361
assert not ds.GetRasterBand(1).GetColorTable()
assert ds.GetRasterBand(2).Checksum() == 400
+
###############################################################################
# Test reading a GR dataset with a palette
@@ -85,29 +87,40 @@ def test_hdf4_read_gr():
def test_hdf4_read_gr_palette():
# Generated by https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/hdf/examples/GR_write_palette.c
- ds = gdal.Open('data/Image_with_Palette.hdf')
+ ds = gdal.Open("data/Image_with_Palette.hdf")
assert ds
assert ds.RasterCount == 1
assert ds.GetRasterBand(1).GetColorTable()
+
###############################################################################
# Test HDF4_SDS with single subdataset
def test_hdf4_read_online_1():
- gdaltest.hdf4_drv = gdal.GetDriverByName('HDF4')
+ gdaltest.hdf4_drv = gdal.GetDriverByName("HDF4")
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/A2004259075000.L2_LAC_SST.hdf', 'A2004259075000.L2_LAC_SST.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/A2004259075000.L2_LAC_SST.hdf",
+ "A2004259075000.L2_LAC_SST.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'tmp/cache/A2004259075000.L2_LAC_SST.hdf', 1, 28189, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "tmp/cache/A2004259075000.L2_LAC_SST.hdf",
+ 1,
+ 28189,
+ filename_absolute=1,
+ )
return tst.testOpen()
+
###############################################################################
# Test HDF4_SDS with GEOLOCATION info
@@ -117,47 +130,71 @@ def test_hdf4_read_online_2():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/A2006005182000.L2_LAC_SST.x.hdf', 'A2006005182000.L2_LAC_SST.x.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/A2006005182000.L2_LAC_SST.x.hdf",
+ "A2006005182000.L2_LAC_SST.x.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'HDF4_SDS:UNKNOWN:"tmp/cache/A2006005182000.L2_LAC_SST.x.hdf":13', 1, 13209, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ 'HDF4_SDS:UNKNOWN:"tmp/cache/A2006005182000.L2_LAC_SST.x.hdf":13',
+ 1,
+ 13209,
+ filename_absolute=1,
+ )
tst.testOpen()
ds = gdal.Open('HDF4_SDS:UNKNOWN:"tmp/cache/A2006005182000.L2_LAC_SST.x.hdf":13')
- md = ds.GetMetadata('GEOLOCATION')
+ md = ds.GetMetadata("GEOLOCATION")
ds = None
- assert md['X_DATASET'] == 'HDF4_SDS:UNKNOWN:"tmp/cache/A2006005182000.L2_LAC_SST.x.hdf":11', \
- 'Did not get expected X_DATASET'
+ assert (
+ md["X_DATASET"]
+ == 'HDF4_SDS:UNKNOWN:"tmp/cache/A2006005182000.L2_LAC_SST.x.hdf":11'
+ ), "Did not get expected X_DATASET"
###############################################################################
# Test HDF4_EOS:EOS_GRID
+
def test_hdf4_read_online_3():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf', 'MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf",
+ "MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'tmp/cache/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf', 1, 34723, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "tmp/cache/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf",
+ 1,
+ 34723,
+ filename_absolute=1,
+ )
tst.testOpen()
- ds = gdal.Open('tmp/cache/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf')
+ ds = gdal.Open("tmp/cache/MO36MW14.chlor_MODIS.ADD2001089.004.2002186190207.hdf")
gt = ds.GetGeoTransform()
expected_gt = [-180.0, 0.3515625, 0.0, 90.0, 0.0, -0.3515625]
for i in range(6):
- assert gt[i] == pytest.approx(expected_gt[i], abs=1e-8), 'did not get expected gt'
+ assert gt[i] == pytest.approx(
+ expected_gt[i], abs=1e-8
+ ), "did not get expected gt"
srs = ds.GetProjectionRef()
- assert srs.find('Clarke') != -1, 'did not get expected projection'
+ assert srs.find("Clarke") != -1, "did not get expected projection"
ds = None
+
###############################################################################
# Test HDF4_SDS:SEAWIFS_L1A
@@ -167,18 +204,28 @@ def test_hdf4_read_online_4():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf', 'S2002196124536.L1A_HDUN.BartonBendish.extract.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf",
+ "S2002196124536.L1A_HDUN.BartonBendish.extract.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'tmp/cache/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf', 1, 33112, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "tmp/cache/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf",
+ 1,
+ 33112,
+ filename_absolute=1,
+ )
tst.testOpen()
- ds = gdal.Open('tmp/cache/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf')
- assert ds.RasterCount == 8, 'did not get expected band number'
+ ds = gdal.Open("tmp/cache/S2002196124536.L1A_HDUN.BartonBendish.extract.hdf")
+ assert ds.RasterCount == 8, "did not get expected band number"
ds = None
+
###############################################################################
# Test fix for #2208
@@ -189,13 +236,23 @@ def test_hdf4_read_online_5():
pytest.skip()
# 13 MB
- if not gdaltest.download_file('ftp://data.nodc.noaa.gov/pub/data.nodc/pathfinder/Version5.0/Monthly/1991/199101.s04m1pfv50-sst-16b.hdf', '199101.s04m1pfv50-sst-16b.hdf'):
+ if not gdaltest.download_file(
+ "ftp://data.nodc.noaa.gov/pub/data.nodc/pathfinder/Version5.0/Monthly/1991/199101.s04m1pfv50-sst-16b.hdf",
+ "199101.s04m1pfv50-sst-16b.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'tmp/cache/199101.s04m1pfv50-sst-16b.hdf', 1, 41173, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "tmp/cache/199101.s04m1pfv50-sst-16b.hdf",
+ 1,
+ 41173,
+ filename_absolute=1,
+ )
tst.testOpen()
+
###############################################################################
# Test fix for #3386 where block size is dataset size
@@ -206,25 +263,37 @@ def test_hdf4_read_online_6():
pytest.skip()
# 1 MB
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf', 'MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf",
+ "MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf",
+ ):
pytest.skip()
# Test with quoting of components
- tst = gdaltest.GDALTest('HDF4Image', 'HDF4_EOS:EOS_GRID:"tmp/cache/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf":"MODIS_NACP_EVI":"MODIS_EVI"', 1, 12197, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ 'HDF4_EOS:EOS_GRID:"tmp/cache/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf":"MODIS_NACP_EVI":"MODIS_EVI"',
+ 1,
+ 12197,
+ filename_absolute=1,
+ )
tst.testOpen()
- ds = gdal.Open('HDF4_EOS:EOS_GRID:tmp/cache/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf:MODIS_NACP_EVI:MODIS_EVI')
+ ds = gdal.Open(
+ "HDF4_EOS:EOS_GRID:tmp/cache/MOD09Q1G_EVI.A2006233.h07v03.005.2008338190308.hdf:MODIS_NACP_EVI:MODIS_EVI"
+ )
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ds.GetRasterBand(1).GetBlockSize()
assert blockx == 4800 and blocky == 4800, "Did not get expected block size"
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 12197, 'did not get expected checksum'
+ assert cs == 12197, "did not get expected checksum"
ds = None
+
###############################################################################
# Test fix for #3386 where block size is smaller than dataset size
@@ -235,21 +304,32 @@ def test_hdf4_read_online_7():
pytest.skip()
# 4 MB
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/MOD09A1.A2010041.h06v03.005.2010051001103.hdf', 'MOD09A1.A2010041.h06v03.005.2010051001103.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ "MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'HDF4_EOS:EOS_GRID:tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01', 1, 54894, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "HDF4_EOS:EOS_GRID:tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01",
+ 1,
+ 54894,
+ filename_absolute=1,
+ )
tst.testOpen()
- ds = gdal.Open('HDF4_EOS:EOS_GRID:tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01')
+ ds = gdal.Open(
+ "HDF4_EOS:EOS_GRID:tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01"
+ )
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ds.GetRasterBand(1).GetBlockSize()
assert blockx == 2400 and blocky == 32, "Did not get expected block size"
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 54894, 'did not get expected checksum'
+ assert cs == 54894, "did not get expected checksum"
ds = None
@@ -258,32 +338,45 @@ def test_hdf4_read_online_7():
# Test reading a HDF4_EOS:EOS_GRID where preferred block height reported would be 1
# but that will lead to very poor performance (#3386)
+
def test_hdf4_read_online_8():
if gdaltest.hdf4_drv is None:
pytest.skip()
# 5 MB
- if not gdaltest.download_file('https://e4ftl01.cr.usgs.gov/MOLT/MOD13Q1.006/2006.06.10/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf', 'MOD13Q1.A2006161.h34v09.006.2015161173716.hdf'):
+ if not gdaltest.download_file(
+ "https://e4ftl01.cr.usgs.gov/MOLT/MOD13Q1.006/2006.06.10/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf",
+ "MOD13Q1.A2006161.h34v09.006.2015161173716.hdf",
+ ):
pytest.skip()
- tst = gdaltest.GDALTest('HDF4Image', 'HDF4_EOS:EOS_GRID:tmp/cache/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf:MODIS_Grid_16DAY_250m_500m_VI:250m 16 days NDVI', 1, 44174, filename_absolute=1)
+ tst = gdaltest.GDALTest(
+ "HDF4Image",
+ "HDF4_EOS:EOS_GRID:tmp/cache/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf:MODIS_Grid_16DAY_250m_500m_VI:250m 16 days NDVI",
+ 1,
+ 44174,
+ filename_absolute=1,
+ )
tst.testOpen()
- ds = gdal.Open('HDF4_EOS:EOS_GRID:tmp/cache/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf:MODIS_Grid_16DAY_250m_500m_VI:250m 16 days NDVI')
+ ds = gdal.Open(
+ "HDF4_EOS:EOS_GRID:tmp/cache/MOD13Q1.A2006161.h34v09.006.2015161173716.hdf:MODIS_Grid_16DAY_250m_500m_VI:250m 16 days NDVI"
+ )
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 44174, 'did not get expected checksum'
+ assert cs == 44174, "did not get expected checksum"
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ds.GetRasterBand(1).GetBlockSize()
if blockx != 4800 or blocky == 1:
- print('blockx=%d, blocky=%d' % (blockx, blocky))
+ print("blockx=%d, blocky=%d" % (blockx, blocky))
pytest.fail("Did not get expected block size")
ds = None
+
###############################################################################
# Test reading L1G MTL metadata metadata
@@ -293,20 +386,27 @@ def test_hdf4_read_online_9():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('ftp://ftp.maps.canada.ca/pub/nrcan_rncan/archive/image/landsat_7/geobase_hdf/L71002025_02520010722/L71002025_02520010722_MTL.L1G', 'L71002025_02520010722_MTL.L1G'):
+ if not gdaltest.download_file(
+ "ftp://ftp.maps.canada.ca/pub/nrcan_rncan/archive/image/landsat_7/geobase_hdf/L71002025_02520010722/L71002025_02520010722_MTL.L1G",
+ "L71002025_02520010722_MTL.L1G",
+ ):
pytest.skip()
- if not gdaltest.download_file('ftp://ftp.maps.canada.ca/pub/nrcan_rncan/archive/image/landsat_7/geobase_hdf/L71002025_02520010722/L71002025_02520010722_HDF.L1G', 'L71002025_02520010722_HDF.L1G'):
+ if not gdaltest.download_file(
+ "ftp://ftp.maps.canada.ca/pub/nrcan_rncan/archive/image/landsat_7/geobase_hdf/L71002025_02520010722/L71002025_02520010722_HDF.L1G",
+ "L71002025_02520010722_HDF.L1G",
+ ):
pytest.skip()
- f = open('tmp/cache/L71002025_02520010722_B10.L1G', 'wb')
+ f = open("tmp/cache/L71002025_02520010722_B10.L1G", "wb")
f.close()
ds = gdal.Open('HDF4_SDS:UNKNOWN:"tmp/cache/L71002025_02520010722_HDF.L1G":0')
gcp_count = ds.GetGCPCount()
ds = None
- assert gcp_count == 4, 'did not get expected gcp count'
+ assert gcp_count == 4, "did not get expected gcp count"
+
###############################################################################
# Test that non-tiled access works (#4672)
@@ -317,22 +417,26 @@ def test_hdf4_read_online_10():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('http://trac.osgeo.org/gdal/raw-attachment/ticket/4672/MOD16A2.A2000M01.h14v02.105.2010357183410.hdf', 'MOD16A2.A2000M01.h14v02.105.2010357183410.hdf'):
+ if not gdaltest.download_file(
+ "http://trac.osgeo.org/gdal/raw-attachment/ticket/4672/MOD16A2.A2000M01.h14v02.105.2010357183410.hdf",
+ "MOD16A2.A2000M01.h14v02.105.2010357183410.hdf",
+ ):
pytest.skip()
- ds = gdal.Open('HDF4_EOS:EOS_GRID:"tmp/cache/MOD16A2.A2000M01.h14v02.105.2010357183410.hdf":MOD_Grid_MOD16A2:ET_1km')
+ ds = gdal.Open(
+ 'HDF4_EOS:EOS_GRID:"tmp/cache/MOD16A2.A2000M01.h14v02.105.2010357183410.hdf":MOD_Grid_MOD16A2:ET_1km'
+ )
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ds.GetRasterBand(1).GetBlockSize()
assert blockx == 1200 and blocky == 833, "Did not get expected block size"
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 20976, 'did not get expected checksum'
+ assert cs == 20976, "did not get expected checksum"
ds = None
-
###############################################################################
# Test reading HDFEOS SWATH projducts
@@ -342,16 +446,24 @@ def test_hdf4_read_online_11():
if gdaltest.hdf4_drv is None:
pytest.skip()
- if not gdaltest.download_file('https://gamma.hdfgroup.org/ftp/pub/outgoing/NASAHDFfiles2/eosweb/hdf4/hdfeos2-swath-wo-dimmaps/AMSR_E_L2_Ocean_B01_200206182340_A.hdf', 'AMSR_E_L2_Ocean_B01_200206182340_A.hdf'):
+ if not gdaltest.download_file(
+ "https://gamma.hdfgroup.org/ftp/pub/outgoing/NASAHDFfiles2/eosweb/hdf4/hdfeos2-swath-wo-dimmaps/AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ "AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ ):
pytest.skip()
- ds = gdal.Open('HDF4_EOS:EOS_SWATH:"tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf":Swath1:Ocean_products_quality_flag')
+ ds = gdal.Open(
+ 'HDF4_EOS:EOS_SWATH:"tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf":Swath1:Ocean_products_quality_flag'
+ )
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 7809, 'did not get expected checksum'
+ assert cs == 7809, "did not get expected checksum"
- ds = gdal.Open('tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf')
+ ds = gdal.Open("tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf")
assert len(ds.GetSubDatasets()) == 7
- ds = gdal.OpenEx('tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf', open_options = ['LIST_SDS=YES'])
+ ds = gdal.OpenEx(
+ "tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ open_options=["LIST_SDS=YES"],
+ )
assert len(ds.GetSubDatasets()) == 16
diff --git a/autotest/gcore/hdf4_write.py b/autotest/gcore/hdf4_write.py
index 476d31fe20d3..64249e359622 100755
--- a/autotest/gcore/hdf4_write.py
+++ b/autotest/gcore/hdf4_write.py
@@ -25,39 +25,40 @@
# Boston, MA 02111-1307, USA.
###############################################################################
-import pytest
import gdaltest
+import pytest
init_list = [
- ('byte.tif', 4672),
- ('int16.tif', 4672),
- ('uint16.tif', 4672),
- ('int32.tif', 4672),
- ('uint32.tif', 4672),
- ('float32.tif', 4672),
- ('float64.tif', 4672),
- ('utmsmall.tif', 50054)
+ ("byte.tif", 4672),
+ ("int16.tif", 4672),
+ ("uint16.tif", 4672),
+ ("int32.tif", 4672),
+ ("uint32.tif", 4672),
+ ("float32.tif", 4672),
+ ("float64.tif", 4672),
+ ("utmsmall.tif", 50054),
]
+@pytest.mark.parametrize("rank", [2, 3], ids=lambda x: "rank%d" % x)
@pytest.mark.parametrize(
- 'rank', [2, 3], ids=lambda x: 'rank%d' % x
-)
-@pytest.mark.parametrize(
- 'filename,checksum', init_list, ids=[arg[0].split('.')[0] for arg in init_list]
+ "filename,checksum", init_list, ids=[arg[0].split(".")[0] for arg in init_list]
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- 'testSetGeoTransform',
- 'testSetProjection',
- 'testSetMetadata',
- 'testSetNoDataValue',
- 'testSetDescription',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ "testSetGeoTransform",
+ "testSetProjection",
+ "testSetMetadata",
+ "testSetNoDataValue",
+ "testSetDescription",
+ ],
)
-@pytest.mark.require_driver('HDF4Image')
+@pytest.mark.require_driver("HDF4Image")
def test_hdf4_write(filename, checksum, testfunction, rank):
- ut = gdaltest.GDALTest('HDF4Image', filename, 1, checksum, options=['RANK=%d' % rank])
+ ut = gdaltest.GDALTest(
+ "HDF4Image", filename, 1, checksum, options=["RANK=%d" % rank]
+ )
getattr(ut, testfunction)()
diff --git a/autotest/gcore/hdf4multidim.py b/autotest/gcore/hdf4multidim.py
index 376d39ca6424..408aef3ec9c8 100644
--- a/autotest/gcore/hdf4multidim.py
+++ b/autotest/gcore/hdf4multidim.py
@@ -28,13 +28,14 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
+import struct
+
import gdaltest
import pytest
-import struct
from osgeo import gdal
-pytestmark = pytest.mark.require_driver('HDF4')
+pytestmark = pytest.mark.require_driver("HDF4")
###############################################################################
@@ -43,86 +44,89 @@
def test_hdf4multidim_hdfeos_swath():
- if not gdaltest.download_file('https://gamma.hdfgroup.org/ftp/pub/outgoing/NASAHDFfiles2/eosweb/hdf4/hdfeos2-swath-wo-dimmaps/AMSR_E_L2_Ocean_B01_200206182340_A.hdf', 'AMSR_E_L2_Ocean_B01_200206182340_A.hdf'):
+ if not gdaltest.download_file(
+ "https://gamma.hdfgroup.org/ftp/pub/outgoing/NASAHDFfiles2/eosweb/hdf4/hdfeos2-swath-wo-dimmaps/AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ "AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ ):
pytest.skip()
- ds = gdal.OpenEx('tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx(
+ "tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf", gdal.OF_MULTIDIM_RASTER
+ )
assert ds
rg = ds.GetRootGroup()
assert rg
- assert rg.GetGroupNames() == ['swaths']
+ assert rg.GetGroupNames() == ["swaths"]
attrs = rg.GetAttributes()
assert attrs
- attr = rg.GetAttribute('HDFEOSVersion')
- assert attr.Read() == 'HDFEOS_V2.7.2'
- swaths = rg.OpenGroup('swaths')
+ attr = rg.GetAttribute("HDFEOSVersion")
+ assert attr.Read() == "HDFEOS_V2.7.2"
+ swaths = rg.OpenGroup("swaths")
assert swaths
- assert not rg.OpenGroup('foo')
- assert swaths.GetGroupNames() == ['Swath1']
- swath1 = swaths.OpenGroup('Swath1')
+ assert not rg.OpenGroup("foo")
+ assert swaths.GetGroupNames() == ["Swath1"]
+ swath1 = swaths.OpenGroup("Swath1")
assert swath1
- assert not swaths.OpenGroup('foo')
+ assert not swaths.OpenGroup("foo")
attrs = swath1.GetAttributes()
assert len(attrs) == 3
- attr = swath1.GetAttribute('SoftwareRevisionDate')
+ attr = swath1.GetAttribute("SoftwareRevisionDate")
assert attr.Read()[0:-1] == "November 7, 2003"
- attr = swath1.GetAttribute('SoftwareBuildNumber')
+ attr = swath1.GetAttribute("SoftwareBuildNumber")
assert attr.Read() == 1
dims = swath1.GetDimensions()
assert len(dims) == 4
- dim = next((x for x in dims if x.GetName() == 'DataXtrack_lo'), None)
+ dim = next((x for x in dims if x.GetName() == "DataXtrack_lo"), None)
assert dim
- assert dim.GetFullName() == '/swaths/Swath1/DataXtrack_lo'
- assert dim.GetSize() == 196
- assert swath1.GetGroupNames() == ['Data Fields', 'Geolocation Fields']
- assert not swath1.OpenGroup('foo')
- datafields = swath1.OpenGroup('Data Fields')
+ assert dim.GetFullName() == "/swaths/Swath1/DataXtrack_lo"
+ assert dim.GetSize() == 196
+ assert swath1.GetGroupNames() == ["Data Fields", "Geolocation Fields"]
+ assert not swath1.OpenGroup("foo")
+ datafields = swath1.OpenGroup("Data Fields")
assert datafields
assert len(datafields.GetMDArrayNames()) == 10
- assert not datafields.OpenMDArray('foo')
- array = datafields.OpenMDArray('High_res_cloud')
+ assert not datafields.OpenMDArray("foo")
+ array = datafields.OpenMDArray("High_res_cloud")
assert array
dims = array.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetFullName() == '/swaths/Swath1/DataTrack_lo'
+ assert dims[0].GetFullName() == "/swaths/Swath1/DataTrack_lo"
assert array.GetDataType().GetNumericDataType() == gdal.GDT_Int16
- attr = array.GetAttribute('Scale')
+ attr = array.GetAttribute("Scale")
assert attr.Read() == 9.999999747378752e-05
- got_data = array.Read(array_start_idx = [13, 0], count = [3, 2])
+ got_data = array.Read(array_start_idx=[13, 0], count=[3, 2])
assert len(got_data) == 3 * 2 * 2
- assert struct.unpack('h' * 6, got_data) == (0, 0,
- 17318, 17317,
- 17318, 17317)
+ assert struct.unpack("h" * 6, got_data) == (0, 0, 17318, 17317, 17318, 17317)
-
- got_data = array.Read(array_start_idx = [13, 0], count = [3, 2],
- buffer_datatype = gdal.ExtendedDataType.Create(gdal.GDT_Int32))
+ got_data = array.Read(
+ array_start_idx=[13, 0],
+ count=[3, 2],
+ buffer_datatype=gdal.ExtendedDataType.Create(gdal.GDT_Int32),
+ )
assert len(got_data) == 3 * 2 * 4
- assert struct.unpack('i' * 6, got_data) == (0, 0,
- 17318, 17317,
- 17318, 17317)
+ assert struct.unpack("i" * 6, got_data) == (0, 0, 17318, 17317, 17318, 17317)
- got_data = array.Read(array_start_idx = [13, 0], count = [3, 2], array_step = [2, 1])
+ got_data = array.Read(array_start_idx=[13, 0], count=[3, 2], array_step=[2, 1])
assert len(got_data) == 3 * 2 * 2
- assert struct.unpack('h' * 6, got_data) == (0, 0,
- 17318, 17317,
- 17317, 17317)
+ assert struct.unpack("h" * 6, got_data) == (0, 0, 17318, 17317, 17317, 17317)
- got_data = array.Read(array_start_idx = [15, 1], count = [3, 2], array_step = [-1, -1])
+ got_data = array.Read(array_start_idx=[15, 1], count=[3, 2], array_step=[-1, -1])
assert len(got_data) == 3 * 2 * 2
- assert struct.unpack('h' * 6, got_data) == (17317, 17318,
- 17317, 17318,
- 0, 0)
+ assert struct.unpack("h" * 6, got_data) == (17317, 17318, 17317, 17318, 0, 0)
- got_data = array.Read(array_start_idx = [13, 0], count = [3, 2], buffer_stride = [1, 3])
+ got_data = array.Read(array_start_idx=[13, 0], count=[3, 2], buffer_stride=[1, 3])
assert len(got_data) == 3 * 2 * 2
- assert struct.unpack('h' * 6, got_data) == (0, 17318, 17318,
- 0, 17317, 17317)
+ assert struct.unpack("h" * 6, got_data) == (0, 17318, 17318, 0, 17317, 17317)
- ds = gdal.OpenEx('tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf', gdal.OF_MULTIDIM_RASTER, open_options = ['LIST_SDS=YES'])
+ ds = gdal.OpenEx(
+ "tmp/cache/AMSR_E_L2_Ocean_B01_200206182340_A.hdf",
+ gdal.OF_MULTIDIM_RASTER,
+ open_options=["LIST_SDS=YES"],
+ )
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['swaths', 'scientific_datasets']
+ assert rg.GetGroupNames() == ["swaths", "scientific_datasets"]
+
###############################################################################
# Test reading HDFEOS GRID products
@@ -130,71 +134,82 @@ def test_hdf4multidim_hdfeos_swath():
def test_hdf4multidim_hdfeos_grid():
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/MOD09A1.A2010041.h06v03.005.2010051001103.hdf', 'MOD09A1.A2010041.h06v03.005.2010051001103.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ "MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ ):
pytest.skip()
- ds = gdal.OpenEx('tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx(
+ "tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ gdal.OF_MULTIDIM_RASTER,
+ )
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['eos_grids']
+ assert rg.GetGroupNames() == ["eos_grids"]
attrs = rg.GetAttributes()
assert attrs
- attr = rg.GetAttribute('HDFEOSVersion')
- assert attr.Read() == 'HDFEOS_V2.9'
- eos_grids = rg.OpenGroup('eos_grids')
+ attr = rg.GetAttribute("HDFEOSVersion")
+ assert attr.Read() == "HDFEOS_V2.9"
+ eos_grids = rg.OpenGroup("eos_grids")
assert eos_grids
- assert not rg.OpenGroup('foo')
- assert eos_grids.GetGroupNames() == ['MOD_Grid_500m_Surface_Reflectance']
- MOD_Grid_500m_Surface_Reflectance = eos_grids.OpenGroup('MOD_Grid_500m_Surface_Reflectance')
+ assert not rg.OpenGroup("foo")
+ assert eos_grids.GetGroupNames() == ["MOD_Grid_500m_Surface_Reflectance"]
+ MOD_Grid_500m_Surface_Reflectance = eos_grids.OpenGroup(
+ "MOD_Grid_500m_Surface_Reflectance"
+ )
assert MOD_Grid_500m_Surface_Reflectance
- assert not eos_grids.OpenGroup('foo')
+ assert not eos_grids.OpenGroup("foo")
attrs = MOD_Grid_500m_Surface_Reflectance.GetAttributes()
assert len(attrs) == 0
- assert MOD_Grid_500m_Surface_Reflectance.GetGroupNames() == ['Data Fields']
- assert not MOD_Grid_500m_Surface_Reflectance.OpenGroup('foo')
- datafields = MOD_Grid_500m_Surface_Reflectance.OpenGroup('Data Fields')
+ assert MOD_Grid_500m_Surface_Reflectance.GetGroupNames() == ["Data Fields"]
+ assert not MOD_Grid_500m_Surface_Reflectance.OpenGroup("foo")
+ datafields = MOD_Grid_500m_Surface_Reflectance.OpenGroup("Data Fields")
assert datafields
assert len(datafields.GetMDArrayNames()) == 13
- assert not datafields.OpenMDArray('foo')
- array = datafields.OpenMDArray('sur_refl_b01')
+ assert not datafields.OpenMDArray("foo")
+ array = datafields.OpenMDArray("sur_refl_b01")
assert array
dims = array.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetFullName() == '/eos_grids/MOD_Grid_500m_Surface_Reflectance/YDim'
+ assert dims[0].GetFullName() == "/eos_grids/MOD_Grid_500m_Surface_Reflectance/YDim"
assert dims[0].GetSize() == 2400
- assert dims[1].GetFullName() == '/eos_grids/MOD_Grid_500m_Surface_Reflectance/XDim'
+ assert dims[1].GetFullName() == "/eos_grids/MOD_Grid_500m_Surface_Reflectance/XDim"
assert dims[1].GetSize() == 2400
assert array.GetDataType().GetNumericDataType() == gdal.GDT_Int16
assert array.GetNoDataValueAsDouble() == -28672.0
assert array.GetOffset() == 0
assert array.GetScale() == 0.0001
- assert array.GetUnit() == 'reflectance'
- attr = array.GetAttribute('valid_range')
+ assert array.GetUnit() == "reflectance"
+ attr = array.GetAttribute("valid_range")
assert attr.Read() == (-100, 16000)
assert array.GetSpatialRef()
- got_data = array.Read(array_start_idx = [2398, 2398], count = [2, 2])
+ got_data = array.Read(array_start_idx=[2398, 2398], count=[2, 2])
assert len(got_data) == 2 * 2 * 2
- assert struct.unpack('h' * 4, got_data) == (-24, 0,
- -15, -22)
+ assert struct.unpack("h" * 4, got_data) == (-24, 0, -15, -22)
dims = MOD_Grid_500m_Surface_Reflectance.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetName() == 'YDim'
+ assert dims[0].GetName() == "YDim"
assert dims[0].GetIndexingVariable()
- assert dims[1].GetName() == 'XDim'
+ assert dims[1].GetName() == "XDim"
assert dims[1].GetIndexingVariable()
- assert MOD_Grid_500m_Surface_Reflectance.GetMDArrayNames() == ['YDim', 'XDim']
- XDim = MOD_Grid_500m_Surface_Reflectance.OpenMDArray('XDim')
+ assert MOD_Grid_500m_Surface_Reflectance.GetMDArrayNames() == ["YDim", "XDim"]
+ XDim = MOD_Grid_500m_Surface_Reflectance.OpenMDArray("XDim")
assert XDim
- YDim = MOD_Grid_500m_Surface_Reflectance.OpenMDArray('YDim')
+ YDim = MOD_Grid_500m_Surface_Reflectance.OpenMDArray("YDim")
assert YDim
- assert not MOD_Grid_500m_Surface_Reflectance.OpenMDArray('foo')
+ assert not MOD_Grid_500m_Surface_Reflectance.OpenMDArray("foo")
- ds = gdal.OpenEx('tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf', gdal.OF_MULTIDIM_RASTER, open_options = ['LIST_SDS=YES'])
+ ds = gdal.OpenEx(
+ "tmp/cache/MOD09A1.A2010041.h06v03.005.2010051001103.hdf",
+ gdal.OF_MULTIDIM_RASTER,
+ open_options=["LIST_SDS=YES"],
+ )
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['eos_grids', 'scientific_datasets']
+ assert rg.GetGroupNames() == ["eos_grids", "scientific_datasets"]
###############################################################################
@@ -203,39 +218,44 @@ def test_hdf4multidim_hdfeos_grid():
def test_hdf4multidim_gdal_sds_2d():
- ds = gdal.OpenEx('data/byte_2.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/byte_2.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
assert rg.GetGroupNames() is None
- assert rg.OpenGroup('scientific_datasets') is None
- assert rg.GetMDArrayNames() == ['Band0', 'X', 'Y']
+ assert rg.OpenGroup("scientific_datasets") is None
+ assert rg.GetMDArrayNames() == ["Band0", "X", "Y"]
dims = rg.GetDimensions()
assert len(dims) == 2
- array = rg.OpenMDArray('Band0')
+ array = rg.OpenMDArray("Band0")
assert array
dims = array.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetFullName() == '/Y'
- assert dims[1].GetFullName() == '/X'
+ assert dims[0].GetFullName() == "/Y"
+ assert dims[1].GetFullName() == "/X"
assert array.GetDataType().GetNumericDataType() == gdal.GDT_Byte
- got_data = array.Read(array_start_idx = [0, 0], count = [2, 2])
+ got_data = array.Read(array_start_idx=[0, 0], count=[2, 2])
assert len(got_data) == 2 * 2
- assert struct.unpack('B' * 4, got_data) == (107, 123,
- 115, 132)
+ assert struct.unpack("B" * 4, got_data) == (107, 123, 115, 132)
assert array.GetSpatialRef()
- assert array.GetUnit() == ''
+ assert array.GetUnit() == ""
assert not array.GetOffset()
assert not array.GetScale()
assert not array.GetNoDataValueAsDouble()
X = dims[0].GetIndexingVariable()
assert X
- assert struct.unpack('d' * 2, X.Read(array_start_idx = [0], count = [2])) == (3751290.0, 3751230.0)
+ assert struct.unpack("d" * 2, X.Read(array_start_idx=[0], count=[2])) == (
+ 3751290.0,
+ 3751230.0,
+ )
Y = dims[1].GetIndexingVariable()
assert Y
- assert struct.unpack('d' * 2, Y.Read(array_start_idx = [0], count = [2])) == (440750.0, 440810.0)
+ assert struct.unpack("d" * 2, Y.Read(array_start_idx=[0], count=[2])) == (
+ 440750.0,
+ 440810.0,
+ )
###############################################################################
@@ -244,44 +264,50 @@ def test_hdf4multidim_gdal_sds_2d():
def test_hdf4multidim_gdal_sds_3d():
- ds = gdal.OpenEx('data/byte_3.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/byte_3.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
assert rg.GetGroupNames() is None
- assert rg.OpenGroup('scientific_datasets') is None
- assert rg.GetMDArrayNames() == ['3-dimensional Scientific Dataset', 'X', 'Y']
+ assert rg.OpenGroup("scientific_datasets") is None
+ assert rg.GetMDArrayNames() == ["3-dimensional Scientific Dataset", "X", "Y"]
dims = rg.GetDimensions()
assert len(dims) == 3
- array = rg.OpenMDArray('3-dimensional Scientific Dataset')
+ array = rg.OpenMDArray("3-dimensional Scientific Dataset")
assert array
dims = array.GetDimensions()
assert len(dims) == 3
- assert dims[0].GetFullName() == '/Y'
- assert dims[1].GetFullName() == '/X'
- assert dims[2].GetFullName() == '/Band'
+ assert dims[0].GetFullName() == "/Y"
+ assert dims[1].GetFullName() == "/X"
+ assert dims[2].GetFullName() == "/Band"
assert array.GetDataType().GetNumericDataType() == gdal.GDT_Byte
- got_data = array.Read(array_start_idx = [0, 0, 0], count = [2, 2, 1])
+ got_data = array.Read(array_start_idx=[0, 0, 0], count=[2, 2, 1])
assert len(got_data) == 2 * 2
- assert struct.unpack('B' * 4, got_data) == (107, 123,
- 115, 132)
+ assert struct.unpack("B" * 4, got_data) == (107, 123, 115, 132)
- got_data = array.Transpose([2,1,0]).Read(array_start_idx = [0, 0, 0], count = [1, 2, 2])
+ got_data = array.Transpose([2, 1, 0]).Read(
+ array_start_idx=[0, 0, 0], count=[1, 2, 2]
+ )
assert len(got_data) == 2 * 2
- assert struct.unpack('B' * 4, got_data) == (107, 115,
- 123, 132)
+ assert struct.unpack("B" * 4, got_data) == (107, 115, 123, 132)
assert array.GetSpatialRef()
X = dims[0].GetIndexingVariable()
assert X
- assert struct.unpack('d' * 2, X.Read(array_start_idx = [0], count = [2])) == (3751290.0, 3751230.0)
- assert rg.OpenMDArray('X')
+ assert struct.unpack("d" * 2, X.Read(array_start_idx=[0], count=[2])) == (
+ 3751290.0,
+ 3751230.0,
+ )
+ assert rg.OpenMDArray("X")
Y = dims[1].GetIndexingVariable()
assert Y
- assert struct.unpack('d' * 2, Y.Read(array_start_idx = [0], count = [2])) == (440750.0, 440810.0)
- assert rg.OpenMDArray('Y')
+ assert struct.unpack("d" * 2, Y.Read(array_start_idx=[0], count=[2])) == (
+ 440750.0,
+ 440810.0,
+ )
+ assert rg.OpenMDArray("Y")
###############################################################################
@@ -294,39 +320,39 @@ def test_hdf4multidim_sds():
# https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/mfhdf/examples/SD_create_sds.c
# + https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/mfhdf/examples/SD_set_get_dim_info.c
# + https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/mfhdf/examples/SD_set_attr.c
- ds = gdal.OpenEx('data/SDS.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/SDS.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['scientific_datasets']
- subg = rg.OpenGroup('scientific_datasets')
+ assert rg.GetGroupNames() == ["scientific_datasets"]
+ subg = rg.OpenGroup("scientific_datasets")
assert subg
attrs = rg.GetAttributes()
assert len(attrs) == 1
- assert attrs[0].GetName() == 'File_contents'
- assert attrs[0].Read() == 'Storm_track_data'
- assert not rg.OpenGroup('foo')
+ assert attrs[0].GetName() == "File_contents"
+ assert attrs[0].Read() == "Storm_track_data"
+ assert not rg.OpenGroup("foo")
assert not rg.GetMDArrayNames()
- assert not rg.OpenMDArray('foo')
+ assert not rg.OpenMDArray("foo")
assert not subg.GetGroupNames()
- assert not subg.OpenGroup('foo')
- assert subg.GetMDArrayNames() == ['SDStemplate', 'Y_Axis', 'X_Axis']
+ assert not subg.OpenGroup("foo")
+ assert subg.GetMDArrayNames() == ["SDStemplate", "Y_Axis", "X_Axis"]
dims = subg.GetDimensions()
assert len(dims) == 2
- array = subg.OpenMDArray('SDStemplate')
+ array = subg.OpenMDArray("SDStemplate")
assert array
dims = array.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetFullName() == '/scientific_datasets/Y_Axis'
+ assert dims[0].GetFullName() == "/scientific_datasets/Y_Axis"
assert dims[0].GetIndexingVariable()
- assert dims[1].GetFullName() == '/scientific_datasets/X_Axis'
+ assert dims[1].GetFullName() == "/scientific_datasets/X_Axis"
assert dims[1].GetIndexingVariable()
attrs = array.GetAttributes()
assert len(attrs) == 1
- assert attrs[0].GetName() == 'Valid_range'
- attr = array.GetAttribute('Valid_range')
+ assert attrs[0].GetName() == "Valid_range"
+ attr = array.GetAttribute("Valid_range")
assert attr
assert attr.Read() == (2, 10)
- assert array.GetUnit() == ''
+ assert array.GetUnit() == ""
assert not array.GetSpatialRef()
@@ -338,20 +364,20 @@ def test_hdf4multidim_sds_unlimited_dim():
# Generated with
# hhttps://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/mfhdf/examples/SD_unlimited_sds.c
- ds = gdal.OpenEx('data/SDSUNLIMITED.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/SDSUNLIMITED.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['scientific_datasets']
- subg = rg.OpenGroup('scientific_datasets')
+ assert rg.GetGroupNames() == ["scientific_datasets"]
+ subg = rg.OpenGroup("scientific_datasets")
assert subg
dims = subg.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetName() == 'fakeDim0'
+ assert dims[0].GetName() == "fakeDim0"
assert dims[0].GetSize() == 11
- array = subg.OpenMDArray('AppendableData')
+ array = subg.OpenMDArray("AppendableData")
dims = array.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetName() == 'fakeDim0'
+ assert dims[0].GetName() == "fakeDim0"
assert dims[0].GetSize() == 11
assert len(array.Read()) == 11 * 10 * 4
@@ -362,67 +388,75 @@ def test_hdf4multidim_sds_unlimited_dim():
def test_hdf4multidim_sds_read_world():
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/hdf4/A2004259075000.L2_LAC_SST.hdf', 'A2004259075000.L2_LAC_SST.hdf'):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/hdf4/A2004259075000.L2_LAC_SST.hdf",
+ "A2004259075000.L2_LAC_SST.hdf",
+ ):
pytest.skip()
- ds = gdal.OpenEx('tmp/cache/A2004259075000.L2_LAC_SST.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("tmp/cache/A2004259075000.L2_LAC_SST.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['scientific_datasets']
- subg = rg.OpenGroup('scientific_datasets')
+ assert rg.GetGroupNames() == ["scientific_datasets"]
+ subg = rg.OpenGroup("scientific_datasets")
assert subg
- assert not rg.OpenGroup('foo')
+ assert not rg.OpenGroup("foo")
assert not rg.GetMDArrayNames()
- assert not rg.OpenMDArray('foo')
+ assert not rg.OpenMDArray("foo")
assert not subg.GetGroupNames()
- assert not subg.OpenGroup('foo')
- assert subg.GetMDArrayNames() == ['sst']
+ assert not subg.OpenGroup("foo")
+ assert subg.GetMDArrayNames() == ["sst"]
dims = subg.GetDimensions()
assert len(dims) == 2
- sst = subg.OpenMDArray('sst')
+ sst = subg.OpenMDArray("sst")
assert sst
dims = sst.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetFullName() == '/scientific_datasets/fakeDim0'
- assert dims[1].GetFullName() == '/scientific_datasets/fakeDim1'
+ assert dims[0].GetFullName() == "/scientific_datasets/fakeDim0"
+ assert dims[1].GetFullName() == "/scientific_datasets/fakeDim1"
attrs = sst.GetAttributes()
assert len(attrs) == 5
- attr = sst.GetAttribute('long_name')
+ attr = sst.GetAttribute("long_name")
assert attr
- assert attr.Read() == 'Sea Surface Temperature'
- assert sst.GetUnit() == 'degrees-C'
+ assert attr.Read() == "Sea Surface Temperature"
+ assert sst.GetUnit() == "degrees-C"
assert not sst.GetSpatialRef()
+
###############################################################################
# Test reading a SDS product with indexed dimensions
def test_hdf4multidim_sds_read_world_with_indexing_variable():
- if not gdaltest.download_file('https://download.osgeo.org/gdal/data/hdf4/REANALYSIS_1999217.hdf', 'REANALYSIS_1999217.hdf'):
+ if not gdaltest.download_file(
+ "https://download.osgeo.org/gdal/data/hdf4/REANALYSIS_1999217.hdf",
+ "REANALYSIS_1999217.hdf",
+ ):
pytest.skip()
- ds = gdal.OpenEx('tmp/cache/REANALYSIS_1999217.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("tmp/cache/REANALYSIS_1999217.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['scientific_datasets']
- subg = rg.OpenGroup('scientific_datasets')
+ assert rg.GetGroupNames() == ["scientific_datasets"]
+ subg = rg.OpenGroup("scientific_datasets")
assert subg
dims = subg.GetDimensions()
assert len(dims) == 3
- assert dims[0].GetFullName() == '/scientific_datasets/lat'
+ assert dims[0].GetFullName() == "/scientific_datasets/lat"
assert dims[0].GetIndexingVariable()
- assert dims[1].GetFullName() == '/scientific_datasets/lon'
+ assert dims[1].GetFullName() == "/scientific_datasets/lon"
assert dims[1].GetIndexingVariable()
- assert dims[2].GetFullName() == '/scientific_datasets/time'
+ assert dims[2].GetFullName() == "/scientific_datasets/time"
assert not dims[2].GetIndexingVariable()
- assert subg.GetMDArrayNames() == ['lat', 'lon', 'slp', 'pr_wtr', 'air']
- slp = subg.OpenMDArray('slp')
+ assert subg.GetMDArrayNames() == ["lat", "lon", "slp", "pr_wtr", "air"]
+ slp = subg.OpenMDArray("slp")
assert slp
- assert slp.GetUnit() == 'Pascals'
+ assert slp.GetUnit() == "Pascals"
assert slp.GetOffset() == 119765.0
assert slp.GetScale() == 1.0
+
###############################################################################
# Test reading a GR dataset
@@ -431,73 +465,56 @@ def test_hdf4multidim_gr():
# Generated by https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/hdf/examples/GR_create_and_write_image.c
- ds = gdal.OpenEx('data/General_RImages.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/General_RImages.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['general_rasters']
- subg = rg.OpenGroup('general_rasters')
+ assert rg.GetGroupNames() == ["general_rasters"]
+ subg = rg.OpenGroup("general_rasters")
assert subg
attrs = subg.GetAttributes()
assert len(attrs) == 2
- attr = subg.GetAttribute('File Attribute 1')
- assert attr.Read() == 'Contents of First FILE Attribute'
+ attr = subg.GetAttribute("File Attribute 1")
+ assert attr.Read() == "Contents of First FILE Attribute"
assert not subg.GetGroupNames()
- assert not subg.OpenGroup('foo')
- assert subg.GetMDArrayNames() == ['Image Array 1']
- array = subg.OpenMDArray('Image Array 1')
- assert not subg.OpenMDArray('foo')
+ assert not subg.OpenGroup("foo")
+ assert subg.GetMDArrayNames() == ["Image Array 1"]
+ array = subg.OpenMDArray("Image Array 1")
+ assert not subg.OpenMDArray("foo")
dims = array.GetDimensions()
assert len(dims) == 3
- assert dims[0].GetName() == 'y'
+ assert dims[0].GetName() == "y"
assert dims[0].GetSize() == 10
- assert dims[1].GetName() == 'x'
+ assert dims[1].GetName() == "x"
assert dims[1].GetSize() == 5
- assert dims[2].GetName() == 'bands'
+ assert dims[2].GetName() == "bands"
assert dims[2].GetSize() == 2
- got_data = array.Read(array_start_idx = [1, 2, 0], count = [3, 2, 2])
+ got_data = array.Read(array_start_idx=[1, 2, 0], count=[3, 2, 2])
assert len(got_data) == 3 * 2 * 2 * 2
- assert struct.unpack('h' * 12, got_data) == (4, 5,
- 5, 6,
- 6, 7,
- 5, 6,
- 6, 7,
- 7, 8)
-
- got_data = array.Read(array_start_idx = [1, 2, 0], count = [3, 2, 1])
+ assert struct.unpack("h" * 12, got_data) == (4, 5, 5, 6, 6, 7, 5, 6, 6, 7, 7, 8)
+
+ got_data = array.Read(array_start_idx=[1, 2, 0], count=[3, 2, 1])
assert len(got_data) == 3 * 2 * 1 * 2
- assert struct.unpack('h' * 6, got_data) == (4,
- 5,
- 6,
- 5,
- 6,
- 7)
-
- got_data = array.Read(array_start_idx = [1, 2, 1], count = [3, 2, 1])
+ assert struct.unpack("h" * 6, got_data) == (4, 5, 6, 5, 6, 7)
+
+ got_data = array.Read(array_start_idx=[1, 2, 1], count=[3, 2, 1])
assert len(got_data) == 3 * 2 * 1 * 2
- assert struct.unpack('h' * 6, got_data) == (5,
- 6,
- 7,
- 6,
- 7,
- 8)
-
- got_data = array.Read(array_start_idx = [1, 2, 1], count = [3, 2, 2], array_step = [1, 1, -1])
+ assert struct.unpack("h" * 6, got_data) == (5, 6, 7, 6, 7, 8)
+
+ got_data = array.Read(
+ array_start_idx=[1, 2, 1], count=[3, 2, 2], array_step=[1, 1, -1]
+ )
assert len(got_data) == 3 * 2 * 2 * 2
- assert struct.unpack('h' * 12, got_data) == (5, 4,
- 6, 5,
- 7, 6,
- 6, 5,
- 7, 6,
- 8, 7)
+ assert struct.unpack("h" * 12, got_data) == (5, 4, 6, 5, 7, 6, 6, 5, 7, 6, 8, 7)
attrs = array.GetAttributes()
assert len(attrs) == 2
- attr = array.GetAttribute('Image Attribute 1')
+ attr = array.GetAttribute("Image Attribute 1")
assert attr.Read() == "Contents of IMAGE's First Attribute"
- attr = array.GetAttribute('Image Attribute 2')
+ attr = array.GetAttribute("Image Attribute 2")
assert attr.Read() == (1, 2, 3, 4, 5, 6)
+
###############################################################################
# Test reading a GR dataset with a palette
@@ -507,14 +524,14 @@ def test_hdf4multidim_gr_palette():
# Generated by https://support.hdfgroup.org/ftp/HDF/HDF_Current/src/unpacked/hdf/examples/GR_write_palette.c
def get_lut():
- ds = gdal.OpenEx('data/Image_with_Palette.hdf', gdal.OF_MULTIDIM_RASTER)
+ ds = gdal.OpenEx("data/Image_with_Palette.hdf", gdal.OF_MULTIDIM_RASTER)
assert ds
rg = ds.GetRootGroup()
- assert rg.GetGroupNames() == ['general_rasters']
- subg = rg.OpenGroup('general_rasters')
- array = subg.OpenMDArray('Image with Palette')
+ assert rg.GetGroupNames() == ["general_rasters"]
+ subg = rg.OpenGroup("general_rasters")
+ array = subg.OpenMDArray("Image with Palette")
assert array
- lut = array.GetAttribute('lut')
+ lut = array.GetAttribute("lut")
return lut
lut = get_lut()
@@ -527,4 +544,3 @@ def get_lut():
assert got[255 * 3 + 0] == 255
assert got[255 * 3 + 1] == 0
assert got[255 * 3 + 2] == 1
-
diff --git a/autotest/gcore/hfa_read.py b/autotest/gcore/hfa_read.py
index 43f2dd6e9070..dab0154e8f30 100755
--- a/autotest/gcore/hfa_read.py
+++ b/autotest/gcore/hfa_read.py
@@ -29,41 +29,40 @@
###############################################################################
+import gdaltest
import pytest
from osgeo import gdal
-import gdaltest
-
init_list = [
- ('byte.img', 4672),
- ('int16.img', 4672),
- ('uint16.img', 4672),
- ('int32.img', 4672),
- ('uint32.img', 4672),
- ('float32.img', 4672),
- ('float64.img', 4672),
- ('utmsmall.img', 50054),
- ('2bit_compressed.img', 11918)]
+ ("byte.img", 4672),
+ ("int16.img", 4672),
+ ("uint16.img", 4672),
+ ("int32.img", 4672),
+ ("uint32.img", 4672),
+ ("float32.img", 4672),
+ ("float64.img", 4672),
+ ("utmsmall.img", 50054),
+ ("2bit_compressed.img", 11918),
+]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('HFA')
+@pytest.mark.require_driver("HFA")
def test_hfa_open(filename, checksum):
- ut = gdaltest.GDALTest('HFA', filename, 1, checksum)
+ ut = gdaltest.GDALTest("HFA", filename, 1, checksum)
ut.testOpen()
+
###############################################################################
# Test bugfix for https://oss-fuzz.com/v2/testcase-detail/6053338875428864
+
def test_hfa_read_completedefn_recursion():
with gdaltest.error_handler():
- gdal.Open('data/hfa_completedefn_recursion.img')
-
-
-
+ gdal.Open("data/hfa_completedefn_recursion.img")
diff --git a/autotest/gcore/hfa_rfc40.py b/autotest/gcore/hfa_rfc40.py
index 1b2a14aee1ba..7b8afc5000ab 100755
--- a/autotest/gcore/hfa_rfc40.py
+++ b/autotest/gcore/hfa_rfc40.py
@@ -30,23 +30,39 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-from osgeo import gdal
-
import pytest
+from osgeo import gdal
+
# All tests will be skipped if numpy is unavailable.
-np = pytest.importorskip('numpy')
+np = pytest.importorskip("numpy")
INT_DATA = np.array([197, 83, 46, 29, 1, 78, 23, 90, 12, 45])
DOUBLE_DATA = np.array([0.1, 43.2, 78.1, 9.9, 23.0, 0.92, 82.5, 0.0, 1.0, 99.0])
-STRING_DATA = np.array([
- "sddf", "wess", "grbgr", "dewd", "ddww", "qwsqw", "gbfgbf", "wwqw3", "e", ""])
-STRING_DATA_INTS = np.array(["197", "83", "46", "29", "1", "78", "23", "90", "12", "45"])
-STRING_DATA_DOUBLES = np.array([
- "0.1", "43.2", "78.1", "9.9", "23.0", "0.92", "82.5", "0.0", "1.0", "99.0"])
-LONG_STRING_DATA = np.array(["sdfsdfsdfs", "sdweddw", "sdewdweee", "3423dedd", "jkejjjdjd",
- "edcdcdcdc", "fcdkmk4m534m", "edwededdd", "dedwedew", "wdedefrfrfrf"])
+STRING_DATA = np.array(
+ ["sddf", "wess", "grbgr", "dewd", "ddww", "qwsqw", "gbfgbf", "wwqw3", "e", ""]
+)
+STRING_DATA_INTS = np.array(
+ ["197", "83", "46", "29", "1", "78", "23", "90", "12", "45"]
+)
+STRING_DATA_DOUBLES = np.array(
+ ["0.1", "43.2", "78.1", "9.9", "23.0", "0.92", "82.5", "0.0", "1.0", "99.0"]
+)
+LONG_STRING_DATA = np.array(
+ [
+ "sdfsdfsdfs",
+ "sdweddw",
+ "sdewdweee",
+ "3423dedd",
+ "jkejjjdjd",
+ "edcdcdcdc",
+ "fcdkmk4m534m",
+ "edwededdd",
+ "dedwedew",
+ "wdedefrfrfrf",
+ ]
+)
class HFATestError(Exception):
@@ -85,35 +101,50 @@ def CreateAndWriteRAT(fname):
raise HFATestError("Create column failed")
# for writing as different type
- if rat.CreateColumn("IntAsDouble", gdal.GFT_Integer, gdal.GFU_Generic) != gdal.CE_None:
+ if (
+ rat.CreateColumn("IntAsDouble", gdal.GFT_Integer, gdal.GFU_Generic)
+ != gdal.CE_None
+ ):
raise HFATestError("Create column failed")
- if rat.CreateColumn("IntsAsString", gdal.GFT_Integer, gdal.GFU_Generic) != gdal.CE_None:
+ if (
+ rat.CreateColumn("IntsAsString", gdal.GFT_Integer, gdal.GFU_Generic)
+ != gdal.CE_None
+ ):
raise HFATestError("Create column failed")
if rat.CreateColumn("DoubleAsInt", gdal.GFT_Real, gdal.GFU_Generic) != gdal.CE_None:
raise HFATestError("Create column failed")
- if rat.CreateColumn("DoubleAsString", gdal.GFT_Real, gdal.GFU_Generic) != gdal.CE_None:
+ if (
+ rat.CreateColumn("DoubleAsString", gdal.GFT_Real, gdal.GFU_Generic)
+ != gdal.CE_None
+ ):
raise HFATestError("Create column failed")
- if rat.CreateColumn("StringAsInt", gdal.GFT_String, gdal.GFU_Generic) != gdal.CE_None:
+ if (
+ rat.CreateColumn("StringAsInt", gdal.GFT_String, gdal.GFU_Generic)
+ != gdal.CE_None
+ ):
raise HFATestError("Create column failed")
- if rat.CreateColumn("StringAsDouble", gdal.GFT_String, gdal.GFU_Generic) != gdal.CE_None:
+ if (
+ rat.CreateColumn("StringAsDouble", gdal.GFT_String, gdal.GFU_Generic)
+ != gdal.CE_None
+ ):
raise HFATestError("Create column failed")
rat.SetRowCount(INT_DATA.size)
# some basic checks
if rat.GetRowCount() != INT_DATA.size:
- raise HFATestError('Wrong RowCount')
+ raise HFATestError("Wrong RowCount")
if rat.GetColumnCount() != 9:
- raise HFATestError('Wrong Column Count')
+ raise HFATestError("Wrong Column Count")
if rat.GetNameOfCol(1) != "Doubles":
- raise HFATestError('Wrong Column Count')
+ raise HFATestError("Wrong Column Count")
if rat.GetUsageOfCol(1) != gdal.GFU_Generic:
raise HFATestError("Wrong column usage")
@@ -225,7 +256,7 @@ def CheckSetGetValues(fname):
rat.SetValueAsInt(i, 0, int(INT_DATA[i] + 1))
rat.SetValueAsDouble(i, 1, DOUBLE_DATA[i] + 1)
s = STRING_DATA[i]
- s = s + 'z'
+ s = s + "z"
rat.SetValueAsString(i, 2, s)
# read data and check
@@ -235,7 +266,7 @@ def CheckSetGetValues(fname):
if rat.GetValueAsDouble(i, 1) != (DOUBLE_DATA[i] + 1):
raise HFATestError("GetValueAsDouble not reading correctly")
s = STRING_DATA[i]
- s = s + 'z'
+ s = s + "z"
if rat.GetValueAsString(i, 2) != s:
raise HFATestError("GetValueAsString not reading correctly")
@@ -378,6 +409,7 @@ def CheckClone(fname):
# print("cloned ok")
ds = None
+
# basic tests
@@ -388,36 +420,42 @@ def test_hfa_rfc40_1():
def test_hfa_rfc40_2():
return ReadAndCheckValues("tmp/test.img", 10)
+
# the older interface
def test_hfa_rfc40_3():
return CheckSetGetValues("tmp/test.img")
+
# make sure original data not changed
def test_hfa_rfc40_4():
return ReadAndCheckValues("tmp/test.img", 10)
+
# make it longer - data will be re-written
def test_hfa_rfc40_5():
return ExtendAndWrite("tmp/test.img")
+
# make sure old data not changed
def test_hfa_rfc40_6():
return ReadAndCheckValues("tmp/test.img", 20)
+
# new data at the end ok?
def test_hfa_rfc40_7():
return CheckExtension("tmp/test.img")
+
# write some longer strings - string column will
# have to be re-written
@@ -425,41 +463,44 @@ def test_hfa_rfc40_7():
def test_hfa_rfc40_8():
return WriteLongStrings("tmp/test.img")
+
# make sure old data not changed
def test_hfa_rfc40_9():
return ReadAndCheckValues("tmp/test.img", 20)
+
# check new data ok
def test_hfa_rfc40_10():
return CheckLongStrings("tmp/test.img")
+
# linear binning
def test_hfa_rfc40_11():
return SetLinearBinning("tmp/test.img")
+
# linear binning
def test_hfa_rfc40_12():
return CheckLinearBinning("tmp/test.img")
+
# clone
def test_hfa_rfc40_13():
return CheckClone("tmp/test.img")
+
# serialize not available from Python...
def test_hfa_rfc40_cleanup():
- gdal.GetDriverByName('HFA').Delete("tmp/test.img")
-
-
-
+ gdal.GetDriverByName("HFA").Delete("tmp/test.img")
diff --git a/autotest/gcore/hfa_srs.py b/autotest/gcore/hfa_srs.py
index 1cebdc06aa1f..18123ab85c77 100755
--- a/autotest/gcore/hfa_srs.py
+++ b/autotest/gcore/hfa_srs.py
@@ -31,9 +31,7 @@
import pytest
-from osgeo import gdal
-from osgeo import osr
-
+from osgeo import gdal, osr
###############################################################################
# Write a HFA/Imagine and read it back to check its SRS
@@ -45,7 +43,7 @@
[32661, True], # stere
[6931, False], # laea
[2062, False], # lcc
- #[2065, True], # krovak South-West
+ # [2065, True], # krovak South-West
[5221, True], # krovak east-north
[2066, False], # cass
[2964, False], # aea
@@ -62,7 +60,7 @@
@pytest.mark.parametrize(
- 'epsg_code,epsg_broken',
+ "epsg_code,epsg_broken",
epsg_list,
ids=[str(r[0]) for r in epsg_list],
)
@@ -70,73 +68,90 @@ def test_hfa_srs(epsg_code, epsg_broken):
sr = osr.SpatialReference()
sr.ImportFromEPSG(epsg_code)
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/TestHFASRS.img', 1, 1)
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/TestHFASRS.img", 1, 1)
ds.SetProjection(sr.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/TestHFASRS.img')
+ ds = gdal.Open("/vsimem/TestHFASRS.img")
wkt = ds.GetProjectionRef()
sr2 = osr.SpatialReference()
sr2.SetFromUserInput(wkt)
ds = None
- gdal.Unlink('/vsimem/TestHFASRS.img')
+ gdal.Unlink("/vsimem/TestHFASRS.img")
# For EPSG:2065. Those 2 datums are translated into D_S_JTSK in ESRI WKT... So for the purpose of
# comparison, substitute one for another
- if sr.ExportToWkt().find('"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro"') != -1 and \
- sr2.ExportToWkt().find('"System_Jednotne_Trigonometricke_Site_Katastralni"') != -1:
- wkt2 = sr2.ExportToWkt().replace('"System_Jednotne_Trigonometricke_Site_Katastralni"', '"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro"')
+ if (
+ sr.ExportToWkt().find(
+ '"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro"'
+ )
+ != -1
+ and sr2.ExportToWkt().find('"System_Jednotne_Trigonometricke_Site_Katastralni"')
+ != -1
+ ):
+ wkt2 = sr2.ExportToWkt().replace(
+ '"System_Jednotne_Trigonometricke_Site_Katastralni"',
+ '"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro"',
+ )
sr2.SetFromUserInput(wkt2)
- if (epsg_code == 4326 and sr2.GetAuthorityCode(None) != '4326') or sr.IsSame(sr2) != 1:
+ if (epsg_code == 4326 and sr2.GetAuthorityCode(None) != "4326") or sr.IsSame(
+ sr2
+ ) != 1:
if epsg_broken:
- pytest.xfail('did not get expected SRS. known to be broken currently. FIXME!')
+ pytest.xfail(
+ "did not get expected SRS. known to be broken currently. FIXME!"
+ )
print(sr)
print(sr2)
- assert False, 'did not get expected SRS'
+ assert False, "did not get expected SRS"
def test_hfa_srs_wisconsin_tmerc():
- ds = gdal.Open('data/esri_103300_NAD_1983_HARN_WISCRS_Adams_County_Meters_transverse_mercator.img')
+ ds = gdal.Open(
+ "data/esri_103300_NAD_1983_HARN_WISCRS_Adams_County_Meters_transverse_mercator.img"
+ )
wkt = ds.GetProjectionRef()
sr = osr.SpatialReference()
sr.SetFromUserInput(wkt)
- assert sr.GetAuthorityCode(None) == '103300'
+ assert sr.GetAuthorityCode(None) == "103300"
def test_hfa_srs_NAD83_UTM():
sr = osr.SpatialReference()
sr.ImportFromEPSG(26915)
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/TestHFASRS.img', 1, 1)
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/TestHFASRS.img", 1, 1)
ds.SetProjection(sr.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/TestHFASRS.img')
+ ds = gdal.Open("/vsimem/TestHFASRS.img")
wkt = ds.GetProjectionRef()
- assert ds.GetSpatialRef().GetAuthorityCode(None) == '26915'
+ assert ds.GetSpatialRef().GetAuthorityCode(None) == "26915"
ds = None
- gdal.Unlink('/vsimem/TestHFASRS.img')
+ gdal.Unlink("/vsimem/TestHFASRS.img")
- assert 'TOWGS84' not in wkt
+ assert "TOWGS84" not in wkt
def test_hfa_srs_NAD83_CORS96_UTM():
sr = osr.SpatialReference()
- sr.SetFromUserInput('PROJCS["NAD_1983_CORS96_UTM_Zone_11N",GEOGCS["NAD83(CORS96)",DATUM["NAD83_Continuously_Operating_Reference_Station_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","6783"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["ESRI","102411"]]')
+ sr.SetFromUserInput(
+ 'PROJCS["NAD_1983_CORS96_UTM_Zone_11N",GEOGCS["NAD83(CORS96)",DATUM["NAD83_Continuously_Operating_Reference_Station_1996",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","1133"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","6783"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["ESRI","102411"]]'
+ )
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/TestHFASRS.img', 1, 1)
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/TestHFASRS.img", 1, 1)
ds.SetProjection(sr.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/TestHFASRS.img')
+ ds = gdal.Open("/vsimem/TestHFASRS.img")
srs_got = ds.GetSpatialRef()
assert srs_got.GetAuthorityName(None) is None
assert srs_got.IsSame(sr), srs_got.ExportToWkt()
ds = None
- gdal.Unlink('/vsimem/TestHFASRS.img')
+ gdal.Unlink("/vsimem/TestHFASRS.img")
diff --git a/autotest/gcore/hfa_write.py b/autotest/gcore/hfa_write.py
index 89a0df6bee36..e69086a455ae 100755
--- a/autotest/gcore/hfa_write.py
+++ b/autotest/gcore/hfa_write.py
@@ -33,79 +33,79 @@
import os
import shutil
+import gdaltest
import pytest
from osgeo import gdal, osr
-import gdaltest
-
###############################################################################
# test that we can write a small file with a custom layer name.
def test_hfa_write_desc():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
- new_ds = gdal.GetDriverByName('HFA').CreateCopy('tmp/test_desc.img',
- src_ds)
+ new_ds = gdal.GetDriverByName("HFA").CreateCopy("tmp/test_desc.img", src_ds)
bnd = new_ds.GetRasterBand(1)
- bnd.SetDescription('CustomBandName')
+ bnd.SetDescription("CustomBandName")
bnd = None
src_ds = None
new_ds = None
- new_ds = gdal.Open('tmp/test_desc.img')
+ new_ds = gdal.Open("tmp/test_desc.img")
bnd = new_ds.GetRasterBand(1)
- assert bnd.GetDescription() == 'CustomBandName', 'Didnt get custom band name.'
+ assert bnd.GetDescription() == "CustomBandName", "Didnt get custom band name."
bnd = None
new_ds = None
- gdal.GetDriverByName('HFA').Delete('tmp/test_desc.img')
+ gdal.GetDriverByName("HFA").Delete("tmp/test_desc.img")
+
###############################################################################
# test writing 4 bit files.
def test_hfa_write_4bit():
- drv = gdal.GetDriverByName('HFA')
- src_ds = gdal.Open('data/byte.tif')
- ds = drv.CreateCopy('tmp/4bit.img', src_ds, options=['NBITS=1'])
+ drv = gdal.GetDriverByName("HFA")
+ src_ds = gdal.Open("data/byte.tif")
+ ds = drv.CreateCopy("tmp/4bit.img", src_ds, options=["NBITS=1"])
ds = None
src_ds = None
- ds = gdal.Open('tmp/4bit.img')
+ ds = gdal.Open("tmp/4bit.img")
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 252, 'Got wrong checksum on 4bit image.'
+ assert cs == 252, "Got wrong checksum on 4bit image."
ds = None
- drv.Delete('tmp/4bit.img')
+ drv.Delete("tmp/4bit.img")
+
###############################################################################
# test writing 4 bit files compressed.
def test_hfa_write_4bit_compressed():
- drv = gdal.GetDriverByName('HFA')
- src_ds = gdal.Open('data/byte.tif')
- ds = drv.CreateCopy('tmp/4bitc.img', src_ds,
- options=['NBITS=1', 'COMPRESSED=YES'])
+ drv = gdal.GetDriverByName("HFA")
+ src_ds = gdal.Open("data/byte.tif")
+ ds = drv.CreateCopy("tmp/4bitc.img", src_ds, options=["NBITS=1", "COMPRESSED=YES"])
ds = None
src_ds = None
- ds = gdal.Open('tmp/4bitc.img')
+ ds = gdal.Open("tmp/4bitc.img")
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 252, 'Got wrong checksum on 4bit image.'
+ assert cs == 252, "Got wrong checksum on 4bit image."
ds = None
- drv.Delete('tmp/4bitc.img')
+ drv.Delete("tmp/4bitc.img")
+
###############################################################################
# Test creating a file with a nodata value, and fetching otherwise unread
@@ -114,19 +114,20 @@ def test_hfa_write_4bit_compressed():
def test_hfa_write_nd_invalid():
- drv = gdal.GetDriverByName('HFA')
- ds = drv.Create('tmp/ndinvalid.img', 512, 512, 1, gdal.GDT_Byte, [])
+ drv = gdal.GetDriverByName("HFA")
+ ds = drv.Create("tmp/ndinvalid.img", 512, 512, 1, gdal.GDT_Byte, [])
ds.GetRasterBand(1).SetNoDataValue(200)
ds = None
- ds = gdal.Open('tmp/ndinvalid.img')
+ ds = gdal.Open("tmp/ndinvalid.img")
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 29754, 'Got wrong checksum on invalid image.'
+ assert cs == 29754, "Got wrong checksum on invalid image."
ds = None
- drv.Delete('tmp/ndinvalid.img')
+ drv.Delete("tmp/ndinvalid.img")
+
###############################################################################
# Test updating .rrd overviews in place (#2524).
@@ -134,51 +135,123 @@ def test_hfa_write_nd_invalid():
def test_hfa_update_overviews():
- shutil.copyfile('data/small_ov.img', 'tmp/small.img')
- shutil.copyfile('data/small_ov.rrd', 'tmp/small.rrd')
+ shutil.copyfile("data/small_ov.img", "tmp/small.img")
+ shutil.copyfile("data/small_ov.rrd", "tmp/small.rrd")
- ds = gdal.Open('tmp/small.img', gdal.GA_Update)
+ ds = gdal.Open("tmp/small.img", gdal.GA_Update)
result = ds.BuildOverviews(overviewlist=[2])
- assert result == 0, 'BuildOverviews() failed.'
+ assert result == 0, "BuildOverviews() failed."
ds = None
+
###############################################################################
# Test cleaning external overviews.
def test_hfa_clean_external_overviews():
- ds = gdal.Open('tmp/small.img', gdal.GA_Update)
+ ds = gdal.Open("tmp/small.img", gdal.GA_Update)
result = ds.BuildOverviews(overviewlist=[])
- assert result == 0, 'BuildOverviews() failed.'
+ assert result == 0, "BuildOverviews() failed."
- assert ds.GetRasterBand(1).GetOverviewCount() == 0, 'Overviews still exist.'
+ assert ds.GetRasterBand(1).GetOverviewCount() == 0, "Overviews still exist."
ds = None
- ds = gdal.Open('tmp/small.img')
- assert ds.GetRasterBand(1).GetOverviewCount() == 0, 'Overviews still exist.'
+ ds = gdal.Open("tmp/small.img")
+ assert ds.GetRasterBand(1).GetOverviewCount() == 0, "Overviews still exist."
ds = None
- assert not os.path.exists('tmp/small.rrd')
+ assert not os.path.exists("tmp/small.rrd")
+
+ gdal.GetDriverByName("HFA").Delete("tmp/small.img")
- gdal.GetDriverByName('HFA').Delete('tmp/small.img')
###############################################################################
# Test writing high frequency data (#2525).
def test_hfa_bug_2525():
- drv = gdal.GetDriverByName('HFA')
- ds = drv.Create('tmp/test_hfa.img', 64, 64, 1, gdal.GDT_UInt16, options=['COMPRESSED=YES'])
+ drv = gdal.GetDriverByName("HFA")
+ ds = drv.Create(
+ "tmp/test_hfa.img", 64, 64, 1, gdal.GDT_UInt16, options=["COMPRESSED=YES"]
+ )
import struct
- data = struct.pack('H' * 64, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 65535)
+
+ data = struct.pack(
+ "H" * 64,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ 0,
+ 65535,
+ )
for i in range(64):
ds.GetRasterBand(1).WriteRaster(0, i, 64, 1, data)
ds = None
- drv.Delete('tmp/test_hfa.img')
+ drv.Delete("tmp/test_hfa.img")
+
###############################################################################
# Test building external overviews with HFA_USE_RRD=YES
@@ -186,102 +259,107 @@ def test_hfa_bug_2525():
def test_hfa_use_rrd():
- shutil.copyfile('data/small_ov.img', 'tmp/small.img')
+ shutil.copyfile("data/small_ov.img", "tmp/small.img")
- old_value = gdal.GetConfigOption('HFA_USE_RRD', 'NO')
- gdal.SetConfigOption('HFA_USE_RRD', 'YES')
- ds = gdal.Open('tmp/small.img', gdal.GA_Update)
+ old_value = gdal.GetConfigOption("HFA_USE_RRD", "NO")
+ gdal.SetConfigOption("HFA_USE_RRD", "YES")
+ ds = gdal.Open("tmp/small.img", gdal.GA_Update)
result = ds.BuildOverviews(overviewlist=[2])
- gdal.SetConfigOption('HFA_USE_RRD', old_value)
+ gdal.SetConfigOption("HFA_USE_RRD", old_value)
- assert result == 0, 'BuildOverviews() failed.'
+ assert result == 0, "BuildOverviews() failed."
ds = None
try:
- os.stat('tmp/small.rrd')
+ os.stat("tmp/small.rrd")
except OSError:
- pytest.fail('small.rrd not present.')
+ pytest.fail("small.rrd not present.")
- ds = gdal.Open('tmp/small.img')
- assert ds.GetRasterBand(1).GetOverview(0).Checksum() == 26148, \
- 'Unexpected checksum.'
+ ds = gdal.Open("tmp/small.img")
+ assert (
+ ds.GetRasterBand(1).GetOverview(0).Checksum() == 26148
+ ), "Unexpected checksum."
ds = None
- gdal.GetDriverByName('HFA').Delete('tmp/small.img')
+ gdal.GetDriverByName("HFA").Delete("tmp/small.img")
###############################################################################
# Test fix for #4831
+
def test_hfa_update_existing_aux_overviews():
- gdal.SetConfigOption('USE_RRD', 'YES')
+ gdal.SetConfigOption("USE_RRD", "YES")
- ds = gdal.GetDriverByName('BMP').Create('tmp/hfa_update_existing_aux_overviews.bmp', 100, 100, 1)
+ ds = gdal.GetDriverByName("BMP").Create(
+ "tmp/hfa_update_existing_aux_overviews.bmp", 100, 100, 1
+ )
ds.GetRasterBand(1).Fill(255)
ds = None
# Create overviews
- ds = gdal.Open('tmp/hfa_update_existing_aux_overviews.bmp')
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds = gdal.Open("tmp/hfa_update_existing_aux_overviews.bmp")
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
# Save overviews checksum
- ds = gdal.Open('tmp/hfa_update_existing_aux_overviews.bmp')
+ ds = gdal.Open("tmp/hfa_update_existing_aux_overviews.bmp")
cs_ovr0 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs_ovr1 = ds.GetRasterBand(1).GetOverview(1).Checksum()
# and regenerate them
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- ds = gdal.Open('tmp/hfa_update_existing_aux_overviews.bmp')
+ ds = gdal.Open("tmp/hfa_update_existing_aux_overviews.bmp")
# Check overviews checksum
new_cs_ovr0 = ds.GetRasterBand(1).GetOverview(0).Checksum()
new_cs_ovr1 = ds.GetRasterBand(1).GetOverview(1).Checksum()
if cs_ovr0 != new_cs_ovr0:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
if cs_ovr1 != new_cs_ovr1:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
# and regenerate them twice in a row
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- ds = gdal.Open('tmp/hfa_update_existing_aux_overviews.bmp')
+ ds = gdal.Open("tmp/hfa_update_existing_aux_overviews.bmp")
# Check overviews checksum
new_cs_ovr0 = ds.GetRasterBand(1).GetOverview(0).Checksum()
new_cs_ovr1 = ds.GetRasterBand(1).GetOverview(1).Checksum()
if cs_ovr0 != new_cs_ovr0:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
if cs_ovr1 != new_cs_ovr1:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
# and regenerate them with an extra overview level
- ds.BuildOverviews('NEAR', overviewlist=[8])
+ ds.BuildOverviews("NEAR", overviewlist=[8])
ds = None
- ds = gdal.Open('tmp/hfa_update_existing_aux_overviews.bmp')
+ ds = gdal.Open("tmp/hfa_update_existing_aux_overviews.bmp")
# Check overviews checksum
new_cs_ovr0 = ds.GetRasterBand(1).GetOverview(0).Checksum()
new_cs_ovr1 = ds.GetRasterBand(1).GetOverview(1).Checksum()
if cs_ovr0 != new_cs_ovr0:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
if cs_ovr1 != new_cs_ovr1:
- gdal.SetConfigOption('USE_RRD', None)
+ gdal.SetConfigOption("USE_RRD", None)
pytest.fail()
ds = None
- gdal.GetDriverByName('BMP').Delete('tmp/hfa_update_existing_aux_overviews.bmp')
+ gdal.GetDriverByName("BMP").Delete("tmp/hfa_update_existing_aux_overviews.bmp")
+
+ gdal.SetConfigOption("USE_RRD", None)
- gdal.SetConfigOption('USE_RRD', None)
###############################################################################
# Test writing invalid WKT (#5258)
@@ -290,8 +368,9 @@ def test_hfa_update_existing_aux_overviews():
def test_hfa_write_invalid_wkt():
# No GEOGCS
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/hfa_write_invalid_wkt.img', 1, 1)
- ds.SetProjection("""PROJCS["NAD27 / UTM zone 11N",
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/hfa_write_invalid_wkt.img", 1, 1)
+ ds.SetProjection(
+ """PROJCS["NAD27 / UTM zone 11N",
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-117],
@@ -300,12 +379,14 @@ def test_hfa_write_invalid_wkt():
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
- AUTHORITY["EPSG","26711"]]""")
+ AUTHORITY["EPSG","26711"]]"""
+ )
ds = None
# No DATUM in GEOGCS
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/hfa_write_invalid_wkt.img', 1, 1)
- ds.SetProjection("""PROJCS["NAD27 / UTM zone 11N",
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/hfa_write_invalid_wkt.img", 1, 1)
+ ds.SetProjection(
+ """PROJCS["NAD27 / UTM zone 11N",
GEOGCS["NAD27",
AUTHORITY["EPSG","4267"]],
PROJECTION["Transverse_Mercator"],
@@ -316,12 +397,14 @@ def test_hfa_write_invalid_wkt():
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
- AUTHORITY["EPSG","26711"]]""")
+ AUTHORITY["EPSG","26711"]]"""
+ )
ds = None
# No SPHEROID in DATUM
- ds = gdal.GetDriverByName('HFA').Create('/vsimem/hfa_write_invalid_wkt.img', 1, 1)
- ds.SetProjection("""PROJCS["NAD27 / UTM zone 11N",
+ ds = gdal.GetDriverByName("HFA").Create("/vsimem/hfa_write_invalid_wkt.img", 1, 1)
+ ds.SetProjection(
+ """PROJCS["NAD27 / UTM zone 11N",
GEOGCS["NAD27",
DATUM["North_American_Datum_1927",
AUTHORITY["EPSG","6267"]],
@@ -336,104 +419,113 @@ def test_hfa_write_invalid_wkt():
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
- AUTHORITY["EPSG","26711"]]""")
+ AUTHORITY["EPSG","26711"]]"""
+ )
ds = None
- gdal.GetDriverByName('HFA').Delete('/vsimem/hfa_write_invalid_wkt.img')
+ gdal.GetDriverByName("HFA").Delete("/vsimem/hfa_write_invalid_wkt.img")
+
###############################################################################
# Get the driver, and verify a few things about it.
init_list = [
- ('byte.tif', 4672),
- ('int16.tif', 4672),
- ('uint16.tif', 4672),
- ('int32.tif', 4672),
- ('uint32.tif', 4672),
- ('float32.tif', 4672),
- ('float64.tif', 4672),
- ('cfloat32.tif', 5028),
- ('cfloat64.tif', 5028),
- ('utmsmall.tif', 50054)]
+ ("byte.tif", 4672),
+ ("int16.tif", 4672),
+ ("uint16.tif", 4672),
+ ("int32.tif", 4672),
+ ("uint32.tif", 4672),
+ ("float32.tif", 4672),
+ ("float64.tif", 4672),
+ ("cfloat32.tif", 5028),
+ ("cfloat64.tif", 5028),
+ ("utmsmall.tif", 50054),
+]
# full set of tests for normal mode.
+
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- 'testSetGeoTransform',
- 'testSetMetadata',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ "testSetGeoTransform",
+ "testSetMetadata",
+ ],
)
-@pytest.mark.require_driver('HFA')
+@pytest.mark.require_driver("HFA")
def test_hfa_create_normal(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('HFA', filename, 1, checksum)
+ ut = gdaltest.GDALTest("HFA", filename, 1, checksum)
getattr(ut, testfunction)()
# Just a few for spill file, and compressed support.
-short_list = [
- ('byte.tif', 4672),
- ('uint16.tif', 4672),
- ('float64.tif', 4672)]
+short_list = [("byte.tif", 4672), ("uint16.tif", 4672), ("float64.tif", 4672)]
+
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
short_list,
- ids=[tup[0].split('.')[0] for tup in short_list],
+ ids=[tup[0].split(".")[0] for tup in short_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ ],
)
-@pytest.mark.require_driver('HFA')
+@pytest.mark.require_driver("HFA")
def test_hfa_create_spill(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('HFA', filename, 1, checksum, options=['USE_SPILL=YES'])
+ ut = gdaltest.GDALTest("HFA", filename, 1, checksum, options=["USE_SPILL=YES"])
getattr(ut, testfunction)()
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
short_list,
- ids=[tup[0].split('.')[0] for tup in short_list],
+ ids=[tup[0].split(".")[0] for tup in short_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
+ "testfunction",
+ [
# 'testCreateCopy',
- 'testCreate',
- ]
+ "testCreate",
+ ],
)
-@pytest.mark.require_driver('HFA')
+@pytest.mark.require_driver("HFA")
def test_hfa_create_compress(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('HFA', filename, 1, checksum, options=['COMPRESS=YES'])
+ ut = gdaltest.GDALTest("HFA", filename, 1, checksum, options=["COMPRESS=YES"])
getattr(ut, testfunction)()
def test_hfa_create_compress_big_block():
- src_ds = gdal.GetDriverByName('MEM').Create('/vsimem/big_block.img', 128, 128, 1, gdal.GDT_UInt32)
+ src_ds = gdal.GetDriverByName("MEM").Create(
+ "/vsimem/big_block.img", 128, 128, 1, gdal.GDT_UInt32
+ )
src_ds.GetRasterBand(1).Fill(4 * 1000 * 1000 * 1000)
- src_ds.GetRasterBand(1).WriteRaster(0,0,1,1,b'\0')
- gdal.GetDriverByName('HFA').CreateCopy('/vsimem/big_block.img', src_ds, options=['COMPRESS=YES', 'BLOCKSIZE=128'])
- ds = gdal.Open('/vsimem/big_block.img')
+ src_ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, b"\0")
+ gdal.GetDriverByName("HFA").CreateCopy(
+ "/vsimem/big_block.img", src_ds, options=["COMPRESS=YES", "BLOCKSIZE=128"]
+ )
+ ds = gdal.Open("/vsimem/big_block.img")
got_data = ds.GetRasterBand(1).ReadRaster()
ds = None
- gdal.Unlink('/vsimem/big_block.img')
+ gdal.Unlink("/vsimem/big_block.img")
assert got_data == src_ds.GetRasterBand(1).ReadRaster()
# GCPs go to PAM currently
def test_hfa_create_gcp():
- filename = '/vsimem/test.img'
- ds = gdal.GetDriverByName('HFA').Create(filename, 1, 1)
+ filename = "/vsimem/test.img"
+ ds = gdal.GetDriverByName("HFA").Create(filename, 1, 1)
gcp1 = gdal.GCP()
gcp1.GCPPixel = 0
gcp1.GCPLine = 0
@@ -441,11 +533,11 @@ def test_hfa_create_gcp():
gcp1.GCPY = 3751320.000
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
- assert ds.SetGCPs((gcp1, ), sr.ExportToWkt()) == gdal.CE_None
+ assert ds.SetGCPs((gcp1,), sr.ExportToWkt()) == gdal.CE_None
ds = None
ds = gdal.Open(filename)
assert ds.GetGCPCount() == 1
assert ds.GetGCPSpatialRef() is not None
assert len(ds.GetGCPs()) == 1
ds = None
- gdal.GetDriverByName('HFA').Delete(filename)
+ gdal.GetDriverByName("HFA").Delete(filename)
diff --git a/autotest/gcore/histogram.py b/autotest/gcore/histogram.py
index af1b05384d9c..c53927ca10e6 100755
--- a/autotest/gcore/histogram.py
+++ b/autotest/gcore/histogram.py
@@ -35,24 +35,281 @@
import struct
import sys
-
-from osgeo import gdal
-
import gdaltest
import pytest
+from osgeo import gdal
+
###############################################################################
# Fetch simple histogram.
def test_histogram_1():
- ds = gdal.Open('data/utmsmall.tif')
+ ds = gdal.Open("data/utmsmall.tif")
hist = ds.GetRasterBand(1).GetHistogram()
- exp_hist = [2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 824]
+ exp_hist = [
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 8,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 23,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 29,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 46,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 69,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 99,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 120,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 178,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 193,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 212,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 281,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 365,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 460,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 533,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 544,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 626,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 653,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 673,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 629,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 586,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 541,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 435,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 348,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 341,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 284,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 225,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 237,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 172,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 159,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 105,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 824,
+ ]
+
+ assert hist == exp_hist, "did not get expected histogram."
- assert hist == exp_hist, 'did not get expected histogram.'
###############################################################################
# Fetch histogram with specified sampling, using keywords.
@@ -60,12 +317,30 @@ def test_histogram_1():
def test_histogram_2():
- ds = gdal.Open('data/utmsmall.tif')
+ ds = gdal.Open("data/utmsmall.tif")
hist = ds.GetRasterBand(1).GetHistogram(buckets=16, max=255.5, min=-0.5)
- exp_hist = [10, 52, 115, 219, 371, 493, 825, 1077, 1279, 1302, 1127, 783, 625, 462, 331, 929]
+ exp_hist = [
+ 10,
+ 52,
+ 115,
+ 219,
+ 371,
+ 493,
+ 825,
+ 1077,
+ 1279,
+ 1302,
+ 1127,
+ 783,
+ 625,
+ 462,
+ 331,
+ 929,
+ ]
+
+ assert hist == exp_hist, "did not get expected histogram."
- assert hist == exp_hist, 'did not get expected histogram.'
###############################################################################
# try on a different data type with out of range values included.
@@ -73,14 +348,15 @@ def test_histogram_2():
def test_histogram_3():
- ds = gdal.Open('data/int32_withneg.grd')
- hist = ds.GetRasterBand(1).GetHistogram(buckets=21, max=100, min=-100,
- include_out_of_range=1,
- approx_ok=0)
+ ds = gdal.Open("data/int32_withneg.grd")
+ hist = ds.GetRasterBand(1).GetHistogram(
+ buckets=21, max=100, min=-100, include_out_of_range=1, approx_ok=0
+ )
exp_hist = [0, 0, 0, 0, 0, 1, 0, 1, 1, 3, 3, 2, 0, 5, 3, 4, 0, 1, 1, 2, 3]
- assert hist == exp_hist, 'did not get expected histogram.'
+ assert hist == exp_hist, "did not get expected histogram."
+
###############################################################################
# try on a different data type without out of range values included.
@@ -88,18 +364,19 @@ def test_histogram_3():
def test_histogram_4():
- ds = gdal.Open('data/int32_withneg.grd')
- hist = ds.GetRasterBand(1).GetHistogram(buckets=21, max=100, min=-100,
- include_out_of_range=0,
- approx_ok=0)
+ ds = gdal.Open("data/int32_withneg.grd")
+ hist = ds.GetRasterBand(1).GetHistogram(
+ buckets=21, max=100, min=-100, include_out_of_range=0, approx_ok=0
+ )
exp_hist = [0, 0, 0, 0, 0, 1, 0, 1, 1, 3, 3, 2, 0, 5, 3, 4, 0, 1, 1, 2, 0]
- assert hist == exp_hist, 'did not get expected histogram.'
+ assert hist == exp_hist, "did not get expected histogram."
ds = None
- gdal.Unlink('data/int32_withneg.grd.aux.xml')
+ gdal.Unlink("data/int32_withneg.grd.aux.xml")
+
###############################################################################
# Test GetDefaultHistogram() on the file.
@@ -107,16 +384,279 @@ def test_histogram_4():
def test_histogram_5():
- ds = gdal.Open('data/utmsmall.tif')
+ ds = gdal.Open("data/utmsmall.tif")
hist = ds.GetRasterBand(1).GetDefaultHistogram(force=1)
- exp_hist = (-0.5, 255.5, 256, [2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 824])
-
- assert hist == exp_hist, 'did not get expected histogram.'
+ exp_hist = (
+ -0.5,
+ 255.5,
+ 256,
+ [
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 8,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 23,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 29,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 46,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 69,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 99,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 120,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 178,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 193,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 212,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 281,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 365,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 460,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 533,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 544,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 626,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 653,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 673,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 629,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 586,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 541,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 435,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 348,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 341,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 284,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 225,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 237,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 172,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 159,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 105,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 824,
+ ],
+ )
+
+ assert hist == exp_hist, "did not get expected histogram."
ds = None
- gdal.Unlink('data/utmsmall.tif.aux.xml')
+ gdal.Unlink("data/utmsmall.tif.aux.xml")
+
###############################################################################
# Test GetDefaultHistogram( force = 0 ) on a JPG file (#3304)
@@ -124,12 +664,12 @@ def test_histogram_5():
def test_histogram_6():
- shutil.copy('../gdrivers/data/jpeg/albania.jpg', 'tmp/albania.jpg')
- ds = gdal.Open('tmp/albania.jpg')
+ shutil.copy("../gdrivers/data/jpeg/albania.jpg", "tmp/albania.jpg")
+ ds = gdal.Open("tmp/albania.jpg")
hist = ds.GetRasterBand(1).GetDefaultHistogram(force=0)
- assert hist is None, 'did not get expected histogram.'
+ assert hist is None, "did not get expected histogram."
ds = None
- os.unlink('tmp/albania.jpg')
+ os.unlink("tmp/albania.jpg")
###############################################################################
@@ -138,18 +678,18 @@ def test_histogram_6():
def test_histogram_inf_values():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 1, gdal.GDT_Float64)
- ds.WriteRaster(0, 0, 1, 1, struct.pack('d', math.inf))
- hist = ds.GetRasterBand(1).GetHistogram(buckets=2, min=-0.5, max=1.5,
- include_out_of_range=1,
- approx_ok=0)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 1, gdal.GDT_Float64)
+ ds.WriteRaster(0, 0, 1, 1, struct.pack("d", math.inf))
+ hist = ds.GetRasterBand(1).GetHistogram(
+ buckets=2, min=-0.5, max=1.5, include_out_of_range=1, approx_ok=0
+ )
assert hist == [0, 1]
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 1, gdal.GDT_Float64)
- ds.WriteRaster(0, 0, 1, 1, struct.pack('d', -math.inf))
- hist = ds.GetRasterBand(1).GetHistogram(buckets=2, min=-0.5, max=1.5,
- include_out_of_range=1,
- approx_ok=0)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 1, gdal.GDT_Float64)
+ ds.WriteRaster(0, 0, 1, 1, struct.pack("d", -math.inf))
+ hist = ds.GetRasterBand(1).GetHistogram(
+ buckets=2, min=-0.5, max=1.5, include_out_of_range=1, approx_ok=0
+ )
assert hist == [1, 0]
@@ -159,39 +699,44 @@ def test_histogram_inf_values():
def test_histogram_errors():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
# Invalid bucket count
with pytest.raises(Exception):
- ds.GetRasterBand(1).GetHistogram(buckets=0, min=-0.5, max=1.5,
- include_out_of_range=1,
- approx_ok=0)
+ ds.GetRasterBand(1).GetHistogram(
+ buckets=0, min=-0.5, max=1.5, include_out_of_range=1, approx_ok=0
+ )
###############################################################################
# Test GetHistogram() invalid min max bounds
-@pytest.mark.parametrize('min,max', [[math.nan, 1.5],
- [-math.inf, 1.5],
- [math.inf, 1.5],
- [-0.5,math.nan],
- [-0.5,-math.inf],
- [-0.5,math.inf],
- [-math.inf,math.inf],
- [-sys.float_info.max,sys.float_info.max], # leads to dfScale == 0
- [0,0]])
+@pytest.mark.parametrize(
+ "min,max",
+ [
+ [math.nan, 1.5],
+ [-math.inf, 1.5],
+ [math.inf, 1.5],
+ [-0.5, math.nan],
+ [-0.5, -math.inf],
+ [-0.5, math.inf],
+ [-math.inf, math.inf],
+ [-sys.float_info.max, sys.float_info.max], # leads to dfScale == 0
+ [0, 0],
+ ],
+)
def test_histogram_invalid_min_max(min, max):
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
with gdaltest.error_handler():
gdal.ErrorReset()
- ret = ds.GetRasterBand(1).GetHistogram(buckets=2, min=min, max=max,
- include_out_of_range=1,
- approx_ok=0)
+ ret = ds.GetRasterBand(1).GetHistogram(
+ buckets=2, min=min, max=max, include_out_of_range=1, approx_ok=0
+ )
if (min, max) == (-sys.float_info.max, sys.float_info.max) and ret == [1, 0]:
# Happens on i386 since 2. / (sys.float_info.max - -sys.float_info.max) == 5.56268464626800346e-309
# when using i387 coprocessor (long double)
pass
else:
ret == [0, 0]
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
diff --git a/autotest/gcore/identify.py b/autotest/gcore/identify.py
index d0e1290fc0f1..04546b80d9e6 100755
--- a/autotest/gcore/identify.py
+++ b/autotest/gcore/identify.py
@@ -29,7 +29,6 @@
###############################################################################
-
from osgeo import gdal
###############################################################################
@@ -38,11 +37,13 @@
def test_identify_1():
- file_list = gdal.ReadDir('data')
+ file_list = gdal.ReadDir("data")
+
+ dr = gdal.IdentifyDriver("data/byte.tif", file_list)
+ assert (
+ dr is not None and dr.GetDescription() == "GTiff"
+ ), "Got wrong driver for byte.tif"
- dr = gdal.IdentifyDriver('data/byte.tif', file_list)
- assert dr is not None and dr.GetDescription() == 'GTiff', \
- 'Got wrong driver for byte.tif'
###############################################################################
# Test a file that won't be recognised.
@@ -50,10 +51,11 @@ def test_identify_1():
def test_identify_2():
- file_list = gdal.ReadDir('data')
+ file_list = gdal.ReadDir("data")
+
+ dr = gdal.IdentifyDriver("data/byte.pnm.aux.xml", file_list)
+ assert dr is None, "Got a driver for byte.pnm.aux.xml!"
- dr = gdal.IdentifyDriver('data/byte.pnm.aux.xml', file_list)
- assert dr is None, 'Got a driver for byte.pnm.aux.xml!'
###############################################################################
# Try identify on a directory.
@@ -61,8 +63,9 @@ def test_identify_2():
def test_identify_3():
- dr = gdal.IdentifyDriver('data')
- assert dr is None, 'Got a driver for data directory!'
+ dr = gdal.IdentifyDriver("data")
+ assert dr is None, "Got a driver for data directory!"
+
###############################################################################
# Try IdentifyDriverEx
@@ -70,25 +73,28 @@ def test_identify_3():
def test_identify_4():
- dr = gdal.IdentifyDriverEx('data/byte.tif')
- assert dr is not None and dr.GetDescription() == 'GTiff', \
- 'Got wrong driver for byte.tif'
-
- dr = gdal.IdentifyDriverEx('data/byte.tif', gdal.OF_RASTER)
- assert dr is not None and dr.GetDescription() == 'GTiff', \
- 'Got wrong driver for byte.tif'
-
- dr = gdal.IdentifyDriverEx('data/byte.tif', gdal.OF_VECTOR)
- assert dr is None, 'Got wrong driver for byte.tif'
-
- dr = gdal.IdentifyDriverEx('data/byte.tif', allowed_drivers=['HFA'])
- assert dr is None, 'Got wrong driver for byte.tif'
+ dr = gdal.IdentifyDriverEx("data/byte.tif")
+ assert (
+ dr is not None and dr.GetDescription() == "GTiff"
+ ), "Got wrong driver for byte.tif"
- dr = gdal.IdentifyDriverEx('../gdrivers/data/envi/aea.dat', sibling_files=['aea.dat'])
- assert dr is None, 'Got a driver, which was not expected!'
+ dr = gdal.IdentifyDriverEx("data/byte.tif", gdal.OF_RASTER)
+ assert (
+ dr is not None and dr.GetDescription() == "GTiff"
+ ), "Got wrong driver for byte.tif"
- dr = gdal.IdentifyDriverEx('../gdrivers/data/envi/aea.dat', sibling_files=['aea.dat', 'aea.hdr'])
- assert dr is not None, 'Did not get a driver!'
+ dr = gdal.IdentifyDriverEx("data/byte.tif", gdal.OF_VECTOR)
+ assert dr is None, "Got wrong driver for byte.tif"
+ dr = gdal.IdentifyDriverEx("data/byte.tif", allowed_drivers=["HFA"])
+ assert dr is None, "Got wrong driver for byte.tif"
+ dr = gdal.IdentifyDriverEx(
+ "../gdrivers/data/envi/aea.dat", sibling_files=["aea.dat"]
+ )
+ assert dr is None, "Got a driver, which was not expected!"
+ dr = gdal.IdentifyDriverEx(
+ "../gdrivers/data/envi/aea.dat", sibling_files=["aea.dat", "aea.hdr"]
+ )
+ assert dr is not None, "Did not get a driver!"
diff --git a/autotest/gcore/mask.py b/autotest/gcore/mask.py
index f7ca7b90da42..d0751569da25 100755
--- a/autotest/gcore/mask.py
+++ b/autotest/gcore/mask.py
@@ -31,32 +31,33 @@
import os
-
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
###############################################################################
# Verify the checksum and flags for "all valid" case.
def test_mask_1():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
band = ds.GetRasterBand(1)
assert not band.IsMaskBand()
- assert band.GetMaskFlags() == gdal.GMF_ALL_VALID, 'Did not get expected mask.'
+ assert band.GetMaskFlags() == gdal.GMF_ALL_VALID, "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 4873, 'Got wrong mask checksum'
+ assert cs == 4873, "Got wrong mask checksum"
my_min, my_max, mean, stddev = band.GetMaskBand().ComputeStatistics(0)
- assert (my_min, my_max, mean, stddev) == (255, 255, 255, 0), 'Got wrong mask stats'
+ assert (my_min, my_max, mean, stddev) == (255, 255, 255, 0), "Got wrong mask stats"
+
###############################################################################
# Verify the checksum and flags for "nodata" case.
@@ -64,18 +65,19 @@ def test_mask_1():
def test_mask_2():
- ds = gdal.Open('data/byte.vrt')
+ ds = gdal.Open("data/byte.vrt")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
band = ds.GetRasterBand(1)
assert not band.IsMaskBand()
- assert band.GetMaskFlags() == gdal.GMF_NODATA, 'Did not get expected mask.'
+ assert band.GetMaskFlags() == gdal.GMF_NODATA, "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 4209, 'Got wrong mask checksum'
+ assert cs == 4209, "Got wrong mask checksum"
+
###############################################################################
# Verify the checksum and flags for "alpha" case.
@@ -83,20 +85,21 @@ def test_mask_2():
def test_mask_3():
- ds = gdal.Open('data/stefan_full_rgba.png')
+ ds = gdal.Open("data/stefan_full_rgba.png")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
# Test first mask.
band = ds.GetRasterBand(1)
- assert band.GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET, \
- 'Did not get expected mask.'
+ assert (
+ band.GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 10807, 'Got wrong mask checksum'
+ assert cs == 10807, "Got wrong mask checksum"
# Verify second and third same as first.
@@ -106,16 +109,20 @@ def test_mask_3():
# We have commented the following tests as SWIG >= 1.3.37 is buggy !
# or str(band_2.GetMaskBand()) != str(band.GetMaskBand()) \
# or str(band_3.GetMaskBand()) != str(band.GetMaskBand())
- assert band_2.GetMaskFlags() == band.GetMaskFlags() and band_3.GetMaskFlags() == band.GetMaskFlags(), \
- 'Band 2 or 3 does not seem to match first mask'
+ assert (
+ band_2.GetMaskFlags() == band.GetMaskFlags()
+ and band_3.GetMaskFlags() == band.GetMaskFlags()
+ ), "Band 2 or 3 does not seem to match first mask"
# Verify alpha has no mask.
band = ds.GetRasterBand(4)
- assert band.GetMaskFlags() == gdal.GMF_ALL_VALID, \
- 'Did not get expected mask for alpha.'
+ assert (
+ band.GetMaskFlags() == gdal.GMF_ALL_VALID
+ ), "Did not get expected mask for alpha."
cs = band.GetMaskBand().Checksum()
- assert cs == 36074, 'Got wrong alpha mask checksum'
+ assert cs == 36074, "Got wrong alpha mask checksum"
+
###############################################################################
# Copy a *real* masked dataset, and confirm masks copied properly.
@@ -123,19 +130,20 @@ def test_mask_3():
def test_mask_4():
- src_ds = gdal.Open('../gdrivers/data/jpeg/masked.jpg')
+ src_ds = gdal.Open("../gdrivers/data/jpeg/masked.jpg")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
# NOTE: for now we copy to PNM since it does everything (overviews too)
# externally. Should eventually test with gtiff, hfa.
- drv = gdal.GetDriverByName('PNM')
- ds = drv.CreateCopy('tmp/mask_4.ppm', src_ds)
+ drv = gdal.GetDriverByName("PNM")
+ ds = drv.CreateCopy("tmp/mask_4.ppm", src_ds)
src_ds = None
# confirm we got the custom mask on the copied dataset.
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET, \
- 'did not get expected mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "did not get expected mask flags"
msk = ds.GetRasterBand(1).GetMaskBand()
assert msk.IsMaskBand()
@@ -143,11 +151,12 @@ def test_mask_4():
cs = msk.Checksum()
expected_cs = 770
- assert cs == expected_cs, 'Did not get expected checksum'
+ assert cs == expected_cs, "Did not get expected checksum"
msk = None
ds = None
+
###############################################################################
# Create overviews for masked file, and verify the overviews have proper
# masks built for them.
@@ -156,13 +165,13 @@ def test_mask_4():
def test_mask_5():
# This crashes with libtiff 3.8.2, so skip it
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('BigTIFF') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("BigTIFF") == -1:
pytest.skip()
- ds = gdal.Open('tmp/mask_4.ppm', gdal.GA_Update)
+ ds = gdal.Open("tmp/mask_4.ppm", gdal.GA_Update)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
# So that we instantiate the mask band before.
ds.GetRasterBand(1).GetMaskFlags()
@@ -172,38 +181,39 @@ def test_mask_5():
# confirm mask flags on overview.
ovr = ds.GetRasterBand(1).GetOverview(1)
- assert ovr.GetMaskFlags() == gdal.GMF_PER_DATASET, 'did not get expected mask flags'
+ assert ovr.GetMaskFlags() == gdal.GMF_PER_DATASET, "did not get expected mask flags"
msk = ovr.GetMaskBand()
assert msk.IsMaskBand()
cs = msk.Checksum()
expected_cs = 20505
- assert cs == expected_cs, 'Did not get expected checksum'
+ assert cs == expected_cs, "Did not get expected checksum"
ovr = None
msk = None
ds = None
# Reopen and confirm we still get same results.
- ds = gdal.Open('tmp/mask_4.ppm')
+ ds = gdal.Open("tmp/mask_4.ppm")
# confirm mask flags on overview.
ovr = ds.GetRasterBand(1).GetOverview(1)
- assert ovr.GetMaskFlags() == gdal.GMF_PER_DATASET, 'did not get expected mask flags'
+ assert ovr.GetMaskFlags() == gdal.GMF_PER_DATASET, "did not get expected mask flags"
msk = ovr.GetMaskBand()
assert msk.IsMaskBand()
cs = msk.Checksum()
expected_cs = 20505
- assert cs == expected_cs, 'Did not get expected checksum'
+ assert cs == expected_cs, "Did not get expected checksum"
ovr = None
msk = None
ds = None
- gdal.GetDriverByName('PNM').Delete('tmp/mask_4.ppm')
+ gdal.GetDriverByName("PNM").Delete("tmp/mask_4.ppm")
+
###############################################################################
# Test a TIFF file with 1 band and an embedded mask of 1 bit
@@ -211,18 +221,19 @@ def test_mask_5():
def test_mask_6():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('data/test_with_mask_1bit.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("data/test_with_mask_1bit.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- band = ds.GetRasterBand(1)
+ band = ds.GetRasterBand(1)
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
- assert band.GetMaskBand().IsMaskBand()
+ assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, "Did not get expected mask."
+ assert band.GetMaskBand().IsMaskBand()
+
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 100, "Got wrong mask checksum"
- cs = band.GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong mask checksum'
###############################################################################
# Test a TIFF file with 3 bands and an embedded mask of 1 band of 1 bit
@@ -230,19 +241,22 @@ def test_mask_6():
def test_mask_7():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('data/test3_with_1mask_1bit.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("data/test3_with_1mask_1bit.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- for i in (1, 2, 3):
- band = ds.GetRasterBand(i)
+ for i in (1, 2, 3):
+ band = ds.GetRasterBand(i)
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
- assert band.GetMaskBand().IsMaskBand()
+ assert (
+ band.GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
+ assert band.GetMaskBand().IsMaskBand()
+
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 100, "Got wrong mask checksum"
- cs = band.GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong mask checksum'
###############################################################################
# Test a TIFF file with 1 band and an embedded mask of 8 bit.
@@ -251,17 +265,18 @@ def test_mask_7():
def test_mask_8():
- ds = gdal.Open('data/test_with_mask_8bit.tif')
+ ds = gdal.Open("data/test_with_mask_8bit.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
band = ds.GetRasterBand(1)
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
+ assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 1222, 'Got wrong mask checksum'
+ assert cs == 1222, "Got wrong mask checksum"
+
###############################################################################
# Test a TIFF file with 3 bands with an embedded mask of 1 bit with 3 bands.
@@ -270,18 +285,18 @@ def test_mask_8():
def test_mask_9():
- ds = gdal.Open('data/test3_with_mask_1bit.tif')
+ ds = gdal.Open("data/test3_with_mask_1bit.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
for i in (1, 2, 3):
band = ds.GetRasterBand(i)
- assert band.GetMaskFlags() == 0, 'Did not get expected mask.'
+ assert band.GetMaskFlags() == 0, "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong mask checksum'
+ assert cs == 100, "Got wrong mask checksum"
###############################################################################
@@ -291,18 +306,18 @@ def test_mask_9():
def test_mask_10():
- ds = gdal.Open('data/test3_with_mask_8bit.tif')
+ ds = gdal.Open("data/test3_with_mask_8bit.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
for i in (1, 2, 3):
band = ds.GetRasterBand(i)
- assert band.GetMaskFlags() == 0, 'Did not get expected mask.'
+ assert band.GetMaskFlags() == 0, "Did not get expected mask."
assert band.GetMaskBand().IsMaskBand()
cs = band.GetMaskBand().Checksum()
- assert cs == 1222, 'Got wrong mask checksum'
+ assert cs == 1222, "Got wrong mask checksum"
###############################################################################
@@ -312,73 +327,79 @@ def test_mask_10():
def test_mask_11():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('data/test_with_mask_1bit_and_ovr.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("data/test_with_mask_1bit_and_ovr.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- band = ds.GetRasterBand(1)
- assert not band.IsMaskBand()
+ band = ds.GetRasterBand(1)
+ assert not band.IsMaskBand()
- # Let's fetch the mask
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
- assert band.GetMaskBand().IsMaskBand()
+ # Let's fetch the mask
+ assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, "Did not get expected mask."
+ assert band.GetMaskBand().IsMaskBand()
- cs = band.GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong mask checksum'
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 100, "Got wrong mask checksum"
- # Let's fetch the overview
- band = ds.GetRasterBand(1).GetOverview(0)
- cs = band.Checksum()
- assert cs == 1126, 'Got wrong overview checksum'
+ # Let's fetch the overview
+ band = ds.GetRasterBand(1).GetOverview(0)
+ cs = band.Checksum()
+ assert cs == 1126, "Got wrong overview checksum"
- # Let's fetch the mask of the overview
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
+ # Let's fetch the mask of the overview
+ assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, "Did not get expected mask."
- cs = band.GetMaskBand().Checksum()
- assert cs == 25, 'Got wrong checksum for the mask of the overview'
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 25, "Got wrong checksum for the mask of the overview"
- # Let's fetch the overview of the mask == the mask of the overview
- band = ds.GetRasterBand(1).GetMaskBand().GetOverview(0)
- cs = band.Checksum()
- assert cs == 25, 'Got wrong checksum for the overview of the mask'
+ # Let's fetch the overview of the mask == the mask of the overview
+ band = ds.GetRasterBand(1).GetMaskBand().GetOverview(0)
+ cs = band.Checksum()
+ assert cs == 25, "Got wrong checksum for the overview of the mask"
###############################################################################
# Test a TIFF file with 3 bands, an overview, an embedded mask of 1 bit, and an embedded
# mask for the overview
+
def test_mask_12():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('data/test3_with_mask_1bit_and_ovr.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("data/test3_with_mask_1bit_and_ovr.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- for i in (1, 2, 3):
- band = ds.GetRasterBand(i)
+ for i in (1, 2, 3):
+ band = ds.GetRasterBand(i)
- # Let's fetch the mask
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
+ # Let's fetch the mask
+ assert (
+ band.GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
- cs = band.GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong mask checksum'
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 100, "Got wrong mask checksum"
- # Let's fetch the overview
- band = ds.GetRasterBand(i).GetOverview(0)
- cs = band.Checksum()
- assert cs == 1126, 'Got wrong overview checksum'
+ # Let's fetch the overview
+ band = ds.GetRasterBand(i).GetOverview(0)
+ cs = band.Checksum()
+ assert cs == 1126, "Got wrong overview checksum"
- # Let's fetch the mask of the overview
- assert band.GetMaskFlags() == gdal.GMF_PER_DATASET, 'Did not get expected mask.'
+ # Let's fetch the mask of the overview
+ assert (
+ band.GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
- cs = band.GetMaskBand().Checksum()
- assert cs == 25, 'Got wrong checksum for the mask of the overview'
+ cs = band.GetMaskBand().Checksum()
+ assert cs == 25, "Got wrong checksum for the mask of the overview"
+
+ # Let's fetch the overview of the mask == the mask of the overview
+ band = ds.GetRasterBand(i).GetMaskBand().GetOverview(0)
+ cs = band.Checksum()
+ assert cs == 25, "Got wrong checksum for the overview of the mask"
- # Let's fetch the overview of the mask == the mask of the overview
- band = ds.GetRasterBand(i).GetMaskBand().GetOverview(0)
- cs = band.Checksum()
- assert cs == 25, 'Got wrong checksum for the overview of the mask'
###############################################################################
# Test creation of external TIFF mask band
@@ -386,45 +407,47 @@ def test_mask_12():
def test_mask_13():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.CreateCopy('tmp/byte_with_mask.tif', src_ds)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.CreateCopy("tmp/byte_with_mask.tif", src_ds)
src_ds = None
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
assert ds.GetRasterBand(1).GetMaskBand().IsMaskBand()
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 0, 'Got wrong checksum for the mask'
+ assert cs == 0, "Got wrong checksum for the mask"
ds.GetRasterBand(1).GetMaskBand().Fill(1)
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask'
+ assert cs == 400, "Got wrong checksum for the mask"
ds = None
try:
- os.stat('tmp/byte_with_mask.tif.msk')
+ os.stat("tmp/byte_with_mask.tif.msk")
except OSError:
- pytest.fail('tmp/byte_with_mask.tif.msk is absent')
+ pytest.fail("tmp/byte_with_mask.tif.msk is absent")
- ds = gdal.Open('tmp/byte_with_mask.tif')
+ ds = gdal.Open("tmp/byte_with_mask.tif")
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET, \
- 'wrong mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "wrong mask flags"
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask'
+ assert cs == 400, "Got wrong checksum for the mask"
ds = None
- drv.Delete('tmp/byte_with_mask.tif')
+ drv.Delete("tmp/byte_with_mask.tif")
+
+ assert not os.path.exists("tmp/byte_with_mask.tif.msk")
- assert not os.path.exists('tmp/byte_with_mask.tif.msk')
###############################################################################
# Test creation of internal TIFF mask band
@@ -432,74 +455,78 @@ def test_mask_13():
def test_mask_14():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- drv = gdal.GetDriverByName('GTiff')
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = drv.CreateCopy('tmp/byte_with_mask.tif', src_ds)
+ drv = gdal.GetDriverByName("GTiff")
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = drv.CreateCopy("tmp/byte_with_mask.tif", src_ds)
src_ds = None
# The only flag value supported for internal mask is GMF_PER_DATASET
with gdaltest.error_handler():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ret = ds.CreateMaskBand(0)
- assert ret != 0, 'Error expected'
+ assert ret != 0, "Error expected"
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ret = ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- assert ret == 0, 'Creation failed'
+ assert ret == 0, "Creation failed"
assert ds.GetRasterBand(1).GetMaskBand().IsMaskBand()
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 0, 'Got wrong checksum for the mask (1)'
+ assert cs == 0, "Got wrong checksum for the mask (1)"
ds.GetRasterBand(1).GetMaskBand().Fill(1)
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask (2)'
+ assert cs == 400, "Got wrong checksum for the mask (2)"
# This TIFF dataset has already an internal mask band
with gdaltest.error_handler():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ret = ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- assert ret != 0, 'Error expected'
+ assert ret != 0, "Error expected"
# This TIFF dataset has already an internal mask band
with gdaltest.error_handler():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ret = ds.GetRasterBand(1).CreateMaskBand(gdal.GMF_PER_DATASET)
- assert ret != 0, 'Error expected'
+ assert ret != 0, "Error expected"
ds = None
- assert not os.path.exists('tmp/byte_with_mask.tif.msk')
+ assert not os.path.exists("tmp/byte_with_mask.tif.msk")
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('tmp/byte_with_mask.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("tmp/byte_with_mask.tif")
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET, \
- 'wrong mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "wrong mask flags"
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask (3)'
+ assert cs == 400, "Got wrong checksum for the mask (3)"
# Test fix for #5884
old_val = gdal.GetCacheMax()
gdal.SetCacheMax(0)
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- out_ds = drv.CreateCopy('/vsimem/byte_with_mask.tif', ds, options=['COMPRESS=JPEG'])
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ out_ds = drv.CreateCopy(
+ "/vsimem/byte_with_mask.tif", ds, options=["COMPRESS=JPEG"]
+ )
gdal.SetCacheMax(old_val)
assert out_ds.GetRasterBand(1).Checksum() != 0
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask (4)'
+ assert cs == 400, "Got wrong checksum for the mask (4)"
out_ds = None
- drv.Delete('/vsimem/byte_with_mask.tif')
+ drv.Delete("/vsimem/byte_with_mask.tif")
ds = None
- drv.Delete('tmp/byte_with_mask.tif')
+ drv.Delete("tmp/byte_with_mask.tif")
+
###############################################################################
# Test creation of internal TIFF overview, mask band and mask band of overview
@@ -507,101 +534,103 @@ def test_mask_14():
def mask_and_ovr(order, method):
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.CreateCopy('tmp/byte_with_ovr_and_mask.tif', src_ds)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.CreateCopy("tmp/byte_with_ovr_and_mask.tif", src_ds)
src_ds = None
if order == 1:
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
ds.BuildOverviews(method, overviewlist=[2, 4])
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ds.GetRasterBand(1).GetOverview(0).CreateMaskBand(gdal.GMF_PER_DATASET)
ds.GetRasterBand(1).GetOverview(1).CreateMaskBand(gdal.GMF_PER_DATASET)
elif order == 2:
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds.BuildOverviews(method, overviewlist=[2, 4])
- ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- ds.GetRasterBand(1).GetOverview(0).CreateMaskBand(gdal.GMF_PER_DATASET)
- ds.GetRasterBand(1).GetOverview(1).CreateMaskBand(gdal.GMF_PER_DATASET)
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds.BuildOverviews(method, overviewlist=[2, 4])
+ ds.CreateMaskBand(gdal.GMF_PER_DATASET)
+ ds.GetRasterBand(1).GetOverview(0).CreateMaskBand(gdal.GMF_PER_DATASET)
+ ds.GetRasterBand(1).GetOverview(1).CreateMaskBand(gdal.GMF_PER_DATASET)
elif order == 3:
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds.BuildOverviews(method, overviewlist=[2, 4])
- ds.GetRasterBand(1).GetOverview(0).CreateMaskBand(gdal.GMF_PER_DATASET)
- ds.GetRasterBand(1).GetOverview(1).CreateMaskBand(gdal.GMF_PER_DATASET)
- ds.CreateMaskBand(gdal.GMF_PER_DATASET)
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds.BuildOverviews(method, overviewlist=[2, 4])
+ ds.GetRasterBand(1).GetOverview(0).CreateMaskBand(gdal.GMF_PER_DATASET)
+ ds.GetRasterBand(1).GetOverview(1).CreateMaskBand(gdal.GMF_PER_DATASET)
+ ds.CreateMaskBand(gdal.GMF_PER_DATASET)
elif order == 4:
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- ds.GetRasterBand(1).GetMaskBand().Fill(1)
- # The overview for the mask will be implicitly created and computed.
- ds.BuildOverviews(method, overviewlist=[2, 4])
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds.CreateMaskBand(gdal.GMF_PER_DATASET)
+ ds.GetRasterBand(1).GetMaskBand().Fill(1)
+ # The overview for the mask will be implicitly created and computed.
+ ds.BuildOverviews(method, overviewlist=[2, 4])
if order < 4:
ds = None
- ds = gdal.Open('tmp/byte_with_ovr_and_mask.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/byte_with_ovr_and_mask.tif", gdal.GA_Update)
ds.GetRasterBand(1).GetMaskBand().Fill(1)
# The overview of the mask will be implicitly recomputed.
ds.BuildOverviews(method, overviewlist=[2, 4])
ds = None
- assert not os.path.exists('tmp/byte_with_ovr_and_mask.tif.msk')
+ assert not os.path.exists("tmp/byte_with_ovr_and_mask.tif.msk")
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK_TO_8BIT', 'FALSE'):
- ds = gdal.Open('tmp/byte_with_ovr_and_mask.tif')
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK_TO_8BIT", "FALSE"):
+ ds = gdal.Open("tmp/byte_with_ovr_and_mask.tif")
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET, \
- 'wrong mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "wrong mask flags"
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask'
+ assert cs == 400, "Got wrong checksum for the mask"
cs = ds.GetRasterBand(1).GetOverview(0).GetMaskBand().Checksum()
- assert cs == 100, 'Got wrong checksum for the mask of the first overview'
+ assert cs == 100, "Got wrong checksum for the mask of the first overview"
cs = ds.GetRasterBand(1).GetOverview(1).GetMaskBand().Checksum()
- assert cs == 25, 'Got wrong checksum for the mask of the second overview'
+ assert cs == 25, "Got wrong checksum for the mask of the second overview"
ds = None
- drv.Delete('tmp/byte_with_ovr_and_mask.tif')
+ drv.Delete("tmp/byte_with_ovr_and_mask.tif")
def test_mask_15():
- return mask_and_ovr(1, 'NEAREST')
+ return mask_and_ovr(1, "NEAREST")
def test_mask_16():
- return mask_and_ovr(2, 'NEAREST')
+ return mask_and_ovr(2, "NEAREST")
def test_mask_17():
- return mask_and_ovr(3, 'NEAREST')
+ return mask_and_ovr(3, "NEAREST")
def test_mask_18():
- return mask_and_ovr(4, 'NEAREST')
+ return mask_and_ovr(4, "NEAREST")
def test_mask_15_avg():
- return mask_and_ovr(1, 'AVERAGE')
+ return mask_and_ovr(1, "AVERAGE")
def test_mask_16_avg():
- return mask_and_ovr(2, 'AVERAGE')
+ return mask_and_ovr(2, "AVERAGE")
def test_mask_17_avg():
- return mask_and_ovr(3, 'AVERAGE')
+ return mask_and_ovr(3, "AVERAGE")
def test_mask_18_avg():
- return mask_and_ovr(4, 'AVERAGE')
+ return mask_and_ovr(4, "AVERAGE")
+
###############################################################################
# Test NODATA_VALUES mask
@@ -609,50 +638,63 @@ def test_mask_18_avg():
def test_mask_19():
- ds = gdal.Open('data/test_nodatavalues.tif')
+ ds = gdal.Open("data/test_nodatavalues.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET + gdal.GMF_NODATA, \
- 'did not get expected mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET + gdal.GMF_NODATA
+ ), "did not get expected mask flags"
msk = ds.GetRasterBand(1).GetMaskBand()
cs = msk.Checksum()
expected_cs = 11043
- assert cs == expected_cs, 'Did not get expected checksum'
+ assert cs == expected_cs, "Did not get expected checksum"
msk = None
ds = None
+
###############################################################################
# Extensive test of nodata mask for all data types
def test_mask_20():
- types = [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16,
- gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64,
- gdal.GDT_CFloat32, gdal.GDT_CFloat64]
+ types = [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ]
nodatavalue = [1, -1, 1, -1, 1, 0.5, 0.5, 0.5, 0.5]
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
for i, typ in enumerate(types):
- ds = drv.Create('tmp/mask20.tif', 1, 1, 1, typ)
+ ds = drv.Create("tmp/mask20.tif", 1, 1, 1, typ)
ds.GetRasterBand(1).Fill(nodatavalue[i])
ds.GetRasterBand(1).SetNoDataValue(nodatavalue[i])
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_NODATA, \
- ('did not get expected mask flags for type %s' % gdal.GetDataTypeName(typ))
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_NODATA
+ ), "did not get expected mask flags for type %s" % gdal.GetDataTypeName(typ)
msk = ds.GetRasterBand(1).GetMaskBand()
- assert msk.Checksum() == 0, \
- ('did not get expected mask checksum for type %s : %d' % gdal.GetDataTypeName(typ, msk.Checksum()))
+ assert msk.Checksum() == 0, (
+ "did not get expected mask checksum for type %s : %d"
+ % gdal.GetDataTypeName(typ, msk.Checksum())
+ )
msk = None
ds = None
- drv.Delete('tmp/mask20.tif')
+ drv.Delete("tmp/mask20.tif")
###############################################################################
@@ -661,32 +703,47 @@ def test_mask_20():
def test_mask_21():
- types = [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16,
- gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64,
- gdal.GDT_CFloat32, gdal.GDT_CFloat64]
+ types = [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ]
nodatavalue = [1, -1, 1, -1, 1, 0.5, 0.5, 0.5, 0.5]
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
for i, typ in enumerate(types):
- ds = drv.Create('tmp/mask21.tif', 1, 1, 3, typ)
+ ds = drv.Create("tmp/mask21.tif", 1, 1, 3, typ)
md = {}
- md['NODATA_VALUES'] = '%f %f %f' % (nodatavalue[i], nodatavalue[i], nodatavalue[i])
+ md["NODATA_VALUES"] = "%f %f %f" % (
+ nodatavalue[i],
+ nodatavalue[i],
+ nodatavalue[i],
+ )
ds.SetMetadata(md)
ds.GetRasterBand(1).Fill(nodatavalue[i])
ds.GetRasterBand(2).Fill(nodatavalue[i])
ds.GetRasterBand(3).Fill(nodatavalue[i])
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET + gdal.GMF_NODATA, \
- ('did not get expected mask flags for type %s' % gdal.GetDataTypeName(typ))
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET + gdal.GMF_NODATA
+ ), "did not get expected mask flags for type %s" % gdal.GetDataTypeName(typ)
msk = ds.GetRasterBand(1).GetMaskBand()
- assert msk.Checksum() == 0, \
- ('did not get expected mask checksum for type %s : %d' % gdal.GetDataTypeName(typ, msk.Checksum()))
+ assert msk.Checksum() == 0, (
+ "did not get expected mask checksum for type %s : %d"
+ % gdal.GetDataTypeName(typ, msk.Checksum())
+ )
msk = None
ds = None
- drv.Delete('tmp/mask21.tif')
+ drv.Delete("tmp/mask21.tif")
###############################################################################
@@ -695,38 +752,39 @@ def test_mask_21():
def test_mask_22():
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.Create('tmp/mask_22.tif', 20, 20)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.Create("tmp/mask_22.tif", 20, 20)
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 0, 'Got wrong checksum for the mask'
+ assert cs == 0, "Got wrong checksum for the mask"
ds.GetRasterBand(1).GetMaskBand().Fill(1)
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask'
+ assert cs == 400, "Got wrong checksum for the mask"
ds = None
try:
- os.stat('tmp/mask_22.tif.msk')
+ os.stat("tmp/mask_22.tif.msk")
except OSError:
- pytest.fail('tmp/mask_22.tif.msk is absent')
+ pytest.fail("tmp/mask_22.tif.msk is absent")
- ds = gdal.Open('tmp/mask_22.tif')
+ ds = gdal.Open("tmp/mask_22.tif")
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET, \
- 'wrong mask flags'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
+ ), "wrong mask flags"
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
- assert cs == 400, 'Got wrong checksum for the mask'
+ assert cs == 400, "Got wrong checksum for the mask"
ds = None
- drv.Delete('tmp/mask_22.tif')
+ drv.Delete("tmp/mask_22.tif")
- assert not os.path.exists('tmp/mask_22.tif.msk')
+ assert not os.path.exists("tmp/mask_22.tif.msk")
###############################################################################
@@ -736,30 +794,35 @@ def test_mask_22():
def test_mask_23():
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
md = drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = drv.Create('tmp/mask_23_src.tif', 3000, 2000, 3, options=['TILED=YES', 'SPARSE_OK=YES'])
+ src_ds = drv.Create(
+ "tmp/mask_23_src.tif", 3000, 2000, 3, options=["TILED=YES", "SPARSE_OK=YES"]
+ )
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
old_val = gdal.GetCacheMax()
gdal.SetCacheMax(15000000)
gdal.ErrorReset()
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds = drv.CreateCopy('tmp/mask_23_dst.tif', src_ds, options=['TILED=YES', 'COMPRESS=JPEG'])
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds = drv.CreateCopy(
+ "tmp/mask_23_dst.tif", src_ds, options=["TILED=YES", "COMPRESS=JPEG"]
+ )
gdal.SetCacheMax(old_val)
del ds
error_msg = gdal.GetLastErrorMsg()
src_ds = None
- drv.Delete('tmp/mask_23_src.tif')
- drv.Delete('tmp/mask_23_dst.tif')
+ drv.Delete("tmp/mask_23_src.tif")
+ drv.Delete("tmp/mask_23_dst.tif")
# 'ERROR 1: TIFFRewriteDirectory:Error fetching directory count' was triggered before
- assert error_msg == ''
+ assert error_msg == ""
+
###############################################################################
# Test on a GDT_UInt16 RGBA (#5692)
@@ -767,33 +830,42 @@ def test_mask_23():
def test_mask_24():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_24.tif', 100, 100, 4,
- gdal.GDT_UInt16, options=['PHOTOMETRIC=RGB', 'ALPHA=YES'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/mask_24.tif",
+ 100,
+ 100,
+ 4,
+ gdal.GDT_UInt16,
+ options=["PHOTOMETRIC=RGB", "ALPHA=YES"],
+ )
ds.GetRasterBand(1).Fill(65565)
ds.GetRasterBand(2).Fill(65565)
ds.GetRasterBand(3).Fill(65565)
ds.GetRasterBand(4).Fill(65565)
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET, \
- 'Did not get expected mask.'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
mask = ds.GetRasterBand(1).GetMaskBand()
# IRasterIO() optimized case
import struct
- assert struct.unpack('B', mask.ReadRaster(0, 0, 1, 1))[0] == 255
+
+ assert struct.unpack("B", mask.ReadRaster(0, 0, 1, 1))[0] == 255
# IReadBlock() code path
(blockx, blocky) = mask.GetBlockSize()
- assert struct.unpack('B' * blockx * blocky, mask.ReadBlock(0, 0))[0] == 255
+ assert struct.unpack("B" * blockx * blocky, mask.ReadBlock(0, 0))[0] == 255
mask.FlushCache()
# Test special case where dynamics is only 0-255
ds.GetRasterBand(4).Fill(255)
- assert struct.unpack('B', mask.ReadRaster(0, 0, 1, 1))[0] == 1
+ assert struct.unpack("B", mask.ReadRaster(0, 0, 1, 1))[0] == 1
ds = None
- gdal.Unlink('/vsimem/mask_24.tif')
+ gdal.Unlink("/vsimem/mask_24.tif")
+
###############################################################################
# Test various error conditions
@@ -801,56 +873,56 @@ def test_mask_24():
def test_mask_25():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif", 1, 1)
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALL_VALID
ds = None
# No INTERNAL_MASK_FLAGS_x metadata
- gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif.msk', 1, 1)
- ds = gdal.Open('/vsimem/mask_25.tif')
+ gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif.msk", 1, 1)
+ ds = gdal.Open("/vsimem/mask_25.tif")
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALL_VALID
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
assert cs == 3
ds = None
- gdal.Unlink('/vsimem/mask_25.tif')
- gdal.Unlink('/vsimem/mask_25.tif.msk')
+ gdal.Unlink("/vsimem/mask_25.tif")
+ gdal.Unlink("/vsimem/mask_25.tif.msk")
# Per-band mask
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif", 1, 1)
ds.GetRasterBand(1).CreateMaskBand(0)
ds = None
- ds = gdal.Open('/vsimem/mask_25.tif')
+ ds = gdal.Open("/vsimem/mask_25.tif")
assert ds.GetRasterBand(1).GetMaskFlags() == 0
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
assert cs == 0
ds = None
- gdal.Unlink('/vsimem/mask_25.tif')
- gdal.Unlink('/vsimem/mask_25.tif.msk')
+ gdal.Unlink("/vsimem/mask_25.tif")
+ gdal.Unlink("/vsimem/mask_25.tif.msk")
# .msk file does not have enough bands
- gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif', 1, 1, 2)
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif.msk', 1, 1)
- ds.SetMetadataItem('INTERNAL_MASK_FLAGS_2', '0')
+ gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif", 1, 1, 2)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif.msk", 1, 1)
+ ds.SetMetadataItem("INTERNAL_MASK_FLAGS_2", "0")
ds = None
- ds = gdal.Open('/vsimem/mask_25.tif')
+ ds = gdal.Open("/vsimem/mask_25.tif")
with gdaltest.error_handler():
assert ds.GetRasterBand(2).GetMaskFlags() == gdal.GMF_ALL_VALID
ds = None
- gdal.Unlink('/vsimem/mask_25.tif')
- gdal.Unlink('/vsimem/mask_25.tif.msk')
+ gdal.Unlink("/vsimem/mask_25.tif")
+ gdal.Unlink("/vsimem/mask_25.tif.msk")
# Invalid sequences of CreateMaskBand() calls
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_25.tif', 1, 1, 2)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/mask_25.tif", 1, 1, 2)
ds.GetRasterBand(1).CreateMaskBand(gdal.GMF_PER_DATASET)
with gdaltest.error_handler():
assert ds.GetRasterBand(2).CreateMaskBand(0) != 0
ds = None
- gdal.Unlink('/vsimem/mask_25.tif')
- gdal.Unlink('/vsimem/mask_25.tif.msk')
+ gdal.Unlink("/vsimem/mask_25.tif")
+ gdal.Unlink("/vsimem/mask_25.tif.msk")
# CreateMaskBand not supported by this dataset
with gdaltest.error_handler():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
ds.CreateMaskBand(0)
@@ -860,22 +932,26 @@ def test_mask_25():
def test_mask_26():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/mask_26.tif', 100, 100, 2,
- gdal.GDT_UInt16, options=['ALPHA=YES'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/mask_26.tif", 100, 100, 2, gdal.GDT_UInt16, options=["ALPHA=YES"]
+ )
ds.GetRasterBand(1).Fill(65565)
ds.GetRasterBand(2).Fill(65565)
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET, \
- 'Did not get expected mask.'
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALPHA + gdal.GMF_PER_DATASET
+ ), "Did not get expected mask."
mask = ds.GetRasterBand(1).GetMaskBand()
# IRasterIO() optimized case
import struct
- assert struct.unpack('B', mask.ReadRaster(0, 0, 1, 1))[0] == 255
+
+ assert struct.unpack("B", mask.ReadRaster(0, 0, 1, 1))[0] == 255
ds = None
- gdal.Unlink('/vsimem/mask_26.tif')
+ gdal.Unlink("/vsimem/mask_26.tif")
+
###############################################################################
# Cleanup.
@@ -891,25 +967,26 @@ def test_mask_27():
nodatavalue = [0.5, 0.5]
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
for i, typ in enumerate(types):
- ds = drv.Create('tmp/mask27.tif', 1, 1, 1, typ)
+ ds = drv.Create("tmp/mask27.tif", 1, 1, 1, typ)
ds.GetRasterBand(1).Fill(nodatavalue[i], 10)
ds.GetRasterBand(1).SetNoDataValue(nodatavalue[i])
- assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_NODATA, \
- ('did not get expected mask flags for type %s' % gdal.GetDataTypeName(typ))
+ assert (
+ ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_NODATA
+ ), "did not get expected mask flags for type %s" % gdal.GetDataTypeName(typ)
msk = ds.GetRasterBand(1).GetMaskBand()
- assert msk.Checksum() == 0, \
- ('did not get expected mask checksum for type %s : %d' % gdal.GetDataTypeName(typ, msk.Checksum()))
+ assert msk.Checksum() == 0, (
+ "did not get expected mask checksum for type %s : %d"
+ % gdal.GetDataTypeName(typ, msk.Checksum())
+ )
msk = None
ds = None
- drv.Delete('tmp/mask27.tif')
+ drv.Delete("tmp/mask27.tif")
###############################################################################
# Extensive test of real NODATA_VALUES mask for all complex types
-
-
diff --git a/autotest/gcore/minixml.py b/autotest/gcore/minixml.py
index 7e84c43841dd..a3fdc534ba8b 100755
--- a/autotest/gcore/minixml.py
+++ b/autotest/gcore/minixml.py
@@ -30,8 +30,8 @@
###############################################################################
-
import gdaltest
+
from osgeo import gdal
###############################################################################
@@ -42,42 +42,43 @@ def test_minixml_1():
tree = gdal.ParseXMLString('abc')
- assert tree[0] == gdal.CXT_Element, 'wrong node type.'
+ assert tree[0] == gdal.CXT_Element, "wrong node type."
- assert tree[1] == 'TestDoc', 'Wrong element name'
+ assert tree[1] == "TestDoc", "Wrong element name"
- assert len(tree) == 5, 'Wrong number of children.'
+ assert len(tree) == 5, "Wrong number of children."
# Check style attribute
node = tree[2]
- assert node[0] == gdal.CXT_Attribute, 'wrong node type.'
+ assert node[0] == gdal.CXT_Attribute, "wrong node type."
- assert node[1] == 'style', 'Wrong element name'
+ assert node[1] == "style", "Wrong element name"
- assert len(node) == 3, 'Wrong number of children.'
+ assert len(node) == 3, "Wrong number of children."
- assert node[2][1] == '123', 'Wrong element content.'
+ assert node[2][1] == "123", "Wrong element content."
# Check element
node = tree[3]
- assert node[0] == gdal.CXT_Element, 'wrong node type.'
+ assert node[0] == gdal.CXT_Element, "wrong node type."
- assert node[1] == 'sub1', 'Wrong element name'
+ assert node[1] == "sub1", "Wrong element name"
- assert len(node) == 2, 'Wrong number of children.'
+ assert len(node) == 2, "Wrong number of children."
# Check element
node = tree[4]
- assert node[0] == gdal.CXT_Element, 'wrong node type.'
+ assert node[0] == gdal.CXT_Element, "wrong node type."
+
+ assert node[1] == "sub2", "Wrong element name"
- assert node[1] == 'sub2', 'Wrong element name'
+ assert len(node) == 3, "Wrong number of children."
- assert len(node) == 3, 'Wrong number of children.'
+ assert node[2][1] == "abc", "Wrong element content."
- assert node[2][1] == 'abc', 'Wrong element content.'
###############################################################################
# Serialize an XML Tree
@@ -85,10 +86,17 @@ def test_minixml_1():
def test_minixml_2():
- tree = [0, 'TestDoc', [2, 'style', [1, '123']], [0, 'sub1'], [0, 'sub2', [1, 'abc']]]
+ tree = [
+ 0,
+ "TestDoc",
+ [2, "style", [1, "123"]],
+ [0, "sub1"],
+ [0, "sub2", [1, "abc"]],
+ ]
doc_target = '\n \n abc\n\n'
doc_got = gdal.SerializeXMLTree(tree)
- assert doc_got == doc_target, 'serialize xml tree failed.'
+ assert doc_got == doc_target, "serialize xml tree failed."
+
###############################################################################
# Read XML document with complex DOCTYPE element.
@@ -96,40 +104,41 @@ def test_minixml_2():
def test_minixml_3():
- fp = open('data/doctype.xml', 'r')
+ fp = open("data/doctype.xml", "r")
text = fp.read()
tree = gdal.ParseXMLString(text)
- assert tree[0] == gdal.CXT_Element, 'wrong node type.'
+ assert tree[0] == gdal.CXT_Element, "wrong node type."
# Check element
node = tree[6]
- assert node[0] == gdal.CXT_Element, 'wrong node type.'
+ assert node[0] == gdal.CXT_Element, "wrong node type."
- assert node[1] == 'chapter', 'Wrong element name'
+ assert node[1] == "chapter", "Wrong element name"
- assert len(node) == 7, 'Wrong number of children.'
+ assert len(node) == 7, "Wrong number of children."
# Check subelement
subnode = node[2]
- assert subnode[0] == gdal.CXT_Element, 'wrong node type.'
+ assert subnode[0] == gdal.CXT_Element, "wrong node type."
- assert subnode[1] == 'title', 'Wrong element name'
+ assert subnode[1] == "title", "Wrong element name"
- assert len(subnode) == 3, 'Wrong number of children.'
+ assert len(subnode) == 3, "Wrong number of children."
- assert subnode[2][1] == 'Chapter 1', 'Wrong element content.'
+ assert subnode[2][1] == "Chapter 1", "Wrong element content."
# Check fist subelement
subnode = node[3]
- assert subnode[0] == gdal.CXT_Element, 'wrong node type.'
+ assert subnode[0] == gdal.CXT_Element, "wrong node type."
+
+ assert subnode[1] == "para", "Wrong element name"
- assert subnode[1] == 'para', 'Wrong element name'
+ assert len(subnode) == 3, "Wrong number of children."
- assert len(subnode) == 3, 'Wrong number of children.'
###############################################################################
# Parse and serialize an XML Tree with a prolog
@@ -139,7 +148,8 @@ def test_minixml_4():
xml = """\n\n"""
got_xml = gdal.SerializeXMLTree(gdal.ParseXMLString(xml))
- assert xml == got_xml, 'serialize xml tree failed.'
+ assert xml == got_xml, "serialize xml tree failed."
+
###############################################################################
# Parse malformed XML. Complains, but still makes a tree.
@@ -148,8 +158,8 @@ def test_minixml_4():
def test_minixml_5():
test_pairs = (
- ('', 'case'),
- ('', 'quoted'),
+ ("", "case"),
+ ("", "quoted"),
)
for xml_str, expect in test_pairs:
@@ -157,11 +167,13 @@ def test_minixml_5():
tree = gdal.ParseXMLString(xml_str)
found = gdal.GetLastErrorMsg()
- assert expect in found, ('Did not find expected error message: "%s" '
- 'Found: "%s" '
- 'For test string: "%s""' % (expect, found, xml_str))
+ assert expect in found, (
+ 'Did not find expected error message: "%s" '
+ 'Found: "%s" '
+ 'For test string: "%s""' % (expect, found, xml_str)
+ )
- assert tree is not None, ('Tree is None: "%s"' % tree)
+ assert tree is not None, 'Tree is None: "%s"' % tree
###############################################################################
@@ -171,18 +183,18 @@ def test_minixml_5():
def test_minixml_6():
test_pairs = (
- ('<', 'element token after open angle bracket'),
- ('', 'not all elements have been closed'),
- ('', 'not all elements have been closed'),
- ('', 'have matching'),
- ('', 'attribute value'),
- ('<>>', 'element token'),
- ('<&>&>', 'matching'),
- (' foo=2\'>', 'unexpected token'),
- ('', 'without matching'),
- ('', 'reached EOF before closing quote'),
+ ("<", "element token after open angle bracket"),
+ ("", "not all elements have been closed"),
+ ("", "not all elements have been closed"),
+ ("", "have matching"),
+ ("", "attribute value"),
+ ("<>>", "element token"),
+ ("<&>&>", "matching"),
+ (" foo=2'>", "unexpected token"),
+ ("", "without matching"),
+ ("", "reached EOF before closing quote"),
)
for xml_str, expect in test_pairs:
@@ -190,11 +202,13 @@ def test_minixml_6():
tree = gdal.ParseXMLString(xml_str)
found = gdal.GetLastErrorMsg()
- assert expect in found, ('Did not find expected error message: "%s" '
- 'Found: "%s" '
- 'For test string: "%s""' % (expect, found, xml_str))
+ assert expect in found, (
+ 'Did not find expected error message: "%s" '
+ 'Found: "%s" '
+ 'For test string: "%s""' % (expect, found, xml_str)
+ )
- assert tree is None, ('Tree is not None: "%s"' % tree)
+ assert tree is None, 'Tree is not None: "%s"' % tree
###############################################################################
@@ -204,10 +218,10 @@ def test_minixml_6():
def test_minixml_7():
test_strings = (
- '<1>1>',
- '<->->',
- '<.>',
- '1>",
+ "<->->",
+ "<.>",
+ "' * 10001
- xml_str += '' * 10001
+ xml_str = "" * 10001
+ xml_str += "" * 10001
gdal.ErrorReset()
with gdaltest.error_handler():
tree = gdal.ParseXMLString(xml_str)
- assert tree is None, 'expected None tree'
- assert gdal.GetLastErrorMsg() != '', 'expected error message'
+ assert tree is None, "expected None tree"
+ assert gdal.GetLastErrorMsg() != "", "expected error message"
###############################################################################
@@ -244,12 +258,12 @@ def test_minixml_processing_instruction():
xml = """\n\n"""
got_xml = gdal.SerializeXMLTree(gdal.ParseXMLString(xml))
- assert xml == got_xml, 'serialize xml tree failed.'
+ assert xml == got_xml, "serialize xml tree failed."
+
###############################################################################
# Cleanup
+
def test_minixml_cleanup():
pass
-
-
diff --git a/autotest/gcore/misc.py b/autotest/gcore/misc.py
index 9a0798f4c767..03f810cc6c69 100755
--- a/autotest/gcore/misc.py
+++ b/autotest/gcore/misc.py
@@ -31,26 +31,27 @@
import os
import shutil
-from osgeo import gdal
-
import gdaltest
import pytest
+from osgeo import gdal
###############################################################################
# Test that the constructor of GDALDataset() behaves well with a big number of
# opened/created datasets
+
def test_misc_1():
tab_ds = [None] * 5000
- drv = gdal.GetDriverByName('MEM')
+ drv = gdal.GetDriverByName("MEM")
for i, _ in enumerate(tab_ds):
- name = 'mem_%d' % i
+ name = "mem_%d" % i
tab_ds[i] = drv.Create(name, 1, 1, 1)
assert tab_ds[i] is not None
+
###############################################################################
# Test that OpenShared() works as expected by opening a big number of times
# the same dataset with it. If it did not work, that would exhaust the system
@@ -61,7 +62,7 @@ def test_misc_2():
tab_ds = [None for i in range(5000)]
for i, _ in enumerate(tab_ds):
- tab_ds[i] = gdal.OpenShared('data/byte.tif')
+ tab_ds[i] = gdal.OpenShared("data/byte.tif")
assert tab_ds[i] is not None
@@ -72,12 +73,12 @@ def test_misc_2():
def test_misc_3():
with gdaltest.error_handler():
- ds = gdal.OpenShared('../gdrivers/data/paux/small16.aux')
+ ds = gdal.OpenShared("../gdrivers/data/paux/small16.aux")
ds.GetRasterBand(1).Checksum()
cache_size = gdal.GetCacheUsed()
with gdaltest.error_handler():
- ds2 = gdal.OpenShared('../gdrivers/data/paux/small16.aux')
+ ds2 = gdal.OpenShared("../gdrivers/data/paux/small16.aux")
ds2.GetRasterBand(1).Checksum()
cache_size2 = gdal.GetCacheUsed()
@@ -87,20 +88,21 @@ def test_misc_3():
ds = None
ds2 = None
+
###############################################################################
# Test Create() with invalid arguments
def test_misc_4():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
# Test a few invalid argument
- drv = gdal.GetDriverByName('GTiff')
- drv.Create('tmp/foo', 0, 100, 1)
- drv.Create('tmp/foo', 100, 1, 1)
- drv.Create('tmp/foo', 100, 100, -1)
- drv.Delete('tmp/foo')
+ drv = gdal.GetDriverByName("GTiff")
+ drv.Create("tmp/foo", 0, 100, 1)
+ drv.Create("tmp/foo", 100, 1, 1)
+ drv.Create("tmp/foo", 100, 100, -1)
+ drv.Delete("tmp/foo")
gdal.PopErrorHandler()
@@ -108,33 +110,38 @@ def test_misc_4():
###############################################################################
def get_filename(drv, dirname):
- filename = '%s/foo' % dirname
- if drv.ShortName == 'GTX':
- filename += '.gtx'
- elif drv.ShortName == 'RST':
- filename += '.rst'
- elif drv.ShortName == 'SAGA':
- filename += '.sdat'
- elif drv.ShortName == 'ADRG':
- filename = '%s/ABCDEF01.GEN' % dirname
- elif drv.ShortName == 'SRTMHGT':
- filename = '%s/N48E002.HGT' % dirname
- elif drv.ShortName == 'ECW':
- filename += '.ecw'
- elif drv.ShortName == 'KMLSUPEROVERLAY':
- filename += '.kmz'
- elif drv.ShortName == 'RRASTER':
- filename += '.grd'
+ filename = "%s/foo" % dirname
+ if drv.ShortName == "GTX":
+ filename += ".gtx"
+ elif drv.ShortName == "RST":
+ filename += ".rst"
+ elif drv.ShortName == "SAGA":
+ filename += ".sdat"
+ elif drv.ShortName == "ADRG":
+ filename = "%s/ABCDEF01.GEN" % dirname
+ elif drv.ShortName == "SRTMHGT":
+ filename = "%s/N48E002.HGT" % dirname
+ elif drv.ShortName == "ECW":
+ filename += ".ecw"
+ elif drv.ShortName == "KMLSUPEROVERLAY":
+ filename += ".kmz"
+ elif drv.ShortName == "RRASTER":
+ filename += ".grd"
return filename
+
###############################################################################
# Test Create() with various band numbers (including 0) and datatype
def _misc_5_internal(drv, datatype, nBands):
- dirname = 'tmp/tmp/tmp_%s_%d_%s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ dirname = "tmp/tmp/tmp_%s_%d_%s" % (
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
# print('drv = %s, nBands = %d, datatype = %s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype)))
try:
os.mkdir(dirname)
@@ -144,22 +151,27 @@ def _misc_5_internal(drv, datatype, nBands):
# Hum the directory already exists... Not expected, but let's try to go on
except OSError:
pytest.fail(
- 'Cannot create %s for drv = %s, nBands = %d, datatype = %s' % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ "Cannot create %s for drv = %s, nBands = %d, datatype = %s"
+ % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
)
filename = get_filename(drv, dirname)
ds = drv.Create(filename, 100, 100, nBands, datatype)
- if ds is not None and not (drv.ShortName == 'GPKG' and nBands == 0):
+ if ds is not None and not (drv.ShortName == "GPKG" and nBands == 0):
set_gt = (2, 1.0 / 10, 0, 49, 0, -1.0 / 10)
ds.SetGeoTransform(set_gt)
- ds.SetProjection('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]')
+ ds.SetProjection(
+ 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]'
+ )
# PNM and MFF have no SetGeoTransform() method implemented
- if drv.ShortName not in ['PNM', 'MFF', 'NULL']:
+ if drv.ShortName not in ["PNM", "MFF", "NULL"]:
got_gt = ds.GetGeoTransform()
for i in range(6):
- assert got_gt[i] == pytest.approx(set_gt[i], abs=1e-10), \
- 'Did not get expected GT for drv = %s, nBands = %d, datatype = %s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ assert got_gt[i] == pytest.approx(set_gt[i], abs=1e-10), (
+ "Did not get expected GT for drv = %s, nBands = %d, datatype = %s"
+ % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ )
# if ds.RasterCount > 0:
# ds.GetRasterBand(1).Fill(255)
@@ -179,59 +191,62 @@ def _misc_5_internal(drv, datatype, nBands):
shutil.rmtree(dirname)
except OSError:
pytest.fail(
- 'Cannot remove %s for drv = %s, nBands = %d, datatype = %s' % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ "Cannot remove %s for drv = %s, nBands = %d, datatype = %s"
+ % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
)
def test_misc_5():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
try:
- shutil.rmtree('tmp/tmp')
+ shutil.rmtree("tmp/tmp")
except OSError:
pass
try:
- os.mkdir('tmp/tmp')
+ os.mkdir("tmp/tmp")
except OSError:
try:
- os.stat('tmp/tmp')
+ os.stat("tmp/tmp")
# Hum the directory already exists... Not expected, but let's try to go on
except OSError:
- pytest.fail('Cannot create tmp/tmp')
+ pytest.fail("Cannot create tmp/tmp")
# This is to speed-up the runtime of tests on EXT4 filesystems
# Do not use this for production environment if you care about data safety
# w.r.t system/OS crashes, unless you know what you are doing.
- gdal.SetConfigOption('OGR_SQLITE_SYNCHRONOUS', 'OFF')
+ gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF")
# Test Create() with various band numbers, including 0
for i in range(gdal.GetDriverCount()):
drv = gdal.GetDriver(i)
md = drv.GetMetadata()
- if drv.ShortName == 'PDF':
+ if drv.ShortName == "PDF":
# PDF Create() is vector-only
continue
- if drv.ShortName == 'MBTiles':
+ if drv.ShortName == "MBTiles":
# MBTiles only support some precise resolutions
continue
- if 'DCAP_CREATE' in md and 'DCAP_RASTER' in md:
+ if "DCAP_CREATE" in md and "DCAP_RASTER" in md:
datatype = gdal.GDT_Byte
for nBands in range(6):
_misc_5_internal(drv, datatype, nBands)
for nBands in [1, 3]:
- for datatype in (gdal.GDT_UInt16,
- gdal.GDT_Int16,
- gdal.GDT_UInt32,
- gdal.GDT_Int32,
- gdal.GDT_Float32,
- gdal.GDT_Float64,
- gdal.GDT_CInt16,
- gdal.GDT_CInt32,
- gdal.GDT_CFloat32,
- gdal.GDT_CFloat64):
+ for datatype in (
+ gdal.GDT_UInt16,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt32,
+ gdal.GDT_Int32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CInt16,
+ gdal.GDT_CInt32,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ):
_misc_5_internal(drv, datatype, nBands)
gdal.PopErrorHandler()
@@ -246,34 +261,44 @@ def cbk(self, pct, message, user_data):
# pylint: disable=unused-argument
return pct <= 0.5
+
###############################################################################
# Test CreateCopy() with a source dataset with various band numbers (including 0) and datatype
def misc_6_internal(datatype, nBands, setDriversDone):
- ds = gdal.GetDriverByName('MEM').Create('', 10, 10, nBands, datatype)
+ ds = gdal.GetDriverByName("MEM").Create("", 10, 10, nBands, datatype)
if nBands > 0:
ds.GetRasterBand(1).Fill(255)
ds.SetGeoTransform([2, 1.0 / 10, 0, 49, 0, -1.0 / 10])
- ds.SetProjection('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]')
- ds.SetMetadata(['a'])
+ ds.SetProjection(
+ 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]'
+ )
+ ds.SetMetadata(["a"])
for i in range(gdal.GetDriverCount()):
drv = gdal.GetDriver(i)
md = drv.GetMetadata()
- if ('DCAP_CREATECOPY' in md or 'DCAP_CREATE' in md) and 'DCAP_RASTER' in md:
+ if ("DCAP_CREATECOPY" in md or "DCAP_CREATE" in md) and "DCAP_RASTER" in md:
# print ('drv = %s, nBands = %d, datatype = %s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype)))
skip = False
# FIXME: A few cases that crashes and should be investigated
- if drv.ShortName == 'JPEG2000':
- if (nBands == 2 or nBands >= 5) or \
- not (datatype == gdal.GDT_Byte or datatype == gdal.GDT_Int16 or datatype == gdal.GDT_UInt16):
+ if drv.ShortName == "JPEG2000":
+ if (nBands == 2 or nBands >= 5) or not (
+ datatype == gdal.GDT_Byte
+ or datatype == gdal.GDT_Int16
+ or datatype == gdal.GDT_UInt16
+ ):
skip = True
if skip is False:
- dirname = 'tmp/tmp/tmp_%s_%d_%s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ dirname = "tmp/tmp/tmp_%s_%d_%s" % (
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
try:
os.mkdir(dirname)
except OSError:
@@ -281,7 +306,15 @@ def misc_6_internal(datatype, nBands, setDriversDone):
os.stat(dirname)
# Hum the directory already exists... Not expected, but let's try to go on
except OSError:
- reason = 'Cannot create %s before drv = %s, nBands = %d, datatype = %s' % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ reason = (
+ "Cannot create %s before drv = %s, nBands = %d, datatype = %s"
+ % (
+ dirname,
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
+ )
pytest.fail(reason)
filename = get_filename(drv, dirname)
@@ -291,7 +324,7 @@ def misc_6_internal(datatype, nBands, setDriversDone):
if dst_ds:
# check that domain == None doesn't crash
dst_ds.GetMetadata(None)
- dst_ds.GetMetadataItem('', None)
+ dst_ds.GetMetadataItem("", None)
dst_ds = None
size = 0
@@ -302,7 +335,15 @@ def misc_6_internal(datatype, nBands, setDriversDone):
try:
shutil.rmtree(dirname)
except OSError:
- reason = 'Cannot remove %s after drv = %s, nBands = %d, datatype = %s' % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ reason = (
+ "Cannot remove %s after drv = %s, nBands = %d, datatype = %s"
+ % (
+ dirname,
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
+ )
pytest.fail(reason)
if has_succeeded and drv.ShortName not in setDriversDone and nBands > 0:
@@ -310,13 +351,20 @@ def misc_6_internal(datatype, nBands, setDriversDone):
# The first list of drivers fail to detect short writing
# The second one is because they are verbose in stderr
- if 'DCAP_VIRTUALIO' in md and size != 0 and \
- drv.ShortName not in ['JPEG2000', 'KMLSUPEROVERLAY', 'HF2', 'ZMap', 'DDS'] and \
- drv.ShortName not in ['GIF', 'JP2ECW', 'JP2Lura']:
+ if (
+ "DCAP_VIRTUALIO" in md
+ and size != 0
+ and drv.ShortName
+ not in ["JPEG2000", "KMLSUPEROVERLAY", "HF2", "ZMap", "DDS"]
+ and drv.ShortName not in ["GIF", "JP2ECW", "JP2Lura"]
+ ):
for j in range(10):
truncated_size = (size * j) / 10
- vsimem_filename = ('/vsimem/test_truncate/||maxlength=%d||' % truncated_size) + get_filename(drv, '')[1:]
+ vsimem_filename = (
+ "/vsimem/test_truncate/||maxlength=%d||"
+ % truncated_size
+ ) + get_filename(drv, "")[1:]
# print('drv = %s, nBands = %d, datatype = %s, truncated_size = %d' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype), truncated_size))
dst_ds = drv.CreateCopy(vsimem_filename, ds)
error_detected = False
@@ -325,23 +373,45 @@ def misc_6_internal(datatype, nBands, setDriversDone):
else:
gdal.ErrorReset()
dst_ds = None
- if gdal.GetLastErrorMsg() != '':
+ if gdal.GetLastErrorMsg() != "":
error_detected = True
if not error_detected:
- msg = 'write error not decteded with with drv = %s, nBands = %d, datatype = %s, truncated_size = %d' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype), truncated_size)
+ msg = (
+ "write error not decteded with with drv = %s, nBands = %d, datatype = %s, truncated_size = %d"
+ % (
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ truncated_size,
+ )
+ )
print(msg)
gdaltest.post_reason(msg)
- fl = gdal.ReadDirRecursive('/vsimem/test_truncate')
+ fl = gdal.ReadDirRecursive("/vsimem/test_truncate")
if fl is not None:
for myf in fl:
- gdal.Unlink('/vsimem/test_truncate/' + myf)
- fl = gdal.ReadDirRecursive('/vsimem/test_truncate')
+ gdal.Unlink("/vsimem/test_truncate/" + myf)
+ fl = gdal.ReadDirRecursive("/vsimem/test_truncate")
if fl is not None:
print(fl)
- if drv.ShortName not in ['ECW', 'JP2ECW', 'VRT', 'XPM', 'JPEG2000', 'FIT', 'RST', 'INGR', 'USGSDEM', 'KMLSUPEROVERLAY', 'GMT']:
- dst_ds = drv.CreateCopy(filename, ds, callback=misc_6_interrupt_callback_class().cbk)
+ if drv.ShortName not in [
+ "ECW",
+ "JP2ECW",
+ "VRT",
+ "XPM",
+ "JPEG2000",
+ "FIT",
+ "RST",
+ "INGR",
+ "USGSDEM",
+ "KMLSUPEROVERLAY",
+ "GMT",
+ ]:
+ dst_ds = drv.CreateCopy(
+ filename, ds, callback=misc_6_interrupt_callback_class().cbk
+ )
if dst_ds is not None:
dst_ds = None
@@ -350,7 +420,14 @@ def misc_6_internal(datatype, nBands, setDriversDone):
except OSError:
pass
- pytest.fail('interruption did not work with drv = %s, nBands = %d, datatype = %s' % (drv.ShortName, nBands, gdal.GetDataTypeName(datatype)))
+ pytest.fail(
+ "interruption did not work with drv = %s, nBands = %d, datatype = %s"
+ % (
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
+ )
dst_ds = None
@@ -361,60 +438,71 @@ def misc_6_internal(datatype, nBands, setDriversDone):
try:
os.mkdir(dirname)
except OSError:
- reason = 'Cannot create %s before drv = %s, nBands = %d, datatype = %s' % (dirname, drv.ShortName, nBands, gdal.GetDataTypeName(datatype))
+ reason = (
+ "Cannot create %s before drv = %s, nBands = %d, datatype = %s"
+ % (
+ dirname,
+ drv.ShortName,
+ nBands,
+ gdal.GetDataTypeName(datatype),
+ )
+ )
pytest.fail(reason)
ds = None
def test_misc_6():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
try:
- shutil.rmtree('tmp/tmp')
+ shutil.rmtree("tmp/tmp")
except OSError:
pass
try:
- os.mkdir('tmp/tmp')
+ os.mkdir("tmp/tmp")
except OSError:
try:
- os.stat('tmp/tmp')
+ os.stat("tmp/tmp")
# Hum the directory already exists... Not expected, but let's try to go on
except OSError:
- pytest.fail('Cannot create tmp/tmp')
+ pytest.fail("Cannot create tmp/tmp")
# This is to speed-up the runtime of tests on EXT4 filesystems
# Do not use this for production environment if you care about data safety
# w.r.t system/OS crashes, unless you know what you are doing.
- gdal.SetConfigOption('OGR_SQLITE_SYNCHRONOUS', 'OFF')
+ gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF")
datatype = gdal.GDT_Byte
setDriversDone = set()
for nBands in range(6):
ret = misc_6_internal(datatype, nBands, setDriversDone)
- if ret != 'success':
+ if ret != "success":
gdal.PopErrorHandler()
return ret
nBands = 1
- for datatype in (gdal.GDT_UInt16,
- gdal.GDT_Int16,
- gdal.GDT_UInt32,
- gdal.GDT_Int32,
- gdal.GDT_Float32,
- gdal.GDT_Float64,
- gdal.GDT_CInt16,
- gdal.GDT_CInt32,
- gdal.GDT_CFloat32,
- gdal.GDT_CFloat64):
+ for datatype in (
+ gdal.GDT_UInt16,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt32,
+ gdal.GDT_Int32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CInt16,
+ gdal.GDT_CInt32,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ):
ret = misc_6_internal(datatype, nBands, setDriversDone)
- if ret != 'success':
+ if ret != "success":
gdal.PopErrorHandler()
return ret
gdal.PopErrorHandler()
+
###############################################################################
# Test gdal.InvGeoTransform()
@@ -442,14 +530,21 @@ def test_misc_7():
# Test fix for #1615
gt = (-2, 1e-8, 1e-9, 52, 1e-9, -1e-8)
res = gdal.InvGeoTransform(gt)
- expected_inv_gt = (-316831683.16831684, 99009900.990099, 9900990.099009901,
- 5168316831.683168, 9900990.099009901, -99009900.990099)
+ expected_inv_gt = (
+ -316831683.16831684,
+ 99009900.990099,
+ 9900990.099009901,
+ 5168316831.683168,
+ 9900990.099009901,
+ -99009900.990099,
+ )
for i in range(6):
assert res[i] == pytest.approx(expected_inv_gt[i], abs=1e-6), res
res2 = gdal.InvGeoTransform(res)
for i in range(6):
assert res2[i] == pytest.approx(gt[i], abs=1e-6), res2
+
###############################################################################
# Test gdal.ApplyGeoTransform()
@@ -465,6 +560,7 @@ def test_misc_8():
res = gdal.ApplyGeoTransform(gt, 10, 1)
assert res == [11.0, 19.0]
+
###############################################################################
# Test setting and retrieving > 2 GB values for GDAL max cache (#3689)
@@ -476,20 +572,21 @@ def test_misc_9():
ret_val = gdal.GetCacheMax()
gdal.SetCacheMax(old_val)
- assert ret_val == 3000000000, 'did not get expected value'
+ assert ret_val == 3000000000, "did not get expected value"
###############################################################################
# Test VSIBufferedReaderHandle (fix done in r21358)
+
def test_misc_10():
try:
- os.remove('data/byte.tif.gz.properties')
+ os.remove("data/byte.tif.gz.properties")
except OSError:
pass
- f = gdal.VSIFOpenL('/vsigzip/./data/byte.tif.gz', 'rb')
+ f = gdal.VSIFOpenL("/vsigzip/./data/byte.tif.gz", "rb")
gdal.VSIFReadL(1, 1, f)
gdal.VSIFSeekL(f, 0, 2)
gdal.VSIFSeekL(f, 0, 0)
@@ -497,38 +594,40 @@ def test_misc_10():
gdal.VSIFCloseL(f)
import struct
- ar = struct.unpack('B' * 4, data)
+
+ ar = struct.unpack("B" * 4, data)
assert ar == (73, 73, 42, 0)
try:
- os.remove('data/byte.tif.gz.properties')
+ os.remove("data/byte.tif.gz.properties")
except OSError:
pass
-
###############################################################################
# Test that we can open a symlink whose pointed filename isn't a real
# file, but a filename that GDAL recognizes
+
def test_misc_11():
if not gdaltest.support_symlink():
pytest.skip()
- gdal.Unlink('tmp/symlink.tif')
- os.symlink('GTIFF_DIR:1:data/byte.tif', 'tmp/symlink.tif')
+ gdal.Unlink("tmp/symlink.tif")
+ os.symlink("GTIFF_DIR:1:data/byte.tif", "tmp/symlink.tif")
- ds = gdal.Open('tmp/symlink.tif')
+ ds = gdal.Open("tmp/symlink.tif")
if ds is None:
- os.remove('tmp/symlink.tif')
+ os.remove("tmp/symlink.tif")
pytest.fail()
desc = ds.GetDescription()
ds = None
- os.remove('tmp/symlink.tif')
+ os.remove("tmp/symlink.tif")
+
+ assert desc == "GTIFF_DIR:1:data/byte.tif", "did not get expected description"
- assert desc == 'GTIFF_DIR:1:data/byte.tif', 'did not get expected description'
###############################################################################
# Test CreateCopy() with a target filename in a non-existing dir
@@ -536,64 +635,88 @@ def test_misc_11():
def test_misc_12():
- if int(gdal.VersionInfo('VERSION_NUM')) < 1900:
- pytest.skip('would crash')
+ if int(gdal.VersionInfo("VERSION_NUM")) < 1900:
+ pytest.skip("would crash")
import test_cli_utilities
+
gdal_translate_path = test_cli_utilities.get_gdal_translate_path()
for i in range(gdal.GetDriverCount()):
drv = gdal.GetDriver(i)
md = drv.GetMetadata()
- if ('DCAP_CREATECOPY' in md or 'DCAP_CREATE' in md) and 'DCAP_RASTER' in md:
+ if ("DCAP_CREATECOPY" in md or "DCAP_CREATE" in md) and "DCAP_RASTER" in md:
nbands = 1
- if drv.ShortName == 'WEBP' or drv.ShortName == 'ADRG':
+ if drv.ShortName == "WEBP" or drv.ShortName == "ADRG":
nbands = 3
datatype = gdal.GDT_Byte
- if drv.ShortName == 'BT' or drv.ShortName == 'BLX':
+ if drv.ShortName == "BT" or drv.ShortName == "BLX":
datatype = gdal.GDT_Int16
- elif drv.ShortName == 'GTX' or drv.ShortName == 'NTv2' or drv.ShortName == 'Leveller':
+ elif (
+ drv.ShortName == "GTX"
+ or drv.ShortName == "NTv2"
+ or drv.ShortName == "Leveller"
+ ):
datatype = gdal.GDT_Float32
size = 1201
- if drv.ShortName == 'BLX':
+ if drv.ShortName == "BLX":
size = 128
- src_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/misc_12_src.tif', size, size, nbands, datatype)
+ src_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/misc_12_src.tif", size, size, nbands, datatype
+ )
set_gt = (2, 1.0 / size, 0, 49, 0, -1.0 / size)
src_ds.SetGeoTransform(set_gt)
- src_ds.SetProjection('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]')
+ src_ds.SetProjection(
+ 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.01745329251994328]]'
+ )
# Test to detect crashes
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = drv.CreateCopy('/nonexistingpath' + get_filename(drv, ''), src_ds)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = drv.CreateCopy("/nonexistingpath" + get_filename(drv, ""), src_ds)
gdal.PopErrorHandler()
- if ds is None and gdal.GetLastErrorMsg() == '':
- gdal.Unlink('/vsimem/misc_12_src.tif')
- pytest.fail('CreateCopy() into non existing dir fails without error message for driver %s' % drv.ShortName)
+ if ds is None and gdal.GetLastErrorMsg() == "":
+ gdal.Unlink("/vsimem/misc_12_src.tif")
+ pytest.fail(
+ "CreateCopy() into non existing dir fails without error message for driver %s"
+ % drv.ShortName
+ )
ds = None
if gdal_translate_path is not None:
# Test to detect memleaks
- ds = gdal.GetDriverByName('VRT').CreateCopy('tmp/misc_12.vrt', src_ds)
- (out, _) = gdaltest.runexternal_out_and_err(gdal_translate_path + ' -of ' + drv.ShortName + ' tmp/misc_12.vrt /nonexistingpath/' + get_filename(drv, ''), check_memleak=False)
+ ds = gdal.GetDriverByName("VRT").CreateCopy("tmp/misc_12.vrt", src_ds)
+ (out, _) = gdaltest.runexternal_out_and_err(
+ gdal_translate_path
+ + " -of "
+ + drv.ShortName
+ + " tmp/misc_12.vrt /nonexistingpath/"
+ + get_filename(drv, ""),
+ check_memleak=False,
+ )
del ds
- gdal.Unlink('tmp/misc_12.vrt')
+ gdal.Unlink("tmp/misc_12.vrt")
# If DEBUG_VSIMALLOC_STATS is defined, this is an easy way
# to catch some memory leaks
- if out.find('VSIMalloc + VSICalloc - VSIFree') != -1 and \
- out.find('VSIMalloc + VSICalloc - VSIFree : 0') == -1:
- if drv.ShortName == 'Rasterlite' and out.find('VSIMalloc + VSICalloc - VSIFree : 1') != -1:
+ if (
+ out.find("VSIMalloc + VSICalloc - VSIFree") != -1
+ and out.find("VSIMalloc + VSICalloc - VSIFree : 0") == -1
+ ):
+ if (
+ drv.ShortName == "Rasterlite"
+ and out.find("VSIMalloc + VSICalloc - VSIFree : 1") != -1
+ ):
pass
else:
- print('memleak detected for driver %s' % drv.ShortName)
+ print("memleak detected for driver %s" % drv.ShortName)
src_ds = None
- gdal.Unlink('/vsimem/misc_12_src.tif')
+ gdal.Unlink("/vsimem/misc_12_src.tif")
###############################################################################
@@ -603,22 +726,24 @@ def test_misc_12():
def test_misc_13():
# Raster-only -> vector-only
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
gdal.PushErrorHandler()
- out_ds = gdal.GetDriverByName('ESRI Shapefile').CreateCopy('/vsimem/out.shp', ds)
+ out_ds = gdal.GetDriverByName("ESRI Shapefile").CreateCopy("/vsimem/out.shp", ds)
gdal.PopErrorHandler()
assert out_ds is None
# Raster-only -> vector-only
- ds = gdal.OpenEx('../ogr/data/poly.shp', gdal.OF_VECTOR)
+ ds = gdal.OpenEx("../ogr/data/poly.shp", gdal.OF_VECTOR)
gdal.PushErrorHandler()
- out_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/out.tif', ds)
+ out_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/out.tif", ds)
gdal.PopErrorHandler()
assert out_ds is None
+
###############################################################################
# Test ConfigureLogging()
+
def test_misc_14():
import collections
import logging
@@ -631,8 +756,7 @@ def __init__(self, *args, **kwargs):
def emit(self, record):
self.messages[record.levelname].append(record.getMessage())
-
- logger = logging.getLogger('gdal_logging_test')
+ logger = logging.getLogger("gdal_logging_test")
logger.setLevel(logging.DEBUG)
logger.propagate = False
handler = MockLoggingHandler(level=logging.DEBUG)
@@ -640,7 +764,7 @@ def emit(self, record):
prev_debug = gdal.GetConfigOption("CPL_DEBUG")
try:
- gdal.ConfigurePythonLogging(logger_name='gdal_logging_test', enable_debug=True)
+ gdal.ConfigurePythonLogging(logger_name="gdal_logging_test", enable_debug=True)
assert gdal.GetConfigOption("CPL_DEBUG") == "ON", "should have enabled debug"
@@ -651,62 +775,65 @@ def emit(self, record):
gdal.Error(gdal.CE_Failure, 99999, "error1")
expected = {
- 'DEBUG': ["test1: debug1", "FileIO: debug2"],
- 'INFO': ["AppDefined: info1"],
- 'WARNING': ["AssertionFailed: warning1"],
- 'ERROR': ["99999: error1"],
+ "DEBUG": ["test1: debug1", "FileIO: debug2"],
+ "INFO": ["AppDefined: info1"],
+ "WARNING": ["AssertionFailed: warning1"],
+ "ERROR": ["99999: error1"],
}
assert handler.messages == expected, "missing log messages"
- gdal.SetErrorHandler('CPLDefaultErrorHandler')
+ gdal.SetErrorHandler("CPLDefaultErrorHandler")
handler.messages.clear()
- gdal.SetConfigOption('CPL_DEBUG', "OFF")
+ gdal.SetConfigOption("CPL_DEBUG", "OFF")
- gdal.ConfigurePythonLogging(logger_name='gdal_logging_test')
+ gdal.ConfigurePythonLogging(logger_name="gdal_logging_test")
- assert gdal.GetConfigOption("CPL_DEBUG") == "OFF", \
- "shouldn't have enabled debug"
+ assert (
+ gdal.GetConfigOption("CPL_DEBUG") == "OFF"
+ ), "shouldn't have enabled debug"
# these get suppressed by CPL_DEBUG
gdal.Debug("test1", "debug3")
# these don't
gdal.Error(gdal.CE_Debug, gdal.CPLE_None, "debug4")
- assert handler.messages['DEBUG'] == ['debug4'], "unexpected log messages"
+ assert handler.messages["DEBUG"] == ["debug4"], "unexpected log messages"
finally:
- gdal.SetErrorHandler('CPLDefaultErrorHandler')
- gdal.SetConfigOption('CPL_DEBUG', prev_debug)
+ gdal.SetErrorHandler("CPLDefaultErrorHandler")
+ gdal.SetConfigOption("CPL_DEBUG", prev_debug)
logger.removeHandler(handler)
-
###############################################################################
# Test SetErrorHandler
+
def test_misc_15():
messages0 = []
+
def handle0(ecls, ecode, emsg):
messages0.append((ecls, ecode, emsg))
messages1 = []
+
def handle1(ecls, ecode, emsg):
messages1.append((ecls, ecode, emsg))
prev_debug = gdal.GetConfigOption("CPL_DEBUG")
try:
gdal.SetErrorHandler(handle0)
- gdal.SetConfigOption('CPL_DEBUG', "ON")
+ gdal.SetConfigOption("CPL_DEBUG", "ON")
- gdal.Debug('foo', 'bar')
+ gdal.Debug("foo", "bar")
gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2")
gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1")
gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1")
gdal.Error(gdal.CE_Failure, 99999, "error1")
expected0 = [
- (gdal.CE_Debug, 0, 'foo: bar'),
+ (gdal.CE_Debug, 0, "foo: bar"),
(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2"),
(gdal.CE_None, gdal.CPLE_AppDefined, "info1"),
(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1"),
@@ -738,8 +865,8 @@ def handle1(ecls, ecode, emsg):
assert len(messages1) == 0, "PopErrorHandler: unexpected log messages"
finally:
- gdal.SetErrorHandler('CPLDefaultErrorHandler')
- gdal.SetConfigOption('CPL_DEBUG', prev_debug)
+ gdal.SetErrorHandler("CPLDefaultErrorHandler")
+ gdal.SetConfigOption("CPL_DEBUG", prev_debug)
###############################################################################
@@ -748,6 +875,6 @@ def handle1(ecls, ecode, emsg):
def test_misc_cleanup():
try:
- shutil.rmtree('tmp/tmp')
+ shutil.rmtree("tmp/tmp")
except OSError:
pass
diff --git a/autotest/gcore/multidim.py b/autotest/gcore/multidim.py
index 81044bb7761d..31eb4e8b97ba 100644
--- a/autotest/gcore/multidim.py
+++ b/autotest/gcore/multidim.py
@@ -29,15 +29,16 @@
###############################################################################
import array
-from osgeo import gdal
-from osgeo import osr
import gdaltest
import pytest
+from osgeo import gdal, osr
+
+
def test_multidim_asarray_epsg_4326():
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
srs_ds = ds.GetSpatialRef()
assert srs_ds.GetDataAxisToSRSAxisMapping() == [2, 1]
band = ds.GetRasterBand(1)
@@ -67,7 +68,7 @@ def test_multidim_asarray_epsg_4326():
def test_multidim_asarray_epsg_26711():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
srs_ds = ds.GetSpatialRef()
assert srs_ds.GetDataAxisToSRSAxisMapping() == [1, 2]
band = ds.GetRasterBand(1)
@@ -95,18 +96,23 @@ def test_multidim_asarray_epsg_26711():
assert ds2.ReadRaster() == ds.GetRasterBand(1).ReadRaster()
-@pytest.mark.parametrize("resampling",[gdal.GRIORA_NearestNeighbour,
- gdal.GRIORA_Bilinear,
- gdal.GRIORA_Cubic,
- gdal.GRIORA_CubicSpline,
- gdal.GRIORA_Lanczos,
- gdal.GRIORA_Average,
- gdal.GRIORA_Mode,
- gdal.GRIORA_Gauss, #unsupported
- gdal.GRIORA_RMS])
+@pytest.mark.parametrize(
+ "resampling",
+ [
+ gdal.GRIORA_NearestNeighbour,
+ gdal.GRIORA_Bilinear,
+ gdal.GRIORA_Cubic,
+ gdal.GRIORA_CubicSpline,
+ gdal.GRIORA_Lanczos,
+ gdal.GRIORA_Average,
+ gdal.GRIORA_Mode,
+ gdal.GRIORA_Gauss, # unsupported
+ gdal.GRIORA_RMS,
+ ],
+)
def test_multidim_getresampled(resampling):
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
srs_ds = ds.GetSpatialRef()
band = ds.GetRasterBand(1)
ar = band.AsMDArray()
@@ -114,7 +120,9 @@ def test_multidim_getresampled(resampling):
if resampling == gdal.GRIORA_Gauss:
with gdaltest.error_handler():
- resampled_ar = ar.GetResampled([None] * ar.GetDimensionCount(), resampling, None)
+ resampled_ar = ar.GetResampled(
+ [None] * ar.GetDimensionCount(), resampling, None
+ )
assert resampled_ar is None
return
@@ -126,12 +134,15 @@ def test_multidim_getresampled(resampling):
assert srs.GetAuthorityCode(None) == srs_ds.GetAuthorityCode(None)
dims = resampled_ar.GetDimensions()
assert len(dims) == 2
- assert dims[0].GetName() == 'dimY'
+ assert dims[0].GetName() == "dimY"
assert dims[0].GetSize() == ds.RasterYSize
- assert dims[1].GetName() == 'dimX'
+ assert dims[1].GetName() == "dimX"
assert dims[1].GetSize() == ds.RasterXSize
- assert resampled_ar.Read(buffer_datatype = gdal.ExtendedDataType.CreateString()) != gdal.CE_None
+ assert (
+ resampled_ar.Read(buffer_datatype=gdal.ExtendedDataType.CreateString())
+ != gdal.CE_None
+ )
ixdim = 1
iydim = 0
@@ -146,42 +157,56 @@ def test_multidim_getresampled(resampling):
assert ds2.ReadRaster() != ds.GetRasterBand(1).ReadRaster()
else:
assert ds2.ReadRaster() == ds.GetRasterBand(1).ReadRaster()
- assert ds2.ReadRaster(buf_type = gdal.GDT_UInt16) == ds.GetRasterBand(1).ReadRaster(buf_type = gdal.GDT_UInt16)
-
-
-@pytest.mark.parametrize("with_dim_x,with_var_x,with_dim_y,with_var_y",
- [[True, False, True, False],
- [True, False, False, False],
- [False, False, True, False],
- [True, True, True, True]])
-def test_multidim_getresampled_new_dims_with_variables(with_dim_x,with_var_x,with_dim_y,with_var_y):
-
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ assert ds2.ReadRaster(buf_type=gdal.GDT_UInt16) == ds.GetRasterBand(
+ 1
+ ).ReadRaster(buf_type=gdal.GDT_UInt16)
+
+
+@pytest.mark.parametrize(
+ "with_dim_x,with_var_x,with_dim_y,with_var_y",
+ [
+ [True, False, True, False],
+ [True, False, False, False],
+ [False, False, True, False],
+ [True, True, True, True],
+ ],
+)
+def test_multidim_getresampled_new_dims_with_variables(
+ with_dim_x, with_var_x, with_dim_y, with_var_y
+):
+
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
srs_ds = ds.GetSpatialRef()
band = ds.GetRasterBand(1)
ar = band.AsMDArray()
assert ar
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
dimY = None
if with_dim_y:
- dimY = rg.CreateDimension('dimY', None, None, ds.RasterYSize // 2)
+ dimY = rg.CreateDimension("dimY", None, None, ds.RasterYSize // 2)
if with_var_y:
- varY = rg.CreateMDArray(dimY.GetName(), [dimY],
- gdal.ExtendedDataType.Create(gdal.GDT_Float64))
- varY.Write(array.array('d', [ 90 - 0.9 - 1.8 * i for i in range(dimY.GetSize()) ]))
+ varY = rg.CreateMDArray(
+ dimY.GetName(), [dimY], gdal.ExtendedDataType.Create(gdal.GDT_Float64)
+ )
+ varY.Write(
+ array.array("d", [90 - 0.9 - 1.8 * i for i in range(dimY.GetSize())])
+ )
dimY.SetIndexingVariable(varY)
dimX = None
if with_dim_x:
- dimX = rg.CreateDimension('dimX', None, None, ds.RasterXSize // 2)
+ dimX = rg.CreateDimension("dimX", None, None, ds.RasterXSize // 2)
if with_var_x:
- varX = rg.CreateMDArray(dimX.GetName(), [dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Float64))
- varX.Write(array.array('d', [ -180 + 0.9 + 1.8 * i for i in range(dimX.GetSize()) ]))
+ varX = rg.CreateMDArray(
+ dimX.GetName(), [dimX], gdal.ExtendedDataType.Create(gdal.GDT_Float64)
+ )
+ varX.Write(
+ array.array("d", [-180 + 0.9 + 1.8 * i for i in range(dimX.GetSize())])
+ )
dimX.SetIndexingVariable(varX)
resampled_ar = ar.GetResampled([dimY, dimX], gdal.GRIORA_Cubic, None)
@@ -194,27 +219,29 @@ def test_multidim_getresampled_new_dims_with_variables(with_dim_x,with_var_x,wit
assert dims[0].GetSize() == ds.RasterYSize // 2
assert dims[1].GetSize() == ds.RasterXSize // 2
- expected_ds = gdal.Warp('', ds, options = '-of MEM -ts 200 100 -r cubic')
+ expected_ds = gdal.Warp("", ds, options="-of MEM -ts 200 100 -r cubic")
assert expected_ds.GetRasterBand(1).ReadRaster() == resampled_ar.Read()
def test_multidim_getresampled_with_srs():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
band = ds.GetRasterBand(1)
ar = band.AsMDArray()
assert ar
srs = osr.SpatialReference()
srs.ImportFromEPSG(4267)
- resampled_ar = ar.GetResampled([None] * ar.GetDimensionCount(), gdal.GRIORA_NearestNeighbour, srs)
+ resampled_ar = ar.GetResampled(
+ [None] * ar.GetDimensionCount(), gdal.GRIORA_NearestNeighbour, srs
+ )
assert resampled_ar
got_srs = resampled_ar.GetSpatialRef()
assert got_srs is not None
assert got_srs.GetAuthorityCode(None) == srs.GetAuthorityCode(None)
dims = resampled_ar.GetDimensions()
- expected_ds = gdal.Warp('', ds, options = '-of MEM -t_srs EPSG:4267 -r nearest')
+ expected_ds = gdal.Warp("", ds, options="-of MEM -t_srs EPSG:4267 -r nearest")
assert expected_ds.RasterXSize == dims[1].GetSize()
assert expected_ds.RasterYSize == dims[0].GetSize()
assert expected_ds.GetRasterBand(1).ReadRaster() == resampled_ar.Read()
@@ -227,36 +254,40 @@ def test_multidim_getresampled_with_srs():
def test_multidim_getresampled_3d():
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
ar_b1 = ds.GetRasterBand(1).AsMDArray()
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimBand = rg.CreateDimension('dimBand', None, None, ds.RasterCount)
+ dimBand = rg.CreateDimension("dimBand", None, None, ds.RasterCount)
dimY = ar_b1.GetDimensions()[0]
dimX = ar_b1.GetDimensions()[1]
- ar = rg.CreateMDArray("ar", [dimBand, dimY, dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ ar = rg.CreateMDArray(
+ "ar", [dimBand, dimY, dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
ar.SetOffset(1.5)
ar.SetScale(2.5)
- ar.SetUnit('foo')
+ ar.SetUnit("foo")
ar.SetNoDataValueDouble(-0.5)
- attr = ar.CreateAttribute('attr', [],
- gdal.ExtendedDataType.Create(gdal.GDT_Float64))
+ attr = ar.CreateAttribute(
+ "attr", [], gdal.ExtendedDataType.Create(gdal.GDT_Float64)
+ )
assert attr.Write(1) == gdal.CE_None
srs = ds.GetSpatialRef().Clone()
srs.SetDataAxisToSRSAxisMapping([1, 2])
ar.SetSpatialRef(srs)
for i in range(ds.RasterCount):
- ar[i].Write(ds.GetRasterBand(i+1).ReadRaster())
+ ar[i].Write(ds.GetRasterBand(i + 1).ReadRaster())
- resampled_ar = ar.GetResampled([None] * ar.GetDimensionCount(), gdal.GRIORA_NearestNeighbour, None)
+ resampled_ar = ar.GetResampled(
+ [None] * ar.GetDimensionCount(), gdal.GRIORA_NearestNeighbour, None
+ )
assert resampled_ar
dims = resampled_ar.GetDimensions()
- assert len(dims) == 3
+ assert len(dims) == 3
assert dims[0].GetName() == dimBand.GetName()
assert dims[0].GetSize() == dimBand.GetSize()
assert dims[1].GetSize() == dimY.GetSize()
@@ -271,21 +302,19 @@ def test_multidim_getresampled_3d():
assert block_size[0] == 0
assert block_size[1] != 0
assert block_size[2] != 0
- assert resampled_ar.GetAttribute('attr') is not None
+ assert resampled_ar.GetAttribute("attr") is not None
assert len(resampled_ar.GetAttributes()) == 1
assert resampled_ar.Read() == ds.ReadRaster()
-
def test_multidim_getresampled_error_single_dim():
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimX = rg.CreateDimension('X', None, None, 3)
- ar = rg.CreateMDArray("ar", [dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ dimX = rg.CreateDimension("X", None, None, 3)
+ ar = rg.CreateMDArray("ar", [dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte))
with gdaltest.error_handler():
resampled_ar = ar.GetResampled([None], gdal.GRIORA_NearestNeighbour, None)
assert resampled_ar is None
@@ -293,43 +322,50 @@ def test_multidim_getresampled_error_single_dim():
def test_multidim_getresampled_error_too_large_y():
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimY = rg.CreateDimension('Y', None, None, 4)
- dimX = rg.CreateDimension('X', None, None, 3)
- ar = rg.CreateMDArray("ar", [dimY, dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
- new_dimY = rg.CreateDimension('Y', None, None, 4 * 1000 * 1000 * 1000)
+ dimY = rg.CreateDimension("Y", None, None, 4)
+ dimX = rg.CreateDimension("X", None, None, 3)
+ ar = rg.CreateMDArray(
+ "ar", [dimY, dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
+ new_dimY = rg.CreateDimension("Y", None, None, 4 * 1000 * 1000 * 1000)
with gdaltest.error_handler():
- resampled_ar = ar.GetResampled([new_dimY, None], gdal.GRIORA_NearestNeighbour, None)
+ resampled_ar = ar.GetResampled(
+ [new_dimY, None], gdal.GRIORA_NearestNeighbour, None
+ )
assert resampled_ar is None
def test_multidim_getresampled_error_too_large_x():
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimY = rg.CreateDimension('Y', None, None, 4)
- dimX = rg.CreateDimension('X', None, None, 3)
- ar = rg.CreateMDArray("ar", [dimY, dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
- new_dimX = rg.CreateDimension('Y', None, None, 4 * 1000 * 1000 * 1000)
+ dimY = rg.CreateDimension("Y", None, None, 4)
+ dimX = rg.CreateDimension("X", None, None, 3)
+ ar = rg.CreateMDArray(
+ "ar", [dimY, dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
+ new_dimX = rg.CreateDimension("Y", None, None, 4 * 1000 * 1000 * 1000)
with gdaltest.error_handler():
- resampled_ar = ar.GetResampled([None, new_dimX], gdal.GRIORA_NearestNeighbour, None)
+ resampled_ar = ar.GetResampled(
+ [None, new_dimX], gdal.GRIORA_NearestNeighbour, None
+ )
assert resampled_ar is None
def test_multidim_getresampled_error_no_geotransform():
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimY = rg.CreateDimension('Y', None, None, 2)
- dimX = rg.CreateDimension('X', None, None, 3)
- ar = rg.CreateMDArray("ar", [dimY, dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ dimY = rg.CreateDimension("Y", None, None, 2)
+ dimX = rg.CreateDimension("X", None, None, 3)
+ ar = rg.CreateMDArray(
+ "ar", [dimY, dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
with gdaltest.error_handler():
resampled_ar = ar.GetResampled([None, None], gdal.GRIORA_NearestNeighbour, None)
assert resampled_ar is None
@@ -337,27 +373,30 @@ def test_multidim_getresampled_error_no_geotransform():
def test_multidim_getresampled_error_extra_dim_not_same():
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
ar_b1 = ds.GetRasterBand(1).AsMDArray()
- drv = gdal.GetDriverByName('MEM')
- mem_ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ mem_ds = drv.CreateMultiDimensional("myds")
rg = mem_ds.GetRootGroup()
- dimOther = rg.CreateDimension('other', None, None, 2)
+ dimOther = rg.CreateDimension("other", None, None, 2)
dimY = ar_b1.GetDimensions()[0]
dimX = ar_b1.GetDimensions()[1]
- ar = rg.CreateMDArray("ar", [dimOther, dimY, dimX],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ ar = rg.CreateMDArray(
+ "ar", [dimOther, dimY, dimX], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
- dimOtherNew = rg.CreateDimension('otherNew', None, None, 1)
+ dimOtherNew = rg.CreateDimension("otherNew", None, None, 1)
with gdaltest.error_handler():
- resampled_ar = ar.GetResampled([dimOtherNew, None, None], gdal.GRIORA_NearestNeighbour, None)
+ resampled_ar = ar.GetResampled(
+ [dimOtherNew, None, None], gdal.GRIORA_NearestNeighbour, None
+ )
assert resampled_ar is None
def test_multidim_getresampled_bad_input_dim_count():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
band = ds.GetRasterBand(1)
ar = band.AsMDArray()
assert ar
@@ -367,6 +406,7 @@ def test_multidim_getresampled_bad_input_dim_count():
assert resampled_ar is None
with gdaltest.error_handler():
- resampled_ar = ar.GetResampled([None, None, None], gdal.GRIORA_NearestNeighbour, None)
+ resampled_ar = ar.GetResampled(
+ [None, None, None], gdal.GRIORA_NearestNeighbour, None
+ )
assert resampled_ar is None
-
diff --git a/autotest/gcore/nodatamaskband.py b/autotest/gcore/nodatamaskband.py
index 7c8967e6dbdf..2a9e253ef00f 100755
--- a/autotest/gcore/nodatamaskband.py
+++ b/autotest/gcore/nodatamaskband.py
@@ -36,53 +36,104 @@
def test_nodatamaskband_1():
- for (dt, struct_type, v) in [(gdal.GDT_Byte, 'B', 255),
- (gdal.GDT_Int16, 'h', 32767),
- (gdal.GDT_UInt16, 'H', 65535),
- (gdal.GDT_Int32, 'i', 0x7FFFFFFF),
- (gdal.GDT_UInt32, 'I', 0xFFFFFFFF),
- (gdal.GDT_Float32, 'f', 1.25),
- (gdal.GDT_Float32, 'f', float('nan')),
- (gdal.GDT_Float64, 'd', 1.2345678),
- (gdal.GDT_Float64, 'd', float('nan'))]:
+ for (dt, struct_type, v) in [
+ (gdal.GDT_Byte, "B", 255),
+ (gdal.GDT_Int16, "h", 32767),
+ (gdal.GDT_UInt16, "H", 65535),
+ (gdal.GDT_Int32, "i", 0x7FFFFFFF),
+ (gdal.GDT_UInt32, "I", 0xFFFFFFFF),
+ (gdal.GDT_Float32, "f", 1.25),
+ (gdal.GDT_Float32, "f", float("nan")),
+ (gdal.GDT_Float64, "d", 1.2345678),
+ (gdal.GDT_Float64, "d", float("nan")),
+ ]:
- ds = gdal.GetDriverByName('MEM').Create('', 6, 4, 1, dt)
+ ds = gdal.GetDriverByName("MEM").Create("", 6, 4, 1, dt)
ds.GetRasterBand(1).SetNoDataValue(v)
- ds.GetRasterBand(1).WriteRaster(0, 0, 6, 4,
- struct.pack(struct_type * 6 * 4,
- v, 1, 1, v, v, 0,
- v, 1, 1, v, v, 0,
- v, 1, 1, v, v, 0,
- 0, v, v, 0, 0, 0))
+ ds.GetRasterBand(1).WriteRaster(
+ 0,
+ 0,
+ 6,
+ 4,
+ struct.pack(
+ struct_type * 6 * 4,
+ v,
+ 1,
+ 1,
+ v,
+ v,
+ 0,
+ v,
+ 1,
+ 1,
+ v,
+ v,
+ 0,
+ v,
+ 1,
+ 1,
+ v,
+ v,
+ 0,
+ 0,
+ v,
+ v,
+ 0,
+ 0,
+ 0,
+ ),
+ )
data = ds.GetRasterBand(1).GetMaskBand().ReadRaster()
- data_ar = struct.unpack('B' * 6 * 4, data)
- expected_ar = (0, 255, 255, 0, 0, 255,
- 0, 255, 255, 0, 0, 255,
- 0, 255, 255, 0, 0, 255,
- 255, 0, 0, 255, 255, 255)
+ data_ar = struct.unpack("B" * 6 * 4, data)
+ expected_ar = (
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 255,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 255,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 255,
+ 255,
+ 255,
+ )
assert data_ar == expected_ar, dt
data = ds.GetRasterBand(1).GetMaskBand().ReadBlock(0, 0)
- data_ar = struct.unpack('B' * 6 * 1, data)
+ data_ar = struct.unpack("B" * 6 * 1, data)
expected_ar = (0, 255, 255, 0, 0, 255)
assert data_ar == expected_ar, dt
data = ds.GetRasterBand(1).GetMaskBand().ReadBlock(0, 3)
- data_ar = struct.unpack('B' * 6 * 1, data)
+ data_ar = struct.unpack("B" * 6 * 1, data)
expected_ar = (255, 0, 0, 255, 255, 255)
assert data_ar == expected_ar, dt
- data = ds.GetRasterBand(1).GetMaskBand().ReadRaster(
- buf_xsize=3, buf_ysize=2)
- data_ar = struct.unpack('B' * 3 * 2, data)
- expected_ar = (255, 0, 255,
- 0, 255, 255)
+ data = ds.GetRasterBand(1).GetMaskBand().ReadRaster(buf_xsize=3, buf_ysize=2)
+ data_ar = struct.unpack("B" * 3 * 2, data)
+ expected_ar = (255, 0, 255, 0, 255, 255)
assert data_ar == expected_ar, dt
- data = ds.GetRasterBand(1).GetMaskBand().ReadRaster(
- buf_type=gdal.GDT_UInt16, buf_xsize=3, buf_ysize=2)
- data_ar = struct.unpack('H' * 3 * 2, data)
- expected_ar = (255, 0, 255,
- 0, 255, 255)
+ data = (
+ ds.GetRasterBand(1)
+ .GetMaskBand()
+ .ReadRaster(buf_type=gdal.GDT_UInt16, buf_xsize=3, buf_ysize=2)
+ )
+ data_ar = struct.unpack("H" * 3 * 2, data)
+ expected_ar = (255, 0, 255, 0, 255, 255)
assert data_ar == expected_ar, dt
diff --git a/autotest/gcore/numpy_rw.py b/autotest/gcore/numpy_rw.py
index c314377fdb12..9d3e03440af6 100755
--- a/autotest/gcore/numpy_rw.py
+++ b/autotest/gcore/numpy_rw.py
@@ -30,13 +30,13 @@
###############################################################################
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
# All tests will be skipped if numpy or gdal_array are unavailable.
-numpy = pytest.importorskip('numpy')
-gdal_array = pytest.importorskip('osgeo.gdal_array')
+numpy = pytest.importorskip("numpy")
+gdal_array = pytest.importorskip("osgeo.gdal_array")
###############################################################################
# verify that we can load the deprecated gdalnumeric module
@@ -45,34 +45,38 @@
def test_numpy_rw_1():
from osgeo import gdalnumeric
+
gdalnumeric.zeros
+
###############################################################################
# Load a test file into a memory Numpy array, and verify the checksum.
def test_numpy_rw_2():
- array = gdal_array.LoadFile('data/utmsmall.tif')
- assert array is not None, 'Failed to load utmsmall.tif into array'
+ array = gdal_array.LoadFile("data/utmsmall.tif")
+ assert array is not None, "Failed to load utmsmall.tif into array"
ds = gdal_array.OpenArray(array)
- assert ds is not None, 'Failed to open memory array as dataset.'
+ assert ds is not None, "Failed to open memory array as dataset."
bnd = ds.GetRasterBand(1)
- assert bnd.Checksum() == 50054, 'Didnt get expected checksum on reopened file'
+ assert bnd.Checksum() == 50054, "Didnt get expected checksum on reopened file"
ds = None
+
###############################################################################
# Test loading complex data.
def test_numpy_rw_3():
- ds = gdal.Open('data/cint_sar.tif')
+ ds = gdal.Open("data/cint_sar.tif")
array = ds.ReadAsArray()
- assert array[2][3] == 116 - 16j, 'complex value read improperly.'
+ assert array[2][3] == 116 - 16j, "complex value read improperly."
+
###############################################################################
# Test a band read with downsampling.
@@ -80,11 +84,13 @@ def test_numpy_rw_3():
def test_numpy_rw_4():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
array = ds.GetRasterBand(1).ReadAsArray(0, 0, 20, 20, 5, 5)
- assert array[2][3] == 123, \
- 'Read wrong value - perhaps downsampling algorithm has changed subtly?'
+ assert (
+ array[2][3] == 123
+ ), "Read wrong value - perhaps downsampling algorithm has changed subtly?"
+
###############################################################################
# Test reading a multi-band file.
@@ -92,25 +98,31 @@ def test_numpy_rw_4():
def test_numpy_rw_5():
- array = gdal_array.LoadFile('data/rgbsmall.tif', 35, 21, 1, 1)
+ array = gdal_array.LoadFile("data/rgbsmall.tif", 35, 21, 1, 1)
- assert array[0][0][0] == 78, 'value read improperly.'
+ assert array[0][0][0] == 78, "value read improperly."
- assert array[1][0][0] == 117, 'value read improperly.'
+ assert array[1][0][0] == 117, "value read improperly."
- assert array[2][0][0] == 24, 'value read improperly.'
+ assert array[2][0][0] == 24, "value read improperly."
- array = gdal_array.LoadFile('data/rgbsmall.tif', buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Bilinear)
- assert array.shape[0] == 3 and array.shape[1] == 1 and array.shape[2] == 1, \
- 'wrong array shape.'
- assert array[0][0][0] == 70 and array[1][0][0] == 97 and array[2][0][0] == 29, \
- 'value read improperly.'
+ array = gdal_array.LoadFile(
+ "data/rgbsmall.tif", buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Bilinear
+ )
+ assert (
+ array.shape[0] == 3 and array.shape[1] == 1 and array.shape[2] == 1
+ ), "wrong array shape."
+ assert (
+ array[0][0][0] == 70 and array[1][0][0] == 97 and array[2][0][0] == 29
+ ), "value read improperly."
array = numpy.zeros([3, 1, 1], dtype=numpy.uint8)
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
ds.ReadAsArray(buf_obj=array, resample_alg=gdal.GRIORA_Bilinear)
- assert array[0][0][0] == 70 and array[1][0][0] == 97 and array[2][0][0] == 29, \
- 'value read improperly.'
+ assert (
+ array[0][0][0] == 70 and array[1][0][0] == 97 and array[2][0][0] == 29
+ ), "value read improperly."
+
###############################################################################
# Check that Band.ReadAsArray() can accept an already allocated array (#2658, #3028)
@@ -118,7 +130,7 @@ def test_numpy_rw_5():
def test_numpy_rw_6():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
array = numpy.zeros([ds.RasterYSize, ds.RasterXSize], numpy.uint8)
array_res = ds.GetRasterBand(1).ReadAsArray(buf_obj=array)
@@ -127,13 +139,14 @@ def test_numpy_rw_6():
ds2 = gdal_array.OpenArray(array)
assert ds2.GetRasterBand(1).Checksum() == ds.GetRasterBand(1).Checksum()
+
###############################################################################
# Check that Dataset.ReadAsArray() can accept an already allocated array (#2658, #3028)
def test_numpy_rw_7():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
array = numpy.zeros([1, ds.RasterYSize, ds.RasterXSize], numpy.uint8)
array_res = ds.ReadAsArray(buf_obj=array)
@@ -152,7 +165,7 @@ def test_numpy_rw_7():
assert ds2.GetRasterBand(1).Checksum() == ds.GetRasterBand(1).Checksum()
# With a multi band file
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
array = numpy.zeros([ds.RasterCount, ds.RasterYSize, ds.RasterXSize], numpy.uint8)
array_res = ds.ReadAsArray(buf_obj=array)
@@ -161,13 +174,14 @@ def test_numpy_rw_7():
ds2 = gdal_array.OpenArray(array)
assert ds2.GetRasterBand(1).Checksum() == ds.GetRasterBand(1).Checksum()
+
###############################################################################
# Check that Dataset.ReadAsArray() with multi-band data
def test_numpy_rw_8():
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
array = numpy.zeros([ds.RasterCount, ds.RasterYSize, ds.RasterXSize], numpy.uint8)
ds.ReadAsArray(buf_obj=array)
@@ -182,16 +196,17 @@ def test_numpy_rw_8():
def test_numpy_rw_9():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
array = ds.ReadAsArray()
- out_ds = gdal.GetDriverByName('MEM').Create('', ds.RasterYSize, ds.RasterXSize)
+ out_ds = gdal.GetDriverByName("MEM").Create("", ds.RasterYSize, ds.RasterXSize)
out_ds.GetRasterBand(1).WriteArray(array)
cs = out_ds.GetRasterBand(1).Checksum()
out_ds = None
ds = None
- assert cs == 4672, 'did not get expected checksum'
+ assert cs == 4672, "did not get expected checksum"
+
###############################################################################
# Test signed byte handling
@@ -199,68 +214,82 @@ def test_numpy_rw_9():
def test_numpy_rw_10():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/signed8.tif', 2, 1, options=['PIXELTYPE=SIGNEDBYTE'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/signed8.tif", 2, 1, options=["PIXELTYPE=SIGNEDBYTE"]
+ )
ar = numpy.array([[-128, 127]], dtype=numpy.int8)
ds.GetRasterBand(1).WriteArray(ar)
ds = None
- ds = gdal.Open('/vsimem/signed8.tif')
+ ds = gdal.Open("/vsimem/signed8.tif")
ar2 = ds.ReadAsArray()
ar3 = numpy.empty_like(ar2)
ds.GetRasterBand(1).ReadAsArray(buf_obj=ar3)
ds = None
- gdal.Unlink('/vsimem/signed8.tif')
+ gdal.Unlink("/vsimem/signed8.tif")
+
+ assert ar2[0][0] == -128 and ar2[0][1] == 127, "did not get expected result (1)"
- assert ar2[0][0] == -128 and ar2[0][1] == 127, 'did not get expected result (1)'
+ assert ar3[0][0] == -128 and ar3[0][1] == 127, "did not get expected result (2)"
- assert ar3[0][0] == -128 and ar3[0][1] == 127, 'did not get expected result (2)'
###############################################################################
# Test signed byte handling with all values set to nodata
-@pytest.mark.parametrize("options", [[], ['SPARSE_OK=YES']])
+@pytest.mark.parametrize("options", [[], ["SPARSE_OK=YES"]])
def test_numpy_rw_10_bis(options):
"""Reproduce https://github.com/mapbox/rasterio/issues/2180"""
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/signed8.tif', 2, 1,
- options=['PIXELTYPE=SIGNEDBYTE']+options)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/signed8.tif", 2, 1, options=["PIXELTYPE=SIGNEDBYTE"] + options
+ )
ar = numpy.array([[-1, -1]], dtype=numpy.int8)
ds.GetRasterBand(1).WriteArray(ar)
ds.GetRasterBand(1).SetNoDataValue(-1)
ds = None
- ds = gdal.Open('/vsimem/signed8.tif')
+ ds = gdal.Open("/vsimem/signed8.tif")
ar2 = ds.ReadAsArray()
ds = None
- gdal.Unlink('/vsimem/signed8.tif')
+ gdal.Unlink("/vsimem/signed8.tif")
assert ar2[0][0] == -1 and ar2[0][1] == -1
+
###############################################################################
# Test all datatypes
def test_numpy_rw_11():
- type_tuples = [('uint8', gdal.GDT_Byte, numpy.uint8, 255),
- ('uint16', gdal.GDT_UInt16, numpy.uint16, 65535),
- ('int16', gdal.GDT_Int16, numpy.int16, -32767),
- ('uint32', gdal.GDT_UInt32, numpy.uint32, 4294967295),
- ('int32', gdal.GDT_Int32, numpy.int32, -2147483648),
- ('uint64', gdal.GDT_UInt64, numpy.uint64, 4294967295 * 1000),
- ('int64', gdal.GDT_Int64, numpy.int64, -2147483648 * 1000),
- ('float32', gdal.GDT_Float32, numpy.float32, 1.23),
- ('float64', gdal.GDT_Float64, numpy.float64, 1.23456789),
- ('cint16', gdal.GDT_CInt16, numpy.complex64, -32768 + 32767j),
- ('cint32', gdal.GDT_CInt32, numpy.complex64, -32769 + 32768j),
- ('cfloat32', gdal.GDT_CFloat32, numpy.complex64, -32768.5 + 32767.5j),
- ('cfloat64', gdal.GDT_CFloat64, numpy.complex128, -32768.123456 + 32767.123456j)]
+ type_tuples = [
+ ("uint8", gdal.GDT_Byte, numpy.uint8, 255),
+ ("uint16", gdal.GDT_UInt16, numpy.uint16, 65535),
+ ("int16", gdal.GDT_Int16, numpy.int16, -32767),
+ ("uint32", gdal.GDT_UInt32, numpy.uint32, 4294967295),
+ ("int32", gdal.GDT_Int32, numpy.int32, -2147483648),
+ ("uint64", gdal.GDT_UInt64, numpy.uint64, 4294967295 * 1000),
+ ("int64", gdal.GDT_Int64, numpy.int64, -2147483648 * 1000),
+ ("float32", gdal.GDT_Float32, numpy.float32, 1.23),
+ ("float64", gdal.GDT_Float64, numpy.float64, 1.23456789),
+ ("cint16", gdal.GDT_CInt16, numpy.complex64, -32768 + 32767j),
+ ("cint32", gdal.GDT_CInt32, numpy.complex64, -32769 + 32768j),
+ ("cfloat32", gdal.GDT_CFloat32, numpy.complex64, -32768.5 + 32767.5j),
+ (
+ "cfloat64",
+ gdal.GDT_CFloat64,
+ numpy.complex128,
+ -32768.123456 + 32767.123456j,
+ ),
+ ]
for type_tuple in type_tuples:
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/' + type_tuple[0], 1, 1, 1, type_tuple[1])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/" + type_tuple[0], 1, 1, 1, type_tuple[1]
+ )
tmp = ds.ReadAsArray()
- assert tmp.dtype == type_tuple[2], 'did not get expected numpy type'
+ assert tmp.dtype == type_tuple[2], "did not get expected numpy type"
ar = numpy.empty([1, 1], dtype=type_tuple[2])
@@ -272,28 +301,34 @@ def test_numpy_rw_11():
expected_dt = gdal.GDT_CFloat32
if got_dt != expected_dt:
print(type_tuple[1])
- pytest.fail('did not get expected result (0)')
+ pytest.fail("did not get expected result (0)")
ar[0][0] = type_tuple[3]
ds.GetRasterBand(1).WriteArray(ar)
ds = None
- ds = gdal.Open('/vsimem/' + type_tuple[0])
+ ds = gdal.Open("/vsimem/" + type_tuple[0])
assert ds.GetRasterBand(1).DataType == type_tuple[1]
ar2 = ds.ReadAsArray()
ar3 = numpy.empty_like(ar2)
ds.GetRasterBand(1).ReadAsArray(buf_obj=ar3)
ds = None
- gdal.Unlink('/vsimem/' + type_tuple[0])
+ gdal.Unlink("/vsimem/" + type_tuple[0])
- assert (not (type_tuple[0] == 'float32' and ar2[0][0] != pytest.approx(type_tuple[3], abs=1e-6)) or \
- (type_tuple[0] != 'float32' and ar2[0][0] != type_tuple[3])), \
- 'did not get expected result (1)'
+ assert not (
+ type_tuple[0] == "float32"
+ and ar2[0][0] != pytest.approx(type_tuple[3], abs=1e-6)
+ ) or (
+ type_tuple[0] != "float32" and ar2[0][0] != type_tuple[3]
+ ), "did not get expected result (1)"
- assert (not (type_tuple[0] == 'float32' and ar3[0][0] != pytest.approx(type_tuple[3], abs=1e-6)) or \
- (type_tuple[0] != 'float32' and ar3[0][0] != type_tuple[3])), \
- 'did not get expected result (2)'
+ assert not (
+ type_tuple[0] == "float32"
+ and ar3[0][0] != pytest.approx(type_tuple[3], abs=1e-6)
+ ) or (
+ type_tuple[0] != "float32" and ar3[0][0] != type_tuple[3]
+ ), "did not get expected result (2)"
###############################################################################
@@ -308,8 +343,8 @@ def test_numpy_rw_12():
ar[1][0] = 2
ar[1][1] = 3
- drv = gdal.GetDriverByName('MEM')
- ds = drv.Create('', 1, 2, 1, gdal.GDT_Byte)
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.Create("", 1, 2, 1, gdal.GDT_Byte)
ds.GetRasterBand(1).WriteArray(ar[:, 1:])
@@ -320,14 +355,15 @@ def test_numpy_rw_12():
assert slice_read[0][0] == 1 and slice_read[1][0] == 3
+
###############################################################################
# Test expected errors
def test_numpy_rw_13():
- drv = gdal.GetDriverByName('MEM')
- ds = drv.Create('', 2, 1, 1, gdal.GDT_Byte)
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.Create("", 2, 1, 1, gdal.GDT_Byte)
ar = numpy.empty([1, 2], dtype=numpy.uint8)
ar[0][0] = 100
ar[0][1] = 200
@@ -335,67 +371,63 @@ def test_numpy_rw_13():
# Try reading into unsupported array type
ar = numpy.empty([1, 2], dtype=numpy.bool_)
- with pytest.raises(Exception, match='array does not have '
- 'corresponding GDAL data type'):
+ with pytest.raises(
+ Exception, match="array does not have " "corresponding GDAL data type"
+ ):
ds.GetRasterBand(1).ReadAsArray(buf_obj=ar)
-
# Try call with inconsistent parameters.
ar = numpy.empty([1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_ysize not consistent '
- 'with array shape'):
- ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=2,
- buf_ysize=2)
-
+ with pytest.raises(
+ Exception, match="Specified buf_ysize not consistent " "with array shape"
+ ):
+ ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=2, buf_ysize=2)
# Same with 3 dimensions
ar = numpy.empty([1, 1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_ysize not consistent '
- 'with array shape'):
- ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=2,
- buf_ysize=2)
-
+ with pytest.raises(
+ Exception, match="Specified buf_ysize not consistent " "with array shape"
+ ):
+ ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=2, buf_ysize=2)
# Try call with inconsistent parameters.
ar = numpy.empty([1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_xsize not consistent '
- 'with array shape'):
- ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=1,
- buf_ysize=1)
-
+ with pytest.raises(
+ Exception, match="Specified buf_xsize not consistent " "with array shape"
+ ):
+ ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=1, buf_ysize=1)
# Inconsistent data type
ar = numpy.empty([1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_type not consistent '
- 'with array type'):
- ds.GetRasterBand(1).ReadAsArray(buf_obj=ar,
- buf_type=gdal.GDT_Int16)
-
+ with pytest.raises(
+ Exception, match="Specified buf_type not consistent " "with array type"
+ ):
+ ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_type=gdal.GDT_Int16)
# This one should be OK !
ar = numpy.zeros([1, 2], dtype=numpy.uint8)
ds.GetRasterBand(1).ReadAsArray(buf_obj=ar, buf_xsize=2, buf_ysize=1)
- assert ar[0][0] == 100 and ar[0][1] == 200, 'did not get expected values'
+ assert ar[0][0] == 100 and ar[0][1] == 200, "did not get expected values"
# This one too
ar = numpy.zeros([1, 1, 2], dtype=numpy.uint8)
ds.GetRasterBand(1).ReadAsArray(buf_obj=ar)
- assert ar[0][0][0] == 100 and ar[0][0][1] == 200, 'did not get expected values'
+ assert ar[0][0][0] == 100 and ar[0][0][1] == 200, "did not get expected values"
# This one too
ar = numpy.zeros([1, 1, 2], dtype=numpy.uint8)
ds.ReadAsArray(buf_obj=ar)
- assert ar[0][0][0] == 100 and ar[0][0][1] == 200, 'did not get expected values'
+ assert ar[0][0][0] == 100 and ar[0][0][1] == 200, "did not get expected values"
# This one too
ar = ds.ReadAsArray()
- assert ar[0][0] == 100 and ar[0][1] == 200, 'did not get expected values'
+ assert ar[0][0] == 100 and ar[0][1] == 200, "did not get expected values"
ds = None
# With a multiband file
- drv = gdal.GetDriverByName('MEM')
- ds = drv.Create('', 2, 1, 3, gdal.GDT_Byte)
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.Create("", 2, 1, 3, gdal.GDT_Byte)
ar = numpy.empty([3, 1, 2], dtype=numpy.uint8)
ar[0][0][0] = 100
ar[0][0][1] = 200
@@ -407,71 +439,95 @@ def test_numpy_rw_13():
ds.GetRasterBand(i + 1).WriteArray(ar[i])
ar = numpy.empty([3, 1, 2], dtype=numpy.bool_)
- with pytest.raises(Exception, match='array does not have '
- 'corresponding GDAL data type'):
+ with pytest.raises(
+ Exception, match="array does not have " "corresponding GDAL data type"
+ ):
ds.ReadAsArray(buf_obj=ar)
-
# Try call with inconsistent parameters.
ar = numpy.empty([3, 1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_ysize not consistent '
- 'with array shape'):
+ with pytest.raises(
+ Exception, match="Specified buf_ysize not consistent " "with array shape"
+ ):
ds.ReadAsArray(buf_obj=ar, buf_xsize=2, buf_ysize=2)
-
# With 2 dimensions
ar = numpy.empty([1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Array should have 3 '
- 'dimensions'):
+ with pytest.raises(Exception, match="Array should have 3 " "dimensions"):
ds.ReadAsArray(buf_obj=ar)
-
# Try call with inconsistent parameters
ar = numpy.empty([3, 1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_xsize not consistent '
- 'with array shape'):
+ with pytest.raises(
+ Exception, match="Specified buf_xsize not consistent " "with array shape"
+ ):
ds.ReadAsArray(buf_obj=ar, buf_xsize=1, buf_ysize=1)
ar = numpy.empty([1, 2, 3], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_xsize not consistent '
- 'with array shape'):
- ds.ReadAsArray(buf_obj=ar, buf_xsize=1, buf_ysize=1, interleave='pixel')
+ with pytest.raises(
+ Exception, match="Specified buf_xsize not consistent " "with array shape"
+ ):
+ ds.ReadAsArray(buf_obj=ar, buf_xsize=1, buf_ysize=1, interleave="pixel")
# Inconsistent data type
ar = numpy.empty([3, 1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Specified buf_type not consistent with array type'):
+ with pytest.raises(
+ Exception, match="Specified buf_type not consistent with array type"
+ ):
ds.ReadAsArray(buf_obj=ar, buf_type=gdal.GDT_Int16)
-
# Not enough space in first dimension
ar = numpy.empty([2, 1, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Dimension 0 of array should have size 3 to store bands'):
+ with pytest.raises(
+ Exception, match="Dimension 0 of array should have size 3 to store bands"
+ ):
ds.ReadAsArray(buf_obj=ar)
# Not enough space in third dimension
ar = numpy.empty([1, 2, 2], dtype=numpy.uint8)
- with pytest.raises(Exception, match='Dimension 2 of array should have size 3 to store bands'):
- ds.ReadAsArray(buf_obj=ar, interleave='pixel')
+ with pytest.raises(
+ Exception, match="Dimension 2 of array should have size 3 to store bands"
+ ):
+ ds.ReadAsArray(buf_obj=ar, interleave="pixel")
# This one should be OK !
ar = numpy.zeros([3, 1, 2], dtype=numpy.uint8)
ds.ReadAsArray(buf_obj=ar, buf_xsize=2, buf_ysize=1, buf_type=gdal.GDT_Byte)
- assert ar[0][0][0] == 100 and ar[0][0][1] == 200 and ar[1][0][0] == 101 and ar[1][0][1] == 201 and ar[2][0][0] == 102 and ar[2][0][1] == 202, \
- 'did not get expected values'
+ assert (
+ ar[0][0][0] == 100
+ and ar[0][0][1] == 200
+ and ar[1][0][0] == 101
+ and ar[1][0][1] == 201
+ and ar[2][0][0] == 102
+ and ar[2][0][1] == 202
+ ), "did not get expected values"
# This one too
ar = numpy.zeros([3, 1, 2], dtype=numpy.uint8)
ds.ReadAsArray(buf_obj=ar)
- assert ar[0][0][0] == 100 and ar[0][0][1] == 200 and ar[1][0][0] == 101 and ar[1][0][1] == 201 and ar[2][0][0] == 102 and ar[2][0][1] == 202, \
- 'did not get expected values'
+ assert (
+ ar[0][0][0] == 100
+ and ar[0][0][1] == 200
+ and ar[1][0][0] == 101
+ and ar[1][0][1] == 201
+ and ar[2][0][0] == 102
+ and ar[2][0][1] == 202
+ ), "did not get expected values"
# This one too
ar = ds.ReadAsArray()
- assert ar[0][0][0] == 100 and ar[0][0][1] == 200 and ar[1][0][0] == 101 and ar[1][0][1] == 201 and ar[2][0][0] == 102 and ar[2][0][1] == 202, \
- 'did not get expected values'
+ assert (
+ ar[0][0][0] == 100
+ and ar[0][0][1] == 200
+ and ar[1][0][0] == 101
+ and ar[1][0][1] == 201
+ and ar[2][0][0] == 102
+ and ar[2][0][1] == 202
+ ), "did not get expected values"
ds = None
+
###############################################################################
# Test callback of ReadAsArray()
@@ -479,7 +535,7 @@ def test_numpy_rw_13():
def numpy_rw_14_progress_callback(pct, message, user_data):
# pylint: disable=unused-argument
if pct != pytest.approx(user_data[0], abs=1e-5):
- print('Expected %f, got %f' % (user_data[0], pct))
+ print("Expected %f, got %f" % (user_data[0], pct))
user_data[1] = False
user_data[0] = user_data[0] + 0.05
return 1 # 1 to continue, 0 to stop
@@ -496,7 +552,7 @@ def numpy_rw_14_progress_interrupt_callback(pct, message, user_data):
def numpy_rw_14_progress_callback_2(pct, message, user_data):
# pylint: disable=unused-argument
if pct < user_data[0]:
- print('Got %f, last pct was %f' % (pct, user_data[0]))
+ print("Got %f, last pct was %f" % (pct, user_data[0]))
return 0
user_data[0] = pct
return 1 # 1 to continue, 0 to stop
@@ -505,58 +561,68 @@ def numpy_rw_14_progress_callback_2(pct, message, user_data):
def test_numpy_rw_14():
# Progress not implemented yet
- if gdal.GetConfigOption('GTIFF_DIRECT_IO') == 'YES' or \
- gdal.GetConfigOption('GTIFF_VIRTUAL_MEM_IO') == 'YES':
+ if (
+ gdal.GetConfigOption("GTIFF_DIRECT_IO") == "YES"
+ or gdal.GetConfigOption("GTIFF_VIRTUAL_MEM_IO") == "YES"
+ ):
pytest.skip()
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
# Test RasterBand.ReadAsArray
tab = [0.05, True]
- data = ds.GetRasterBand(1).ReadAsArray(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=numpy_rw_14_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadAsArray(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=numpy_rw_14_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
assert tab[0] == pytest.approx(1.05, abs=1e-5) and tab[1]
# Test interruption
tab = [0]
- data = ds.GetRasterBand(1).ReadAsArray(callback=numpy_rw_14_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadAsArray(
+ callback=numpy_rw_14_progress_interrupt_callback, callback_data=tab
+ )
assert data is None
assert tab[0] >= 0.50
# Test Dataset.ReadAsArray
tab = [0.05, True]
- data = ds.ReadAsArray(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=numpy_rw_14_progress_callback,
- callback_data=tab)
+ data = ds.ReadAsArray(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=numpy_rw_14_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
assert tab[0] == pytest.approx(1.05, abs=1e-5) and tab[1]
# Same with interruption
tab = [0]
- data = ds.ReadAsArray(callback=numpy_rw_14_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.ReadAsArray(
+ callback=numpy_rw_14_progress_interrupt_callback, callback_data=tab
+ )
assert data is None and tab[0] >= 0.50
# Test Dataset.ReadAsArray on a multi band file
ds = None
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
last_pct = [0]
- data = ds.ReadAsArray(callback=numpy_rw_14_progress_callback_2,
- callback_data=last_pct)
+ data = ds.ReadAsArray(
+ callback=numpy_rw_14_progress_callback_2, callback_data=last_pct
+ )
assert not (data is None or last_pct[0] != pytest.approx(1.0, abs=1e-5))
last_pct = [0]
# Same but with a provided array
array = numpy.empty([ds.RasterCount, ds.RasterYSize, ds.RasterXSize], numpy.uint8)
- data = ds.ReadAsArray(buf_obj=array,
- callback=numpy_rw_14_progress_callback_2,
- callback_data=last_pct)
+ data = ds.ReadAsArray(
+ buf_obj=array, callback=numpy_rw_14_progress_callback_2, callback_data=last_pct
+ )
assert not (data is None or last_pct[0] != pytest.approx(1.0, abs=1e-5))
+
###############################################################################
# Test NumPy GetGeoTransform/SetGeoTransform
@@ -571,6 +637,7 @@ def test_numpy_rw_15():
gt = ds.GetGeoTransform()
assert gt == (1, 2, 3, 4, 5, -6)
+
###############################################################################
# Test errors of OpenArray()
@@ -595,6 +662,7 @@ def test_numpy_rw_16():
ds = gdal_array.OpenArray(array)
assert ds is None
+
###############################################################################
# Test old deprecated way with gdal_array.GetArrayFilename()
@@ -607,25 +675,26 @@ def test_numpy_rw_17():
ds = gdal.Open(gdal_array.GetArrayFilename(array))
assert ds is None
- gdal.SetConfigOption('GDAL_ARRAY_OPEN_BY_FILENAME', 'TRUE')
+ gdal.SetConfigOption("GDAL_ARRAY_OPEN_BY_FILENAME", "TRUE")
ds = gdal.Open(gdal_array.GetArrayFilename(array))
- gdal.SetConfigOption('GDAL_ARRAY_OPEN_BY_FILENAME', None)
+ gdal.SetConfigOption("GDAL_ARRAY_OPEN_BY_FILENAME", None)
assert ds is not None
# Invalid value
with gdaltest.error_handler():
- ds = gdal.Open('NUMPY:::invalid')
+ ds = gdal.Open("NUMPY:::invalid")
assert ds is None
+
###############################################################################
# Test the pixel interleave options
def test_numpy_rw_18():
- img = numpy.random.randint(0, 255, size=(256, 200, 3)).astype('uint8')
- ds = gdal_array.OpenArray(img, interleave='pixel')
- assert ds is not None, 'Failed to open memory array as dataset.'
+ img = numpy.random.randint(0, 255, size=(256, 200, 3)).astype("uint8")
+ ds = gdal_array.OpenArray(img, interleave="pixel")
+ assert ds is not None, "Failed to open memory array as dataset."
bnd1 = ds.GetRasterBand(1).ReadAsArray()
bnd2 = ds.GetRasterBand(2).ReadAsArray()
@@ -634,19 +703,21 @@ def test_numpy_rw_18():
res = numpy.dstack((bnd1, bnd2, bnd3))
assert numpy.all(img == res)
- res = ds.ReadAsArray(interleave='pixel')
+ res = ds.ReadAsArray(interleave="pixel")
assert numpy.all(img == res)
res = numpy.zeros([256, 200, 3])
- ds.ReadAsArray(buf_obj=res, interleave='pixel')
+ ds.ReadAsArray(buf_obj=res, interleave="pixel")
assert numpy.all(img == res)
+
###############################################################################
# The VRT references a non existing TIF file, but using the proxy pool dataset API (#2837)
+
def test_numpy_rw_failure_in_readasarray():
- ds = gdal.Open('data/idontexist2.vrt')
+ ds = gdal.Open("data/idontexist2.vrt")
assert ds is not None
exception_raised = False
@@ -684,74 +755,86 @@ def test_numpy_rw_gdal_array_openarray_permissions():
ds = gdal_array.OpenArray(ar)
with gdaltest.error_handler():
assert ds.GetRasterBand(1).Fill(1) != 0
- assert ds.GetRasterBand(1).Checksum() == 0
+ assert ds.GetRasterBand(1).Checksum() == 0
# Cannot read in non-writeable array
with gdaltest.error_handler():
- assert ds.ReadAsArray(buf_obj = ar) is None
- assert ds.GetRasterBand(1).ReadAsArray(buf_obj = ar) is None
+ assert ds.ReadAsArray(buf_obj=ar) is None
+ assert ds.GetRasterBand(1).ReadAsArray(buf_obj=ar) is None
###############################################################################
# Test ReadAsArray RMS subsampling.
-def test_numpy_rw_rms_resemple_alg():
- wrk_ds = gdal.Open('../gdrivers/data/int16.tif')
- assert wrk_ds is not None, 'Failed to open test dataset.'
+def test_numpy_rw_rms_resemple_alg():
- res = wrk_ds.ReadAsArray(0, 0,
- wrk_ds.RasterXSize,
- wrk_ds.RasterYSize,
- buf_xsize=wrk_ds.RasterXSize//2,
- buf_ysize=wrk_ds.RasterYSize//2,
- resample_alg=gdal.GRIORA_RMS)
+ wrk_ds = gdal.Open("../gdrivers/data/int16.tif")
+ assert wrk_ds is not None, "Failed to open test dataset."
+
+ res = wrk_ds.ReadAsArray(
+ 0,
+ 0,
+ wrk_ds.RasterXSize,
+ wrk_ds.RasterYSize,
+ buf_xsize=wrk_ds.RasterXSize // 2,
+ buf_ysize=wrk_ds.RasterYSize // 2,
+ resample_alg=gdal.GRIORA_RMS,
+ )
cs = res.sum()
exp_cs = 12773
- assert cs == exp_cs, 'got wrong rms sum'
-
+ assert cs == exp_cs, "got wrong rms sum"
###############################################################################
# Test Dataset.ReadAsArray() with band_list
-def test_numpy_rw_dataset_read_as_array():
- wrk_ds = gdal.Open('../gdrivers/data/rgbsmall.tif')
-
- assert numpy.array_equal(wrk_ds.ReadAsArray(band_list=[2]),
- wrk_ds.GetRasterBand(2).ReadAsArray())
+def test_numpy_rw_dataset_read_as_array():
- assert numpy.array_equal(wrk_ds.ReadAsArray(band_list=[2,1]),
- numpy.stack(
- [wrk_ds.GetRasterBand(2).ReadAsArray(),
- wrk_ds.GetRasterBand(1).ReadAsArray()]))
+ wrk_ds = gdal.Open("../gdrivers/data/rgbsmall.tif")
+ assert numpy.array_equal(
+ wrk_ds.ReadAsArray(band_list=[2]), wrk_ds.GetRasterBand(2).ReadAsArray()
+ )
+ assert numpy.array_equal(
+ wrk_ds.ReadAsArray(band_list=[2, 1]),
+ numpy.stack(
+ [
+ wrk_ds.GetRasterBand(2).ReadAsArray(),
+ wrk_ds.GetRasterBand(1).ReadAsArray(),
+ ]
+ ),
+ )
###############################################################################
# Test Dataset.WriteArray()
+
def test_numpy_rw_dataset_writearray():
# Write 2D array in single-band dataset
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2)
- ar = numpy.array([[0,1,2],[3,4,5]], dtype=numpy.uint8)
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2)
+ ar = numpy.array([[0, 1, 2], [3, 4, 5]], dtype=numpy.uint8)
assert ds.WriteArray(ar) == 0
assert numpy.array_equal(ds.ReadAsArray(), ar)
# Use WriteRaster interface
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2)
- assert ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar.astype(numpy.uint32)) == 0
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2)
+ assert (
+ ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar.astype(numpy.uint32))
+ == 0
+ )
assert numpy.array_equal(ds.ReadAsArray(), ar)
with pytest.raises(Exception):
ds.WriteArray(None)
with pytest.raises(Exception):
- ds.WriteArray('not an array')
+ ds.WriteArray("not an array")
# 1D array
with pytest.raises(Exception):
@@ -759,59 +842,83 @@ def test_numpy_rw_dataset_writearray():
# Too big 2D array in X
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[0,1,2,10],[3,4,5,20]], dtype=numpy.uint8))
+ ds.WriteArray(numpy.array([[0, 1, 2, 10], [3, 4, 5, 20]], dtype=numpy.uint8))
# Write 3D array in single-band dataset
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2)
- ar = numpy.array([[[0,1,2],[3,4,5]]], dtype=numpy.uint8)
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2)
+ ar = numpy.array([[[0, 1, 2], [3, 4, 5]]], dtype=numpy.uint8)
assert ds.WriteArray(ar) == 0
assert numpy.array_equal(ds.ReadAsArray(), ar[0])
# ar.shape[0] != 1
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[[0,1,2],[3,4,5]],[[0,1,2],[3,4,5]]]))
+ ds.WriteArray(numpy.array([[[0, 1, 2], [3, 4, 5]], [[0, 1, 2], [3, 4, 5]]]))
# Write 3D array in two-band dataset
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2, 2)
- ar = numpy.array([[[0,1,2],[3,4,5]],[[10,11,12],[13,14,15]]], dtype=numpy.uint8)
- assert ds.WriteRaster(0,0,3,2,memoryview(ar)) == 0
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2, 2)
+ ar = numpy.array(
+ [[[0, 1, 2], [3, 4, 5]], [[10, 11, 12], [13, 14, 15]]], dtype=numpy.uint8
+ )
+ assert ds.WriteRaster(0, 0, 3, 2, memoryview(ar)) == 0
assert numpy.array_equal(ds.ReadAsArray(), ar)
# Non-native data type
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2, 2)
assert ds.WriteArray(ar.astype(numpy.int32)) == 0
assert numpy.array_equal(ds.ReadAsArray(), ar)
# interleave='pixel'
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2, 2)
- assert ds.WriteArray(numpy.transpose(ar, (1,2,0)), interleave='pixel') == 0
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2, 2)
+ assert ds.WriteArray(numpy.transpose(ar, (1, 2, 0)), interleave="pixel") == 0
assert numpy.array_equal(ds.ReadAsArray(), ar)
# band_list
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2, 2)
- assert ds.WriteArray(ar[::-1,...], band_list=[2,1]) == 0
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2, 2)
+ assert ds.WriteArray(ar[::-1, ...], band_list=[2, 1]) == 0
assert numpy.array_equal(ds.ReadAsArray(), ar)
# Use WriteRaster interface
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2, 2)
- assert ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar.astype(numpy.uint32)) == 0
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2, 2)
+ assert (
+ ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, ar.astype(numpy.uint32))
+ == 0
+ )
assert numpy.array_equal(ds.ReadAsArray(), ar)
# 2D array
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[0,1,2,0],[3,4,5,0]]))
+ ds.WriteArray(numpy.array([[0, 1, 2, 0], [3, 4, 5, 0]]))
# Too big 3D array in X
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[[0,1,2,0],[3,4,5,0]],[[10,11,12,0],[13,14,15,0]]]))
+ ds.WriteArray(
+ numpy.array(
+ [[[0, 1, 2, 0], [3, 4, 5, 0]], [[10, 11, 12, 0], [13, 14, 15, 0]]]
+ )
+ )
# Too big 3D array in Y
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[[0,1,2],[3,4,5],[3,4,5]],[[10,11,12],[13,14,15],[13,14,15]]]))
+ ds.WriteArray(
+ numpy.array(
+ [
+ [[0, 1, 2], [3, 4, 5], [3, 4, 5]],
+ [[10, 11, 12], [13, 14, 15], [13, 14, 15]],
+ ]
+ )
+ )
# Too big 3D array in band dimension
with pytest.raises(Exception):
- ds.WriteArray(numpy.array([[[0,1,2],[3,4,5]],[[10,11,12],[13,14,15]],[[10,11,12],[13,14,15]]]))
+ ds.WriteArray(
+ numpy.array(
+ [
+ [[0, 1, 2], [3, 4, 5]],
+ [[10, 11, 12], [13, 14, 15]],
+ [[10, 11, 12], [13, 14, 15]],
+ ]
+ )
+ )
###############################################################################
@@ -820,26 +927,30 @@ def test_numpy_rw_dataset_writearray():
def test_numpy_rw_band_read_as_array_error_cases():
- ds = gdal.GetDriverByName('MEM').Create('', 3, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 3, 2)
band = ds.GetRasterBand(1)
- assert band.ReadAsArray(buf_obj = numpy.empty((3,2), dtype=numpy.uint8)) is not None
- assert band.ReadAsArray(buf_obj = numpy.empty((1, 3,2), dtype=numpy.uint8)) is not None
+ assert band.ReadAsArray(buf_obj=numpy.empty((3, 2), dtype=numpy.uint8)) is not None
+ assert (
+ band.ReadAsArray(buf_obj=numpy.empty((1, 3, 2), dtype=numpy.uint8)) is not None
+ )
# 1D
- with pytest.raises(Exception, match='expected array of dimension 2 or 3'):
- band.ReadAsArray(buf_obj = numpy.empty((3,), dtype=numpy.uint8))
+ with pytest.raises(Exception, match="expected array of dimension 2 or 3"):
+ band.ReadAsArray(buf_obj=numpy.empty((3,), dtype=numpy.uint8))
# 3D of wrong size in first dimension
- with pytest.raises(Exception, match='expected size of first dimension should be 0'):
- band.ReadAsArray(buf_obj = numpy.empty((2, 3,2), dtype=numpy.uint8))
+ with pytest.raises(Exception, match="expected size of first dimension should be 0"):
+ band.ReadAsArray(buf_obj=numpy.empty((2, 3, 2), dtype=numpy.uint8))
###############################################################################
# Test that we can get an error (#5374)
+
def test_numpy_rw_band_read_as_array_getlasterrormsg():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
Scaling
invalid
@@ -849,8 +960,9 @@ def test_numpy_rw_band_read_as_array_getlasterrormsg():
1
-""")
+"""
+ )
gdal.ErrorReset()
with gdaltest.error_handler():
assert ds.GetRasterBand(1).ReadAsArray() is None
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
diff --git a/autotest/gcore/numpy_rw_multidim.py b/autotest/gcore/numpy_rw_multidim.py
index 4dae7fb17064..4ac9208cf7fa 100755
--- a/autotest/gcore/numpy_rw_multidim.py
+++ b/autotest/gcore/numpy_rw_multidim.py
@@ -29,11 +29,12 @@
###############################################################################
+import struct
import gdaltest
-from osgeo import gdal
import pytest
-import struct
+
+from osgeo import gdal
###############################################################################
# verify that we can load Numeric python, and find the Numpy driver.
@@ -43,12 +44,13 @@ def test_numpy_rw_multidim_init():
gdaltest.numpy_drv = None
# importing gdal_array will allow numpy driver registration
- pytest.importorskip('osgeo.gdal_array')
+ pytest.importorskip("osgeo.gdal_array")
gdal.AllRegister()
- gdaltest.numpy_drv = gdal.GetDriverByName('NUMPY')
- assert gdaltest.numpy_drv is not None, 'NUMPY driver not found!'
+ gdaltest.numpy_drv = gdal.GetDriverByName("NUMPY")
+ assert gdaltest.numpy_drv is not None, "NUMPY driver not found!"
+
###############################################################################
@@ -59,23 +61,39 @@ def test_numpy_rw_multidim_readasarray_writearray():
pytest.skip()
import numpy as np
- drv = gdal.GetDriverByName('MEM')
- ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.CreateMultiDimensional("myds")
rg = ds.GetRootGroup()
dim0 = rg.CreateDimension("dim0", None, None, 2)
dim1 = rg.CreateDimension("dim1", None, None, 3)
- myarray = rg.CreateMDArray("myarray", [ dim0, dim1 ],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ myarray = rg.CreateMDArray(
+ "myarray", [dim0, dim1], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
assert myarray
- ar = np.array([[1,2,3], [4,5,6]], dtype=np.uint8)
+ ar = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)
assert myarray.WriteArray(ar) == gdal.CE_None
got_ar = myarray.ReadAsArray()
assert got_ar.shape == (2, 3)
assert np.array_equal(got_ar, ar)
# Check algo with non-numpy method so as to detect issues with buffer striding
- assert struct.unpack('B' * 6, myarray.Read()) == (1, 2, 3, 4, 5, 6)
- assert struct.unpack('B' * 6, myarray.Read(buffer_stride = [3, 1])) == (1, 2, 3, 4, 5, 6)
- assert struct.unpack('B' * 6, myarray.Read(buffer_stride = [1, 2])) == (1, 4, 2, 5, 3, 6)
+ assert struct.unpack("B" * 6, myarray.Read()) == (1, 2, 3, 4, 5, 6)
+ assert struct.unpack("B" * 6, myarray.Read(buffer_stride=[3, 1])) == (
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ )
+ assert struct.unpack("B" * 6, myarray.Read(buffer_stride=[1, 2])) == (
+ 1,
+ 4,
+ 2,
+ 5,
+ 3,
+ 6,
+ )
+
###############################################################################
@@ -84,19 +102,32 @@ def test_numpy_rw_multidim_numpy_array_as_dataset():
if gdaltest.numpy_drv is None:
pytest.skip()
- from osgeo import gdal_array
import numpy as np
- for typ in (np.int8, np.uint8, np.uint16, np.int16, np.uint32, np.int32, np.float32, np.float64, np.cfloat, np.cdouble):
- ar = np.array([[1,2,3], [4,5,6]], dtype=typ)
+ from osgeo import gdal_array
+
+ for typ in (
+ np.int8,
+ np.uint8,
+ np.uint16,
+ np.int16,
+ np.uint32,
+ np.int32,
+ np.float32,
+ np.float64,
+ np.cfloat,
+ np.cdouble,
+ ):
+ ar = np.array([[1, 2, 3], [4, 5, 6]], dtype=typ)
ds = gdal_array.OpenMultiDimensionalNumPyArray(ar)
assert ds
rg = ds.GetRootGroup()
assert rg
- myarray = rg.OpenMDArray('array')
+ myarray = rg.OpenMDArray("array")
assert myarray
assert np.array_equal(myarray.ReadAsArray(), ar)
+
###############################################################################
@@ -106,24 +137,40 @@ def test_numpy_rw_multidim_readasarray_writearray_negative_strides():
pytest.skip()
import numpy as np
- drv = gdal.GetDriverByName('MEM')
- ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.CreateMultiDimensional("myds")
rg = ds.GetRootGroup()
dim0 = rg.CreateDimension("dim0", None, None, 2)
dim1 = rg.CreateDimension("dim1", None, None, 3)
- myarray = rg.CreateMDArray("myarray", [ dim0, dim1 ],
- gdal.ExtendedDataType.Create(gdal.GDT_Byte))
+ myarray = rg.CreateMDArray(
+ "myarray", [dim0, dim1], gdal.ExtendedDataType.Create(gdal.GDT_Byte)
+ )
assert myarray
- ar = np.array([[1,2,3], [4,5,6]], dtype=np.uint8)
- ar = ar[::-1,::-1] # Test negative strides
+ ar = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)
+ ar = ar[::-1, ::-1] # Test negative strides
assert myarray.WriteArray(ar) == gdal.CE_None
got_ar = myarray.ReadAsArray()
assert got_ar.shape == (2, 3)
assert np.array_equal(got_ar, ar)
# Check algo with non-numpy method so as to detect issues with buffer striding
- assert struct.unpack('B' * 6, myarray.Read()) == (6, 5, 4, 3, 2, 1)
- assert struct.unpack('B' * 6, myarray.Read(buffer_stride = [3, 1])) == (6, 5, 4, 3, 2, 1)
- assert struct.unpack('B' * 6, myarray.Read(buffer_stride = [1, 2])) == (6, 3, 5, 2, 4, 1)
+ assert struct.unpack("B" * 6, myarray.Read()) == (6, 5, 4, 3, 2, 1)
+ assert struct.unpack("B" * 6, myarray.Read(buffer_stride=[3, 1])) == (
+ 6,
+ 5,
+ 4,
+ 3,
+ 2,
+ 1,
+ )
+ assert struct.unpack("B" * 6, myarray.Read(buffer_stride=[1, 2])) == (
+ 6,
+ 3,
+ 5,
+ 2,
+ 4,
+ 1,
+ )
+
###############################################################################
@@ -132,20 +179,33 @@ def test_numpy_rw_multidim_numpy_array_as_dataset_negative_strides():
if gdaltest.numpy_drv is None:
pytest.skip()
- from osgeo import gdal_array
import numpy as np
- for typ in (np.int8, np.uint8, np.uint16, np.int16, np.uint32, np.int32, np.float32, np.float64, np.cfloat, np.cdouble):
- ar = np.array([[1,2,3], [4,5,6]], dtype=typ)
- ar = ar[::-1,::-1] # Test negative strides
+ from osgeo import gdal_array
+
+ for typ in (
+ np.int8,
+ np.uint8,
+ np.uint16,
+ np.int16,
+ np.uint32,
+ np.int32,
+ np.float32,
+ np.float64,
+ np.cfloat,
+ np.cdouble,
+ ):
+ ar = np.array([[1, 2, 3], [4, 5, 6]], dtype=typ)
+ ar = ar[::-1, ::-1] # Test negative strides
ds = gdal_array.OpenMultiDimensionalNumPyArray(ar)
assert ds
rg = ds.GetRootGroup()
assert rg
- myarray = rg.OpenMDArray('array')
+ myarray = rg.OpenMDArray("array")
assert myarray
assert np.array_equal(myarray.ReadAsArray(), ar)
+
###############################################################################
@@ -153,63 +213,82 @@ def test_numpy_rw_multidim_compound_datatype():
if gdaltest.numpy_drv is None:
pytest.skip()
- from osgeo import gdal_array
import numpy as np
- drv = gdal.GetDriverByName('MEM')
- ds = drv.CreateMultiDimensional('myds')
+ from osgeo import gdal_array
+
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.CreateMultiDimensional("myds")
rg = ds.GetRootGroup()
dim = rg.CreateDimension("dim0", None, None, 2)
- comp0 = gdal.EDTComponent.Create('x', 0, gdal.ExtendedDataType.Create(gdal.GDT_Int16))
- comp1 = gdal.EDTComponent.Create('y', 4, gdal.ExtendedDataType.Create(gdal.GDT_Int32))
+ comp0 = gdal.EDTComponent.Create(
+ "x", 0, gdal.ExtendedDataType.Create(gdal.GDT_Int16)
+ )
+ comp1 = gdal.EDTComponent.Create(
+ "y", 4, gdal.ExtendedDataType.Create(gdal.GDT_Int32)
+ )
dt = gdal.ExtendedDataType.CreateCompound("mytype", 8, [comp0, comp1])
- myarray = rg.CreateMDArray("myarray", [ dim ], dt)
+ myarray = rg.CreateMDArray("myarray", [dim], dt)
assert myarray
numpydt = gdal_array.ExtendedDataTypeToNumPyDataType(dt)
assert numpydt.itemsize == 8
- assert numpydt.names == ('x', 'y')
- assert numpydt.fields['x'] == (np.int16, 0)
- assert numpydt.fields['y'] == (np.int32, 4)
-
- assert myarray.Write(struct.pack('hi' * 2, 32767, 1000000, -32768, -1000000)) == gdal.CE_None
+ assert numpydt.names == ("x", "y")
+ assert numpydt.fields["x"] == (np.int16, 0)
+ assert numpydt.fields["y"] == (np.int32, 4)
+
+ assert (
+ myarray.Write(struct.pack("hi" * 2, 32767, 1000000, -32768, -1000000))
+ == gdal.CE_None
+ )
res = myarray.ReadAsArray()
assert res.dtype == numpydt
- assert np.array_equal(res, np.array([( 32767, 1000000), (-32768, -1000000)], dtype = res.dtype))
+ assert np.array_equal(
+ res, np.array([(32767, 1000000), (-32768, -1000000)], dtype=res.dtype)
+ )
- ar = np.array([( -32768, -1000000), (-32767, 1000000)], dtype = numpydt)
+ ar = np.array([(-32768, -1000000), (-32767, 1000000)], dtype=numpydt)
assert myarray.WriteArray(ar) == gdal.CE_None
res = myarray.ReadAsArray()
assert np.array_equal(res, ar)
+
###############################################################################
-@pytest.mark.parametrize("datatype", [gdal.GDT_Byte,
- gdal.GDT_Int16,
- gdal.GDT_UInt16,
- gdal.GDT_Int32,
- gdal.GDT_UInt32,
- gdal.GDT_Float32,
- gdal.GDT_Float64,
- gdal.GDT_CInt16,
- gdal.GDT_CInt32,
- gdal.GDT_CFloat32,
- gdal.GDT_CFloat64, ], ids=gdal.GetDataTypeName)
+@pytest.mark.parametrize(
+ "datatype",
+ [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CInt16,
+ gdal.GDT_CInt32,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ],
+ ids=gdal.GetDataTypeName,
+)
def test_numpy_rw_multidim_datatype(datatype):
if gdaltest.numpy_drv is None:
pytest.skip()
import numpy as np
- drv = gdal.GetDriverByName('MEM')
- ds = drv.CreateMultiDimensional('myds')
+ drv = gdal.GetDriverByName("MEM")
+ ds = drv.CreateMultiDimensional("myds")
rg = ds.GetRootGroup()
dim = rg.CreateDimension("dim0", None, None, 2)
- myarray = rg.CreateMDArray("myarray", [ dim ], gdal.ExtendedDataType.Create(datatype))
+ myarray = rg.CreateMDArray("myarray", [dim], gdal.ExtendedDataType.Create(datatype))
assert myarray
numpy_ar = np.reshape(np.arange(0, 2, dtype=np.uint16), (2,))
assert myarray.WriteArray(numpy_ar) == gdal.CE_None
got = myarray.ReadAsArray()
assert np.array_equal(got, numpy_ar)
- assert np.array_equal(myarray.ReadAsArray(buf_obj = np.zeros(got.shape, got.dtype)), numpy_ar)
+ assert np.array_equal(
+ myarray.ReadAsArray(buf_obj=np.zeros(got.shape, got.dtype)), numpy_ar
+ )
diff --git a/autotest/gcore/overviewds.py b/autotest/gcore/overviewds.py
index 29ba1d23a27e..9e29417668a7 100755
--- a/autotest/gcore/overviewds.py
+++ b/autotest/gcore/overviewds.py
@@ -29,57 +29,66 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import gdaltest
import os
import shutil
import struct
-from osgeo import gdal
+import gdaltest
import pytest
+from osgeo import gdal
+
###############################################################################
# Error cases
def test_overviewds_1():
- ds = gdal.OpenEx('data/byte.tif', open_options=['OVERVIEW_LEVEL=0'])
+ ds = gdal.OpenEx("data/byte.tif", open_options=["OVERVIEW_LEVEL=0"])
assert ds is None
+
###############################################################################
# Nominal cases
+
@pytest.mark.parametrize("externalOverviews", [True, False])
def test_overviewds_2(tmp_path, externalOverviews):
- shutil.copy('data/byte.tif', tmp_path)
- tmpfilename = str(tmp_path.joinpath('byte.tif'))
+ shutil.copy("data/byte.tif", tmp_path)
+ tmpfilename = str(tmp_path.joinpath("byte.tif"))
if externalOverviews:
ds = gdal.Open(tmpfilename)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
ds = gdal.Open(tmpfilename, gdal.GA_Update)
else:
ds = gdal.Open(tmpfilename, gdal.GA_Update)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- ds.GetRasterBand(1).WriteRaster(2, 2, 5, 5, b'\0' * 25)
- ds.GetRasterBand(1).WriteRaster(2, 2, 1, 1, b'\0')
- ds.GetRasterBand(1).GetOverview(1).WriteRaster(2, 2, 1, 1, b'\0')
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ ds.GetRasterBand(1).WriteRaster(2, 2, 5, 5, b"\0" * 25)
+ ds.GetRasterBand(1).WriteRaster(2, 2, 1, 1, b"\0")
+ ds.GetRasterBand(1).GetOverview(1).WriteRaster(2, 2, 1, 1, b"\0")
ds = None
src_ds = gdal.Open(tmpfilename)
- ds = gdal.OpenEx(tmpfilename, open_options=['OVERVIEW_LEVEL=NONE'])
+ ds = gdal.OpenEx(tmpfilename, open_options=["OVERVIEW_LEVEL=NONE"])
assert ds.RasterXSize == 20 and ds.RasterYSize == 20 and ds.RasterCount == 1
assert ds.GetRasterBand(1).GetOverviewCount() == 0
assert ds.GetProjectionRef() == src_ds.GetProjectionRef()
assert ds.GetGeoTransform() == src_ds.GetGeoTransform()
assert ds.ReadRaster() == src_ds.ReadRaster()
# Check that subsampled request doesn't use source overviews
- assert ds.ReadRaster(0, 0, 20, 20, 10, 10) != src_ds.GetRasterBand(1).GetOverview(0).ReadRaster()
- assert ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20, 10, 10) != src_ds.GetRasterBand(1).GetOverview(0).ReadRaster()
+ assert (
+ ds.ReadRaster(0, 0, 20, 20, 10, 10)
+ != src_ds.GetRasterBand(1).GetOverview(0).ReadRaster()
+ )
+ assert (
+ ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20, 10, 10)
+ != src_ds.GetRasterBand(1).GetOverview(0).ReadRaster()
+ )
ds = None
- ds = gdal.OpenEx(tmpfilename, open_options=['OVERVIEW_LEVEL=0only'])
+ ds = gdal.OpenEx(tmpfilename, open_options=["OVERVIEW_LEVEL=0only"])
assert ds.RasterXSize == 10 and ds.RasterYSize == 10 and ds.RasterCount == 1
assert ds.GetRasterBand(1).GetOverviewCount() == 0
expected_data = src_ds.GetRasterBand(1).GetOverview(1).ReadRaster()
@@ -91,16 +100,27 @@ def test_overviewds_2(tmp_path, externalOverviews):
assert got_data != expected_data
ds = None
- ds = gdal.OpenEx(tmpfilename, open_options=['OVERVIEW_LEVEL=0'])
+ ds = gdal.OpenEx(tmpfilename, open_options=["OVERVIEW_LEVEL=0"])
assert ds is not None
assert ds.RasterXSize == 10 and ds.RasterYSize == 10 and ds.RasterCount == 1
assert ds.GetProjectionRef() == src_ds.GetProjectionRef()
src_gt = src_ds.GetGeoTransform()
- expected_gt = (src_gt[0], src_gt[1] * 2, src_gt[2], src_gt[3], src_gt[4], src_gt[5] * 2)
+ expected_gt = (
+ src_gt[0],
+ src_gt[1] * 2,
+ src_gt[2],
+ src_gt[3],
+ src_gt[4],
+ src_gt[5] * 2,
+ )
gt = ds.GetGeoTransform()
for i in range(6):
assert expected_gt[i] == pytest.approx(gt[i], abs=1e-5)
- assert ds.GetGCPCount() == 0 and ds.GetGCPProjection() == src_ds.GetGCPProjection() and not ds.GetGCPs()
+ assert (
+ ds.GetGCPCount() == 0
+ and ds.GetGCPProjection() == src_ds.GetGCPProjection()
+ and not ds.GetGCPs()
+ )
expected_data = src_ds.GetRasterBand(1).GetOverview(0).ReadRaster()
got_data = ds.ReadRaster()
assert expected_data == got_data
@@ -117,20 +137,23 @@ def test_overviewds_2(tmp_path, externalOverviews):
assert ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_ALL_VALID
assert ds.GetRasterBand(1).GetMaskBand()
assert ds.GetMetadata() == src_ds.GetMetadata()
- assert ds.GetMetadataItem('AREA_OR_POINT') == src_ds.GetMetadataItem('AREA_OR_POINT')
- assert not ds.GetMetadata('RPC')
- assert not ds.GetMetadata('GEOLOCATION')
- assert ds.GetMetadataItem('RPC', 'FOO') is None
+ assert ds.GetMetadataItem("AREA_OR_POINT") == src_ds.GetMetadataItem(
+ "AREA_OR_POINT"
+ )
+ assert not ds.GetMetadata("RPC")
+ assert not ds.GetMetadata("GEOLOCATION")
+ assert ds.GetMetadataItem("RPC", "FOO") is None
ds = None
+
###############################################################################
# Test GCP
def test_overviewds_3():
- src_ds = gdal.Open('data/byte.tif')
- ds = gdal.GetDriverByName('GTiff').CreateCopy('tmp/byte.tif', src_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdal.GetDriverByName("GTiff").CreateCopy("tmp/byte.tif", src_ds)
ds.SetGeoTransform([0, 1, 0, 0, 0, 1]) # cancel geotransform
gcp1 = gdal.GCP()
gcp1.GCPPixel = 0
@@ -150,32 +173,37 @@ def test_overviewds_3():
src_gcps = (gcp1, gcp2, gcp3)
ds.SetGCPs(src_gcps, src_ds.GetProjectionRef())
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_POLYNOMIAL'])
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_POLYNOMIAL"])
(_, ref_pnt) = tr.TransformPoint(0, 20, 10)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- ds = gdal.OpenEx('tmp/byte.tif', open_options=['OVERVIEW_LEVEL=0'])
+ ds = gdal.OpenEx("tmp/byte.tif", open_options=["OVERVIEW_LEVEL=0"])
gcps = ds.GetGCPs()
for i in range(3):
- assert (gcps[i].GCPPixel == src_gcps[i].GCPPixel / 2 and gcps[i].GCPLine == src_gcps[i].GCPLine / 2 and \
- gcps[i].GCPX == src_gcps[i].GCPX and gcps[i].GCPY == src_gcps[i].GCPY)
+ assert (
+ gcps[i].GCPPixel == src_gcps[i].GCPPixel / 2
+ and gcps[i].GCPLine == src_gcps[i].GCPLine / 2
+ and gcps[i].GCPX == src_gcps[i].GCPX
+ and gcps[i].GCPY == src_gcps[i].GCPY
+ )
# Really check that the transformer works
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_POLYNOMIAL'])
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_POLYNOMIAL"])
(_, pnt) = tr.TransformPoint(0, 20 / 2.0, 10 / 2.0)
for i in range(3):
assert ref_pnt[i] == pytest.approx(pnt[i], abs=1e-5)
ds = None
+
###############################################################################
# Test RPC
def myfloat(s):
- p = s.rfind(' ')
+ p = s.rfind(" ")
if p >= 0:
s = s[0:p]
return float(s)
@@ -183,23 +211,28 @@ def myfloat(s):
def test_overviewds_4():
- shutil.copy('data/byte.tif', 'tmp/byte.tif')
- shutil.copy('data/test_rpc.txt', 'tmp/byte_rpc.txt')
- ds = gdal.Open('tmp/byte.tif')
- rpc_md = ds.GetMetadata('RPC')
+ shutil.copy("data/byte.tif", "tmp/byte.tif")
+ shutil.copy("data/test_rpc.txt", "tmp/byte_rpc.txt")
+ ds = gdal.Open("tmp/byte.tif")
+ rpc_md = ds.GetMetadata("RPC")
- tr = gdal.Transformer(ds, None, ['METHOD=RPC'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC"])
(_, ref_pnt) = tr.TransformPoint(0, 20, 10)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- ds = gdal.OpenEx('tmp/byte.tif', open_options=['OVERVIEW_LEVEL=0'])
- got_md = ds.GetMetadata('RPC')
+ ds = gdal.OpenEx("tmp/byte.tif", open_options=["OVERVIEW_LEVEL=0"])
+ got_md = ds.GetMetadata("RPC")
for key in rpc_md:
- assert ds.GetMetadataItem(key, 'RPC') == got_md[key]
- if key == 'LINE_SCALE' or key == 'SAMP_SCALE' or key == 'LINE_OFF' or key == 'SAMP_OFF':
+ assert ds.GetMetadataItem(key, "RPC") == got_md[key]
+ if (
+ key == "LINE_SCALE"
+ or key == "SAMP_SCALE"
+ or key == "LINE_OFF"
+ or key == "SAMP_OFF"
+ ):
assert float(got_md[key]) == myfloat(rpc_md[key]) / 2
elif got_md[key] != rpc_md[key]:
print(got_md[key])
@@ -207,7 +240,7 @@ def test_overviewds_4():
pytest.fail(key)
# Really check that the transformer works
- tr = gdal.Transformer(ds, None, ['METHOD=RPC'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC"])
(_, pnt) = tr.TransformPoint(0, 20 / 2.0, 10 / 2.0)
for i in range(3):
@@ -216,7 +249,7 @@ def test_overviewds_4():
ds = None
try:
- os.remove('tmp/byte_rpc.txt')
+ os.remove("tmp/byte_rpc.txt")
except OSError:
pass
@@ -227,34 +260,38 @@ def test_overviewds_4():
def test_overviewds_5():
- shutil.copy('data/sstgeo.tif', 'tmp/sstgeo.tif')
- shutil.copy('data/sstgeo.vrt', 'tmp/sstgeo.vrt')
+ shutil.copy("data/sstgeo.tif", "tmp/sstgeo.tif")
+ shutil.copy("data/sstgeo.vrt", "tmp/sstgeo.vrt")
- ds = gdal.Open('tmp/sstgeo.vrt')
- geoloc_md = ds.GetMetadata('GEOLOCATION')
+ ds = gdal.Open("tmp/sstgeo.vrt")
+ geoloc_md = ds.GetMetadata("GEOLOCATION")
- tr = gdal.Transformer(ds, None, ['METHOD=GEOLOC_ARRAY'])
+ tr = gdal.Transformer(ds, None, ["METHOD=GEOLOC_ARRAY"])
(_, ref_pnt) = tr.TransformPoint(0, 20, 10)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- ds = gdal.OpenEx('tmp/sstgeo.vrt', open_options=['OVERVIEW_LEVEL=0'])
- got_md = ds.GetMetadata('GEOLOCATION')
+ ds = gdal.OpenEx("tmp/sstgeo.vrt", open_options=["OVERVIEW_LEVEL=0"])
+ got_md = ds.GetMetadata("GEOLOCATION")
for key in geoloc_md:
- assert ds.GetMetadataItem(key, 'GEOLOCATION') == got_md[key]
- if key == 'PIXEL_OFFSET' or key == 'LINE_OFFSET':
- assert float(got_md[key]) == pytest.approx(myfloat(geoloc_md[key]) * 2, abs=1e-1)
- elif key == 'PIXEL_STEP' or key == 'LINE_STEP':
- assert float(got_md[key]) == pytest.approx(myfloat(geoloc_md[key]) / 2, abs=1e-1)
+ assert ds.GetMetadataItem(key, "GEOLOCATION") == got_md[key]
+ if key == "PIXEL_OFFSET" or key == "LINE_OFFSET":
+ assert float(got_md[key]) == pytest.approx(
+ myfloat(geoloc_md[key]) * 2, abs=1e-1
+ )
+ elif key == "PIXEL_STEP" or key == "LINE_STEP":
+ assert float(got_md[key]) == pytest.approx(
+ myfloat(geoloc_md[key]) / 2, abs=1e-1
+ )
elif got_md[key] != geoloc_md[key]:
print(got_md[key])
print(geoloc_md[key])
pytest.fail(key)
# Really check that the transformer works
- tr = gdal.Transformer(ds, None, ['METHOD=GEOLOC_ARRAY'])
+ tr = gdal.Transformer(ds, None, ["METHOD=GEOLOC_ARRAY"])
expected_xyz = (20.0 / 2, 10.0 / 2, 0)
(_, pnt) = tr.TransformPoint(1, ref_pnt[0], ref_pnt[1])
@@ -262,59 +299,67 @@ def test_overviewds_5():
assert pnt[i] == pytest.approx(expected_xyz[i], abs=0.5)
ds = None
+
###############################################################################
# Test VRT
def test_overviewds_6():
- shutil.copy('data/byte.tif', 'tmp')
- ds = gdal.Open('tmp/byte.tif')
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ shutil.copy("data/byte.tif", "tmp")
+ ds = gdal.Open("tmp/byte.tif")
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
ds = None
- src_ds = gdal.OpenEx('tmp/byte.tif', open_options=['OVERVIEW_LEVEL=0'])
+ src_ds = gdal.OpenEx("tmp/byte.tif", open_options=["OVERVIEW_LEVEL=0"])
expected_cs = src_ds.GetRasterBand(1).Checksum()
- ds = gdal.GetDriverByName('VRT').CreateCopy('tmp/byte.vrt', src_ds)
+ ds = gdal.GetDriverByName("VRT").CreateCopy("tmp/byte.vrt", src_ds)
ds = None
src_ds = None
- ds = gdal.Open('tmp/byte.vrt')
+ ds = gdal.Open("tmp/byte.vrt")
assert ds.RasterXSize == 10 and ds.RasterYSize == 10 and ds.RasterCount == 1
got_cs = ds.GetRasterBand(1).Checksum()
assert got_cs == expected_cs
ds = None
+
###############################################################################
# Dataset with a mask
+
def test_overviewds_mask():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- src_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test.tif', 4, 4)
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ src_ds = gdal.GetDriverByName("GTiff").Create("/vsimem/test.tif", 4, 4)
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 2, 4, b'\xFF' * 8)
- src_ds.BuildOverviews('NEAR', [2, 4])
+ src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 2, 4, b"\xFF" * 8)
+ src_ds.BuildOverviews("NEAR", [2, 4])
src_ds = None
- ovr_ds = gdal.OpenEx('/vsimem/test.tif', open_options=['OVERVIEW_LEVEL=0'])
+ ovr_ds = gdal.OpenEx("/vsimem/test.tif", open_options=["OVERVIEW_LEVEL=0"])
assert ovr_ds
assert ovr_ds.GetRasterBand(1).GetMaskFlags() == gdal.GMF_PER_DATASET
ovrmaskband = ovr_ds.GetRasterBand(1).GetMaskBand()
- assert struct.unpack('B' * 4, ovrmaskband.ReadRaster()) == (255, 0, 255, 0)
+ assert struct.unpack("B" * 4, ovrmaskband.ReadRaster()) == (255, 0, 255, 0)
# Mask of mask
assert ovrmaskband.GetMaskFlags() == gdal.GMF_ALL_VALID
- assert struct.unpack('B' * 4, ovrmaskband.GetMaskBand().ReadRaster()) == (255, 255, 255, 255)
+ assert struct.unpack("B" * 4, ovrmaskband.GetMaskBand().ReadRaster()) == (
+ 255,
+ 255,
+ 255,
+ 255,
+ )
# Overview of overview of mask
assert ovrmaskband.GetOverviewCount() == 1
ovrofovrmaskband = ovrmaskband.GetOverview(0)
- assert struct.unpack('B' * 1, ovrofovrmaskband.ReadRaster()) == (255,)
+ assert struct.unpack("B" * 1, ovrofovrmaskband.ReadRaster()) == (255,)
ovr_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/test.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/test.tif")
###############################################################################
@@ -323,22 +368,18 @@ def test_overviewds_mask():
def test_overviewds_cleanup():
- gdal.GetDriverByName('GTiff').Delete('tmp/byte.tif')
+ gdal.GetDriverByName("GTiff").Delete("tmp/byte.tif")
try:
- os.remove('tmp/byte_rpc.txt')
+ os.remove("tmp/byte_rpc.txt")
except OSError:
pass
try:
- os.remove('tmp/sstgeo.tif')
- os.remove('tmp/sstgeo.vrt')
- os.remove('tmp/sstgeo.vrt.ovr')
+ os.remove("tmp/sstgeo.tif")
+ os.remove("tmp/sstgeo.vrt")
+ os.remove("tmp/sstgeo.vrt.ovr")
except OSError:
pass
try:
- os.remove('tmp/byte.vrt')
+ os.remove("tmp/byte.vrt")
except OSError:
pass
-
-
-
-
diff --git a/autotest/gcore/pam.py b/autotest/gcore/pam.py
index 309887533107..c46cd476aa42 100755
--- a/autotest/gcore/pam.py
+++ b/autotest/gcore/pam.py
@@ -34,28 +34,29 @@
import shutil
import stat
-
import gdaltest
-from osgeo import gdal
-from osgeo import osr
import pytest
+from osgeo import gdal, osr
+
+
###############################################################################
-@pytest.fixture(autouse=True, scope='module')
+@pytest.fixture(autouse=True, scope="module")
def startup_and_cleanup():
- with gdaltest.config_option('GDAL_PAM_ENABLED', 'YES'):
+ with gdaltest.config_option("GDAL_PAM_ENABLED", "YES"):
yield
try:
- os.chmod('tmpdirreadonly', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
- shutil.rmtree('tmpdirreadonly')
+ os.chmod("tmpdirreadonly", stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
+ shutil.rmtree("tmpdirreadonly")
except OSError:
pass
try:
- shutil.rmtree('tmppamproxydir')
+ shutil.rmtree("tmppamproxydir")
except OSError:
pass
+
###############################################################################
# Check that we can read PAM metadata for existing PNM file.
@@ -65,20 +66,22 @@ def test_pam_1():
ds = gdal.Open("data/byte.pnm")
base_md = ds.GetMetadata()
- assert len(base_md) == 2 and base_md['other'] == 'red' and base_md['key'] == 'value', \
- 'Default domain metadata missing'
+ assert (
+ len(base_md) == 2 and base_md["other"] == "red" and base_md["key"] == "value"
+ ), "Default domain metadata missing"
- xml_md = ds.GetMetadata('xml:test')
+ xml_md = ds.GetMetadata("xml:test")
- assert len(xml_md) == 1, 'xml:test metadata missing'
+ assert len(xml_md) == 1, "xml:test metadata missing"
- assert isinstance(xml_md, list), 'xml:test metadata not returned as list.'
+ assert isinstance(xml_md, list), "xml:test metadata not returned as list."
expected_xml = """
Value
"""
- assert xml_md[0] == expected_xml, 'xml does not match'
+ assert xml_md[0] == expected_xml, "xml does not match"
+
###############################################################################
# Verify that we can write XML to a new file.
@@ -86,22 +89,23 @@ def test_pam_1():
def test_pam_2():
- driver = gdal.GetDriverByName('PNM')
- ds = driver.Create('tmp/pam.pgm', 10, 10)
+ driver = gdal.GetDriverByName("PNM")
+ ds = driver.Create("tmp/pam.pgm", 10, 10)
band = ds.GetRasterBand(1)
- band.SetMetadata({'other': 'red', 'key': 'value'})
+ band.SetMetadata({"other": "red", "key": "value"})
expected_xml = """
Value
"""
- band.SetMetadata([expected_xml], 'xml:test')
+ band.SetMetadata([expected_xml], "xml:test")
band.SetNoDataValue(100)
ds = None
+
###############################################################################
# Check that we can read PAM metadata for existing PNM file.
@@ -112,31 +116,34 @@ def test_pam_3():
band = ds.GetRasterBand(1)
base_md = band.GetMetadata()
- assert len(base_md) == 2 and base_md['other'] == 'red' and base_md['key'] == 'value', \
- 'Default domain metadata missing'
+ assert (
+ len(base_md) == 2 and base_md["other"] == "red" and base_md["key"] == "value"
+ ), "Default domain metadata missing"
- xml_md = band.GetMetadata('xml:test')
+ xml_md = band.GetMetadata("xml:test")
- assert len(xml_md) == 1, 'xml:test metadata missing'
+ assert len(xml_md) == 1, "xml:test metadata missing"
- assert isinstance(xml_md, list), 'xml:test metadata not returned as list.'
+ assert isinstance(xml_md, list), "xml:test metadata not returned as list."
expected_xml = """
Value
"""
- assert xml_md[0] == expected_xml, 'xml does not match'
+ assert xml_md[0] == expected_xml, "xml does not match"
- assert band.GetNoDataValue() == 100, 'nodata not saved via pam'
+ assert band.GetNoDataValue() == 100, "nodata not saved via pam"
ds = None
- ds = gdal.Open('tmp/pam.pgm', gdal.GA_Update)
+ ds = gdal.Open("tmp/pam.pgm", gdal.GA_Update)
assert ds.GetRasterBand(1).DeleteNoDataValue() == 0
ds = None
- ds = gdal.Open('tmp/pam.pgm')
- assert ds.GetRasterBand(1).GetNoDataValue() is None, \
- 'got nodata value whereas none was expected'
+ ds = gdal.Open("tmp/pam.pgm")
+ assert (
+ ds.GetRasterBand(1).GetNoDataValue() is None
+ ), "got nodata value whereas none was expected"
+
###############################################################################
# Check that PAM binary encoded nodata values work properly.
@@ -147,15 +154,17 @@ def test_pam_4():
# Copy test dataset to tmp directory so that the .aux.xml file
# won't be rewritten with the statistics in the master dataset.
- shutil.copyfile('data/mfftest.hdr.aux.xml', 'tmp/mfftest.hdr.aux.xml')
- shutil.copyfile('data/mfftest.hdr', 'tmp/mfftest.hdr')
- shutil.copyfile('data/mfftest.r00', 'tmp/mfftest.r00')
+ shutil.copyfile("data/mfftest.hdr.aux.xml", "tmp/mfftest.hdr.aux.xml")
+ shutil.copyfile("data/mfftest.hdr", "tmp/mfftest.hdr")
+ shutil.copyfile("data/mfftest.r00", "tmp/mfftest.r00")
- ds = gdal.Open('tmp/mfftest.hdr')
+ ds = gdal.Open("tmp/mfftest.hdr")
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
- assert stats[0] == 0 and stats[1] == 4, \
- 'Got wrong min/max, likely nodata not working?'
+ assert (
+ stats[0] == 0 and stats[1] == 4
+ ), "Got wrong min/max, likely nodata not working?"
+
###############################################################################
# Verify that .aux files that don't match the configuration of the
@@ -165,11 +174,12 @@ def test_pam_4():
def test_pam_5():
- ds = gdal.Open('data/sasha.tif')
+ ds = gdal.Open("data/sasha.tif")
filelist = ds.GetFileList()
ds = None
- assert len(filelist) == 1, 'did not get expected file list.'
+ assert len(filelist) == 1, "did not get expected file list."
+
###############################################################################
# Verify we can read nodata values from .aux files (#2505)
@@ -178,13 +188,16 @@ def test_pam_5():
def test_pam_6():
- ds = gdal.Open('data/f2r23.tif')
- assert ds.GetRasterBand(1).GetNoDataValue() == 0, \
- 'did not get expected .aux sourced nodata.'
+ ds = gdal.Open("data/f2r23.tif")
+ assert (
+ ds.GetRasterBand(1).GetNoDataValue() == 0
+ ), "did not get expected .aux sourced nodata."
ds = None
- assert not os.path.exists('data/f2r23.tif.aux.xml'), \
- 'did not expect .aux.xml to be created.'
+ assert not os.path.exists(
+ "data/f2r23.tif.aux.xml"
+ ), "did not expect .aux.xml to be created."
+
###############################################################################
# Verify we can create overviews on PNG with PAM disabled (#3693)
@@ -193,22 +206,23 @@ def test_pam_6():
def test_pam_7():
- with gdaltest.config_option('GDAL_PAM_ENABLED', 'NO'):
+ with gdaltest.config_option("GDAL_PAM_ENABLED", "NO"):
- shutil.copyfile('data/stefan_full_rgba.png', 'tmp/stefan_full_rgba.png')
- ds = gdal.Open('tmp/stefan_full_rgba.png')
- ds.BuildOverviews('NEAR', [2])
+ shutil.copyfile("data/stefan_full_rgba.png", "tmp/stefan_full_rgba.png")
+ ds = gdal.Open("tmp/stefan_full_rgba.png")
+ ds.BuildOverviews("NEAR", [2])
ds = None
- ds = gdal.Open('tmp/stefan_full_rgba.png')
+ ds = gdal.Open("tmp/stefan_full_rgba.png")
ovr_count = ds.GetRasterBand(1).GetOverviewCount()
ds = None
- os.remove('tmp/stefan_full_rgba.png')
- os.remove('tmp/stefan_full_rgba.png.ovr')
+ os.remove("tmp/stefan_full_rgba.png")
+ os.remove("tmp/stefan_full_rgba.png.ovr")
assert ovr_count == 1
+
###############################################################################
# Test that Band.SetDescription() goes through PAM (#3780)
#
@@ -216,19 +230,20 @@ def test_pam_7():
def test_pam_8():
- with gdaltest.config_option('GDAL_PAM_ENABLED', 'YES'):
+ with gdaltest.config_option("GDAL_PAM_ENABLED", "YES"):
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/pam_8.tif', 1, 1, 1)
- ds.GetRasterBand(1).SetDescription('foo')
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/pam_8.tif", 1, 1, 1)
+ ds.GetRasterBand(1).SetDescription("foo")
ds = None
- ds = gdal.Open('/vsimem/pam_8.tif')
+ ds = gdal.Open("/vsimem/pam_8.tif")
desc = ds.GetRasterBand(1).GetDescription()
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/pam_8.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/pam_8.tif")
+
+ assert desc == "foo"
- assert desc == 'foo'
###############################################################################
# Test that we can retrieve projection from xml:ESRI domain
@@ -237,10 +252,10 @@ def test_pam_8():
def test_pam_9():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/pam_9.tif', 1, 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/pam_9.tif", 1, 1, 1)
ds = None
- f = gdal.VSIFOpenL('/vsimem/pam_9.tif.aux.xml', 'wb')
+ f = gdal.VSIFOpenL("/vsimem/pam_9.tif.aux.xml", "wb")
content = """
@@ -254,44 +269,55 @@ def test_pam_9():
gdal.VSIFWriteL(content, 1, len(content), f)
gdal.VSIFCloseL(f)
- ds = gdal.Open('/vsimem/pam_9.tif')
+ ds = gdal.Open("/vsimem/pam_9.tif")
wkt = ds.GetProjectionRef()
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/pam_9.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/pam_9.tif")
expected_wkt = """PROJCS["NAD83 / UTM zone 14N",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-99],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]"""
assert wkt == expected_wkt
+
###############################################################################
# Test serializing and deserializing of various band metadata
def test_pam_10():
- src_ds = gdal.Open('data/testserialization.asc')
- ds = gdal.GetDriverByName('AAIGRID').CreateCopy('/vsimem/pam_10.asc', src_ds)
+ src_ds = gdal.Open("data/testserialization.asc")
+ ds = gdal.GetDriverByName("AAIGRID").CreateCopy("/vsimem/pam_10.asc", src_ds)
src_ds = None
ds = None
- ds = gdal.Open('/vsimem/pam_10.asc')
+ ds = gdal.Open("/vsimem/pam_10.asc")
gcps = ds.GetGCPs()
assert len(gcps) == 2 and ds.GetGCPCount() == 2
assert ds.GetGCPProjection().find("WGS 84") != -1
- assert (gcps[0].GCPPixel == 0 and gcps[0].GCPLine == 1 and \
- gcps[0].GCPX == 2 and gcps[0].GCPY == 3 and gcps[0].GCPZ == 4)
-
- assert (gcps[1].GCPPixel == 1 and gcps[1].GCPLine == 2 and \
- gcps[1].GCPX == 3 and gcps[1].GCPY == 4 and gcps[1].GCPZ == 5)
+ assert (
+ gcps[0].GCPPixel == 0
+ and gcps[0].GCPLine == 1
+ and gcps[0].GCPX == 2
+ and gcps[0].GCPY == 3
+ and gcps[0].GCPZ == 4
+ )
+
+ assert (
+ gcps[1].GCPPixel == 1
+ and gcps[1].GCPLine == 2
+ and gcps[1].GCPX == 3
+ and gcps[1].GCPY == 4
+ and gcps[1].GCPZ == 5
+ )
band = ds.GetRasterBand(1)
- assert band.GetDescription() == 'MyDescription'
+ assert band.GetDescription() == "MyDescription"
- assert band.GetUnitType() == 'MyUnit'
+ assert band.GetUnitType() == "MyUnit"
assert band.GetOffset() == 1
@@ -299,7 +325,7 @@ def test_pam_10():
assert band.GetRasterColorInterpretation() == gdal.GCI_PaletteIndex
- assert band.GetCategoryNames() == ['Cat1', 'Cat2']
+ assert band.GetCategoryNames() == ["Cat1", "Cat2"]
ct = band.GetColorTable()
assert ct.GetColorEntry(0) == (0, 0, 0, 255)
@@ -309,12 +335,18 @@ def test_pam_10():
assert band.GetMinimum() == 2
- assert band.GetMetadata() == {'STATISTICS_MEAN': '1', 'STATISTICS_MINIMUM': '2', 'STATISTICS_MAXIMUM': '0', 'STATISTICS_STDDEV': '3'}
+ assert band.GetMetadata() == {
+ "STATISTICS_MEAN": "1",
+ "STATISTICS_MINIMUM": "2",
+ "STATISTICS_MAXIMUM": "0",
+ "STATISTICS_STDDEV": "3",
+ }
ds = None
- gdal.Unlink('/vsimem/pam_10.asc')
- gdal.Unlink('/vsimem/pam_10.asc.aux.xml')
+ gdal.Unlink("/vsimem/pam_10.asc")
+ gdal.Unlink("/vsimem/pam_10.asc.aux.xml")
+
###############################################################################
# Test PamProxyDb mechanism
@@ -324,20 +356,20 @@ def test_pam_11():
# Create a read-only directory
try:
- os.chmod('tmpdirreadonly', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
- shutil.rmtree('tmpdirreadonly')
+ os.chmod("tmpdirreadonly", stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
+ shutil.rmtree("tmpdirreadonly")
except OSError:
pass
- os.mkdir('tmpdirreadonly')
- shutil.copy('data/byte.tif', 'tmpdirreadonly/byte.tif')
+ os.mkdir("tmpdirreadonly")
+ shutil.copy("data/byte.tif", "tmpdirreadonly/byte.tif")
# FIXME: how do we create a read-only dir on windows ?
# The following has no effect
- os.chmod('tmpdirreadonly', stat.S_IRUSR | stat.S_IXUSR)
+ os.chmod("tmpdirreadonly", stat.S_IRUSR | stat.S_IXUSR)
# Test that the directory is really read-only
try:
- f = open('tmpdirreadonly/test', 'w')
+ f = open("tmpdirreadonly/test", "w")
if f is not None:
f.close()
pytest.skip()
@@ -345,31 +377,34 @@ def test_pam_11():
pass
# Compute statistics --> the saving as .aux.xml should fail
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
stats = ds.GetRasterBand(1).ComputeStatistics(False)
- assert stats[0] == 74, 'did not get expected minimum'
+ assert stats[0] == 74, "did not get expected minimum"
gdal.ErrorReset()
with gdaltest.error_handler():
ds = None
error_msg = gdal.GetLastErrorMsg()
- assert error_msg.startswith('Unable to save auxiliary information'), \
- 'warning was expected at that point'
+ assert error_msg.startswith(
+ "Unable to save auxiliary information"
+ ), "warning was expected at that point"
# Check that we actually have no saved statistics
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
stats = ds.GetRasterBand(1).GetStatistics(False, False)
- assert stats[3] == -1, 'did not expected to have stats at that point'
+ assert stats[3] == -1, "did not expected to have stats at that point"
ds = None
# This must be run as an external process so we can override GDAL_PAM_PROXY_DIR
# at the beginning of the process
import test_py_scripts
- ret = test_py_scripts.run_py_script_as_external_script('.', 'pamproxydb', '-test1')
- assert ret.find('success') != -1, ('pamproxydb.py -test1 failed %s' % ret)
+
+ ret = test_py_scripts.run_py_script_as_external_script(".", "pamproxydb", "-test1")
+ assert ret.find("success") != -1, "pamproxydb.py -test1 failed %s" % ret
# Test loading an existing proxydb
- ret = test_py_scripts.run_py_script_as_external_script('.', 'pamproxydb', '-test2')
- assert ret.find('success') != -1, ('pamproxydb.py -test2 failed %s' % ret)
+ ret = test_py_scripts.run_py_script_as_external_script(".", "pamproxydb", "-test2")
+ assert ret.find("success") != -1, "pamproxydb.py -test2 failed %s" % ret
+
###############################################################################
# Test histogram with 64bit counts
@@ -377,8 +412,9 @@ def test_pam_11():
def test_pam_12():
- shutil.copy('data/byte.tif', 'tmp')
- open('tmp/byte.tif.aux.xml', 'wt').write("""
+ shutil.copy("data/byte.tif", "tmp")
+ open("tmp/byte.tif.aux.xml", "wt").write(
+ """
@@ -391,21 +427,23 @@ def test_pam_12():
-""")
+"""
+ )
- ds = gdal.Open('tmp/byte.tif')
+ ds = gdal.Open("tmp/byte.tif")
(mini, maxi, _, hist1) = ds.GetRasterBand(1).GetDefaultHistogram()
hist2 = ds.GetRasterBand(1).GetHistogram(include_out_of_range=1, approx_ok=0)
- ds.SetMetadataItem('FOO', 'BAR')
+ ds.SetMetadataItem("FOO", "BAR")
ds.GetRasterBand(1).SetDefaultHistogram(mini, maxi, hist1)
ds = None
- aux_xml = open('tmp/byte.tif.aux.xml', 'rt').read()
- gdal.Unlink('tmp/byte.tif')
- gdal.Unlink('tmp/byte.tif.aux.xml')
+ aux_xml = open("tmp/byte.tif.aux.xml", "rt").read()
+ gdal.Unlink("tmp/byte.tif")
+ gdal.Unlink("tmp/byte.tif.aux.xml")
assert hist1 == hist2
assert hist1[0] == 6000000000
- assert '6000000000|' in aux_xml
+ assert "6000000000|" in aux_xml
+
###############################################################################
# Test various stuff with PAM disabled
@@ -414,14 +452,14 @@ def test_pam_12():
def test_pam_13():
- with gdaltest.config_option('GDAL_PAM_ENABLED', 'NO'):
+ with gdaltest.config_option("GDAL_PAM_ENABLED", "NO"):
- tmpfilename = '/vsimem/tmp.pgm'
- ds = gdal.GetDriverByName('PNM').Create(tmpfilename, 1, 1)
+ tmpfilename = "/vsimem/tmp.pgm"
+ ds = gdal.GetDriverByName("PNM").Create(tmpfilename, 1, 1)
ds.GetRasterBand(1).SetNoDataValue(0)
ds = None
- assert gdal.VSIStatL(tmpfilename + '.aux.xml') is None
+ assert gdal.VSIStatL(tmpfilename + ".aux.xml") is None
gdal.Unlink(tmpfilename)
@@ -433,30 +471,35 @@ def test_pam_13():
def test_pam_metadata_preserved():
- tmpfilename = '/vsimem/tmp.pgm'
- ds = gdal.GetDriverByName('PNM').Create(tmpfilename, 1, 1)
- ds.SetMetadataItem('foo', 'bar')
+ tmpfilename = "/vsimem/tmp.pgm"
+ ds = gdal.GetDriverByName("PNM").Create(tmpfilename, 1, 1)
+ ds.SetMetadataItem("foo", "bar")
ds = None
ds = gdal.Open(tmpfilename)
- ds.GetRasterBand(1).SetMetadataItem('bar', 'baz')
+ ds.GetRasterBand(1).SetMetadataItem("bar", "baz")
ds = None
ds = gdal.Open(tmpfilename)
- assert ds.GetMetadataItem('foo') == 'bar'
- assert ds.GetRasterBand(1).GetMetadataItem('bar') == 'baz'
+ assert ds.GetMetadataItem("foo") == "bar"
+ assert ds.GetRasterBand(1).GetMetadataItem("bar") == "baz"
ds = None
- gdal.GetDriverByName('PNM').Delete(tmpfilename)
+ gdal.GetDriverByName("PNM").Delete(tmpfilename)
+
###############################################################################
# Test that we can retrieve GCPs from xml:ESRI domain
#
+
def test_pam_esri_GeodataXform_gcp():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test_pam_esri_GeodataXform_gcp.tif', 20, 20, 1)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test_pam_esri_GeodataXform_gcp.tif", 20, 20, 1
+ )
ds = None
- gdal.FileFromMemBuffer('/vsimem/test_pam_esri_GeodataXform_gcp.tif.aux.xml',
-"""
+ gdal.FileFromMemBuffer(
+ "/vsimem/test_pam_esri_GeodataXform_gcp.tif.aux.xml",
+ """
1
@@ -492,14 +535,15 @@ def test_pam_esri_GeodataXform_gcp():
-""")
+""",
+ )
- ds = gdal.Open('/vsimem/test_pam_esri_GeodataXform_gcp.tif')
+ ds = gdal.Open("/vsimem/test_pam_esri_GeodataXform_gcp.tif")
gcps = ds.GetGCPs()
sr_gt = ds.GetSpatialRef()
sr_gcp = ds.GetGCPSpatialRef()
- gdal.GetDriverByName('GTiff').Delete('/vsimem/test_pam_esri_GeodataXform_gcp.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/test_pam_esri_GeodataXform_gcp.tif")
assert len(gcps) == 3
assert gcps[0].GCPPixel == 1
@@ -517,13 +561,14 @@ def test_pam_esri_GeodataXform_gcp():
ds = None
+
###############################################################################
def test_pam_metadata_coordinate_epoch():
- tmpfilename = '/vsimem/tmp.pgm'
- ds = gdal.GetDriverByName('PNM').Create(tmpfilename, 1, 1)
+ tmpfilename = "/vsimem/tmp.pgm"
+ ds = gdal.GetDriverByName("PNM").Create(tmpfilename, 1, 1)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
srs.SetCoordinateEpoch(2021.3)
@@ -535,19 +580,19 @@ def test_pam_metadata_coordinate_epoch():
assert srs.GetCoordinateEpoch() == 2021.3
ds = None
- gdal.GetDriverByName('PNM').Delete(tmpfilename)
+ gdal.GetDriverByName("PNM").Delete(tmpfilename)
+
###############################################################################
# Check that PAM handles correctly equality of NaN nodata values (#4847)
+
def test_pam_nodata_nan():
- outfilename = '/vsimem/test_pam_nodata_nan.tif'
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 1, gdal.GDT_Float32)
- src_ds.GetRasterBand(1).SetNoDataValue(float('nan'))
- gdal.GetDriverByName('GTiff').CreateCopy(outfilename, src_ds)
+ outfilename = "/vsimem/test_pam_nodata_nan.tif"
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 1, gdal.GDT_Float32)
+ src_ds.GetRasterBand(1).SetNoDataValue(float("nan"))
+ gdal.GetDriverByName("GTiff").CreateCopy(outfilename, src_ds)
# Check that no PAM file is generated
- assert gdal.VSIStatL(outfilename + '.aux.xml') is None
- gdal.GetDriverByName('GTiff').Delete(outfilename)
-
-
+ assert gdal.VSIStatL(outfilename + ".aux.xml") is None
+ gdal.GetDriverByName("GTiff").Delete(outfilename)
diff --git a/autotest/gcore/pamproxydb.py b/autotest/gcore/pamproxydb.py
index 0195b659352b..0612484cda86 100755
--- a/autotest/gcore/pamproxydb.py
+++ b/autotest/gcore/pamproxydb.py
@@ -28,47 +28,50 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import sys
import os
+import sys
+
try:
- os.putenv('CPL_SHOW_MEM_STATS', '')
+ os.putenv("CPL_SHOW_MEM_STATS", "")
except OSError:
pass
# Must to be launched from pam.py/pam_11()
# Test creating a new proxydb
-if len(sys.argv) == 2 and sys.argv[1] == '-test1':
+if len(sys.argv) == 2 and sys.argv[1] == "-test1":
- from osgeo import gdal
import shutil
+ from osgeo import gdal
+
try:
- shutil.rmtree('tmppamproxydir')
+ shutil.rmtree("tmppamproxydir")
except OSError:
pass
- os.mkdir('tmppamproxydir')
+ os.mkdir("tmppamproxydir")
- gdal.SetConfigOption('GDAL_PAM_PROXY_DIR', 'tmppamproxydir')
+ gdal.SetConfigOption("GDAL_PAM_PROXY_DIR", "tmppamproxydir")
# Compute statistics. They should be saved in the .aux.xml in the proxyDB
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
stats = ds.GetRasterBand(1).ComputeStatistics(False)
gdal.ErrorReset()
ds = None
error_msg = gdal.GetLastErrorMsg()
- if error_msg != '':
- print('did not expected error message')
+ if error_msg != "":
+ print("did not expected error message")
sys.exit(1)
# Check that the .aux.xml in the proxyDB exists
- filelist = gdal.ReadDir('tmppamproxydir')
- if '000000_tmpdirreadonly_byte.tif.aux.xml' not in filelist:
- print('did not get find 000000_tmpdirreadonly_byte.tif.aux.xml on filesystem')
+ filelist = gdal.ReadDir("tmppamproxydir")
+ if "000000_tmpdirreadonly_byte.tif.aux.xml" not in filelist:
+ print("did not get find 000000_tmpdirreadonly_byte.tif.aux.xml on filesystem")
sys.exit(1)
# Test altering a value to check that the file will be used
- f = open('tmppamproxydir/000000_tmpdirreadonly_byte.tif.aux.xml', 'w')
- f.write("""
+ f = open("tmppamproxydir/000000_tmpdirreadonly_byte.tif.aux.xml", "w")
+ f.write(
+ """
255
@@ -77,78 +80,85 @@
22.928470838676
-""")
+"""
+ )
f.close()
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
filelist = ds.GetFileList()
if len(filelist) != 2:
- print('did not get find 000000_tmpdirreadonly_byte.tif.aux.xml in dataset GetFileList()')
+ print(
+ "did not get find 000000_tmpdirreadonly_byte.tif.aux.xml in dataset GetFileList()"
+ )
print(filelist)
sys.exit(1)
stats = ds.GetRasterBand(1).GetStatistics(False, False)
if stats[0] != -9999:
- print('did not get expected minimum')
+ print("did not get expected minimum")
sys.exit(1)
ds = None
# Check that proxy overviews work
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
gdal.PushErrorHandler()
- assert ds.BuildOverviews('NEAR', overviewlist=[2]) == gdal.CE_None
+ assert ds.BuildOverviews("NEAR", overviewlist=[2]) == gdal.CE_None
gdal.PopErrorHandler()
ds = None
- filelist = gdal.ReadDir('tmppamproxydir')
- if '000001_tmpdirreadonly_byte.tif.ovr' not in filelist:
- print('did not get find 000001_tmpdirreadonly_byte.tif.ovr')
+ filelist = gdal.ReadDir("tmppamproxydir")
+ if "000001_tmpdirreadonly_byte.tif.ovr" not in filelist:
+ print("did not get find 000001_tmpdirreadonly_byte.tif.ovr")
sys.exit(1)
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
filelist = ds.GetFileList()
if len(filelist) != 3:
- print('did not get find 000001_tmpdirreadonly_byte.tif.ovr in dataset GetFileList()')
+ print(
+ "did not get find 000001_tmpdirreadonly_byte.tif.ovr in dataset GetFileList()"
+ )
print(filelist)
sys.exit(1)
nb_ovr = ds.GetRasterBand(1).GetOverviewCount()
ds = None
if nb_ovr != 1:
- print('did not get expected overview count')
+ print("did not get expected overview count")
sys.exit(1)
- print('success')
+ print("success")
sys.exit(0)
# Must to be launched from pam.py/pam_11()
# Test loading an existing proxydb
-if len(sys.argv) == 2 and sys.argv[1] == '-test2':
+if len(sys.argv) == 2 and sys.argv[1] == "-test2":
from osgeo import gdal
- gdal.SetConfigOption('GDAL_PAM_PROXY_DIR', 'tmppamproxydir')
+ gdal.SetConfigOption("GDAL_PAM_PROXY_DIR", "tmppamproxydir")
- ds = gdal.Open('tmpdirreadonly/byte.tif')
+ ds = gdal.Open("tmpdirreadonly/byte.tif")
filelist = ds.GetFileList()
if len(filelist) != 3:
- print('did not get find 000000_tmpdirreadonly_byte.tif.aux.xml and/or 000001_tmpdirreadonly_byte.tif.ovr in dataset GetFileList()')
+ print(
+ "did not get find 000000_tmpdirreadonly_byte.tif.aux.xml and/or 000001_tmpdirreadonly_byte.tif.ovr in dataset GetFileList()"
+ )
print(filelist)
sys.exit(1)
stats = ds.GetRasterBand(1).GetStatistics(False, False)
if stats[0] != -9999:
- print('did not get expected minimum')
+ print("did not get expected minimum")
sys.exit(1)
nb_ovr = ds.GetRasterBand(1).GetOverviewCount()
ds = None
if nb_ovr != 1:
- print('did not get expected overview count')
+ print("did not get expected overview count")
sys.exit(1)
- print('success')
+ print("success")
sys.exit(0)
diff --git a/autotest/gcore/pixfun.py b/autotest/gcore/pixfun.py
index 2cf2283437ae..f4bf7febf385 100755
--- a/autotest/gcore/pixfun.py
+++ b/autotest/gcore/pixfun.py
@@ -36,22 +36,23 @@
from osgeo import gdal
# All tests will be skipped if numpy is unavailable.
-numpy = pytest.importorskip('numpy')
+numpy = pytest.importorskip("numpy")
###############################################################################
# Verify real part extraction from a complex dataset.
+
def test_pixfun_real_c():
- filename = 'data/vrt/pixfun_real_c.vrt'
+ filename = "data/vrt/pixfun_real_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata.real)
@@ -60,16 +61,17 @@ def test_pixfun_real_c():
###############################################################################
# Verify real part extraction from a complex dataset.
+
def test_pixfun_real_r():
- filename = 'data/vrt/pixfun_real_r.vrt'
+ filename = "data/vrt/pixfun_real_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata.real)
@@ -78,22 +80,23 @@ def test_pixfun_real_r():
###############################################################################
# Verify imaginary part extraction from a complex dataset.
+
def test_pixfun_imag_c():
- filename = 'data/vrt/pixfun_imag_c.vrt'
+ filename = "data/vrt/pixfun_imag_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata.imag)
# Test bugfix of #6599
- copied_ds = gdal.Translate('', filename, format='MEM')
+ copied_ds = gdal.Translate("", filename, format="MEM")
data_ds = copied_ds.GetRasterBand(1).ReadAsArray()
copied_ds = None
@@ -103,11 +106,12 @@ def test_pixfun_imag_c():
###############################################################################
# Verify imaginary part extraction from a real dataset.
+
def test_pixfun_imag_r():
- filename = 'data/vrt/pixfun_imag_r.vrt'
+ filename = "data/vrt/pixfun_imag_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == 0)
@@ -116,16 +120,17 @@ def test_pixfun_imag_r():
###############################################################################
# Verify complex dataset generation form real and imaginary parts.
+
def test_pixfun_complex():
- filename = 'data/vrt/pixfun_complex.vrt'
+ filename = "data/vrt/pixfun_complex.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, refdata + 1j * refdata)
@@ -134,16 +139,17 @@ def test_pixfun_complex():
###############################################################################
# Verify complex dataset generation form amplitude and phase parts.
+
def test_pixfun_polar():
- filename = 'data/vrt/pixfun_polar.vrt'
+ filename = "data/vrt/pixfun_polar.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, refdata * numpy.exp(1j * refdata))
@@ -152,16 +158,17 @@ def test_pixfun_polar():
###############################################################################
# Verify complex dataset generation form amplitude and phase parts.
+
def test_pixfun_polar_amplitude():
- filename = 'data/vrt/pixfun_polar_amplitude.vrt'
+ filename = "data/vrt/pixfun_polar_amplitude.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, refdata * numpy.exp(1j * refdata))
@@ -170,16 +177,17 @@ def test_pixfun_polar_amplitude():
###############################################################################
# Verify complex dataset generation form intensity and phase parts.
+
def test_pixfun_polar_intensity():
- filename = 'data/vrt/pixfun_polar_intensity.vrt'
+ filename = "data/vrt/pixfun_polar_intensity.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, numpy.sqrt(refdata) * numpy.exp(1j * refdata))
@@ -188,38 +196,40 @@ def test_pixfun_polar_intensity():
###############################################################################
# Verify complex dataset generation form amplitude (dB) and phase parts.
+
def test_pixfun_polar_dB():
- filename = 'data/vrt/pixfun_polar_dB.vrt'
+ filename = "data/vrt/pixfun_polar_dB.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 10**(refdata/20) * numpy.exp(1j * refdata))
+ assert numpy.allclose(data, 10 ** (refdata / 20) * numpy.exp(1j * refdata))
###############################################################################
# Verify modulus extraction from a complex (float) dataset.
+
def test_pixfun_mod_c():
- filename = 'data/vrt/pixfun_mod_c.vrt'
+ filename = "data/vrt/pixfun_mod_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
res = numpy.allclose(data, numpy.abs(refdata))
- if gdaltest.is_travis_branch('sanitize') and not res:
+ if gdaltest.is_travis_branch("sanitize") and not res:
print(data)
print(numpy.abs(refdata))
pytest.xfail()
@@ -230,20 +240,21 @@ def test_pixfun_mod_c():
###############################################################################
# Verify modulus extraction from a real (integer type) dataset.
+
def test_pixfun_mod_r():
- filename = 'data/vrt/pixfun_mod_r.vrt'
+ filename = "data/vrt/pixfun_mod_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
res = numpy.alltrue(data == numpy.abs(refdata))
- if gdaltest.is_travis_branch('sanitize') and not res:
+ if gdaltest.is_travis_branch("sanitize") and not res:
print(data)
print(numpy.abs(refdata))
pytest.xfail()
@@ -254,18 +265,19 @@ def test_pixfun_mod_r():
###############################################################################
# Verify phase extraction from a complex dataset.
+
def test_pixfun_phase_c():
- filename = 'data/vrt/pixfun_phase_c.vrt'
+ filename = "data/vrt/pixfun_phase_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('complex128')
+ refdata = refdata.astype("complex128")
assert numpy.allclose(data, numpy.arctan2(refdata.imag, refdata.real))
@@ -273,16 +285,17 @@ def test_pixfun_phase_c():
###############################################################################
# Verify phase extraction from a real dataset.
+
def test_pixfun_phase_r():
- filename = 'data/vrt/pixfun_phase_r.vrt'
+ filename = "data/vrt/pixfun_phase_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/vrt/pixfun_imag_c.vrt'
+ reffilename = "data/vrt/pixfun_imag_c.vrt"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == numpy.arctan2(0, refdata))
@@ -291,11 +304,12 @@ def test_pixfun_phase_r():
###############################################################################
# Verify phase extraction from a unsigned dataset (completely boring !)
+
def test_pixfun_phase_unsigned():
- filename = 'data/vrt/pixfun_phase_unsigned.vrt'
+ filename = "data/vrt/pixfun_phase_unsigned.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == numpy.zeros(data.shape))
@@ -304,16 +318,17 @@ def test_pixfun_phase_unsigned():
###############################################################################
# Verify cmplex conjugare computation on a complex dataset.
+
def test_pixfun_conj_c():
- filename = 'data/vrt/pixfun_conj_c.vrt'
+ filename = "data/vrt/pixfun_conj_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == numpy.conj(refdata))
@@ -322,16 +337,17 @@ def test_pixfun_conj_c():
###############################################################################
# Verify cmplex conjugare computation on a real dataset.
+
def test_pixfun_conj_r():
- filename = 'data/vrt/pixfun_conj_r.vrt'
+ filename = "data/vrt/pixfun_conj_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == numpy.conj(refdata))
@@ -340,18 +356,18 @@ def test_pixfun_conj_r():
###############################################################################
# Verify the sum of 3 (real) datasets.
+
def test_pixfun_sum_r():
- filename = 'data/vrt/pixfun_sum_r.vrt'
+ filename = "data/vrt/pixfun_sum_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- refdata = numpy.zeros(data.shape, 'float')
- for reffilename in ('data/uint16.tif', 'data/int32.tif',
- 'data/float32.tif'):
+ refdata = numpy.zeros(data.shape, "float")
+ for reffilename in ("data/uint16.tif", "data/int32.tif", "data/float32.tif"):
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata += refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata)
@@ -360,18 +376,18 @@ def test_pixfun_sum_r():
###############################################################################
# Verify the sum of 3 (two complex and one real) datasets.
+
def test_pixfun_sum_c():
- filename = 'data/vrt/pixfun_sum_c.vrt'
+ filename = "data/vrt/pixfun_sum_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- refdata = numpy.zeros(data.shape, 'complex')
- for reffilename in ('data/uint16.tif', 'data/cint_sar.tif',
- 'data/cfloat64.tif'):
+ refdata = numpy.zeros(data.shape, "complex")
+ for reffilename in ("data/uint16.tif", "data/cint_sar.tif", "data/cfloat64.tif"):
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata += refds.GetRasterBand(1).ReadAsArray(0, 0, 5, 6)
assert numpy.alltrue(data == refdata)
@@ -380,41 +396,43 @@ def test_pixfun_sum_c():
###############################################################################
# Verify the sum of 3 (real) datasets and a scalar constant k.
+
def test_pixfun_sum_k():
- filename = 'data/vrt/pixfun_sum_k.vrt'
+ filename = "data/vrt/pixfun_sum_k.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- k = 2.
- refdata = numpy.full(data.shape, k, dtype='float')
- for reffilename in ('data/uint16.tif', 'data/int32.tif',
- 'data/float32.tif'):
+ k = 2.0
+ refdata = numpy.full(data.shape, k, dtype="float")
+ for reffilename in ("data/uint16.tif", "data/int32.tif", "data/float32.tif"):
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata += refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata)
+
###############################################################################
# Verify the difference of 2 (real) datasets.
+
def test_pixfun_diff_r():
- filename = 'data/vrt/pixfun_diff_r.vrt'
+ filename = "data/vrt/pixfun_diff_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata1 = refds.GetRasterBand(1).ReadAsArray(0, 0, 5, 6)
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata2 = refds.GetRasterBand(1).ReadAsArray(10, 10, 5, 6)
assert numpy.alltrue(data == refdata1 - refdata2)
@@ -423,21 +441,22 @@ def test_pixfun_diff_r():
###############################################################################
# Verify the difference of 2 (complex) datasets.
+
def test_pixfun_diff_c():
- filename = 'data/vrt/pixfun_diff_c.vrt'
+ filename = "data/vrt/pixfun_diff_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata1 = refds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cfloat64.tif'
+ reffilename = "data/cfloat64.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata2 = refds.GetRasterBand(1).ReadAsArray(0, 0, 5, 6)
assert numpy.alltrue(data == refdata1 - refdata2)
@@ -446,18 +465,18 @@ def test_pixfun_diff_c():
###############################################################################
# Verify the product of 3 (real) datasets.
+
def test_pixfun_mul_r():
- filename = 'data/vrt/pixfun_mul_r.vrt'
+ filename = "data/vrt/pixfun_mul_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- refdata = numpy.ones(data.shape, 'float')
- for reffilename in ('data/uint16.tif', 'data/int32.tif',
- 'data/float32.tif'):
+ refdata = numpy.ones(data.shape, "float")
+ for reffilename in ("data/uint16.tif", "data/int32.tif", "data/float32.tif"):
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata *= refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata)
@@ -466,16 +485,17 @@ def test_pixfun_mul_r():
###############################################################################
# Verify the product of 2 (complex) datasets.
+
def test_pixfun_mul_c():
- filename = 'data/vrt/pixfun_mul_c.vrt'
+ filename = "data/vrt/pixfun_mul_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata * refdata)
@@ -484,19 +504,19 @@ def test_pixfun_mul_c():
###############################################################################
# Verify the product of 3 (real) datasets and a scalar constant k.
+
def test_pixfun_mul_k():
- filename = 'data/vrt/pixfun_mul_k.vrt'
+ filename = "data/vrt/pixfun_mul_k.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- k = 2.
- refdata = numpy.full(data.shape, k, dtype='float')
- for reffilename in ('data/uint16.tif', 'data/int32.tif',
- 'data/float32.tif'):
+ k = 2.0
+ refdata = numpy.full(data.shape, k, dtype="float")
+ for reffilename in ("data/uint16.tif", "data/int32.tif", "data/float32.tif"):
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata *= refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata)
@@ -505,22 +525,23 @@ def test_pixfun_mul_k():
###############################################################################
# Verify the division of 2 (real) datasets.
+
def test_pixfun_div_r():
- filename = 'data/vrt/pixfun_div_r.vrt'
+ filename = "data/vrt/pixfun_div_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata1 = refds.GetRasterBand(1).ReadAsArray(0, 0, 5, 6)
- refdata1 = refdata1.astype('float32')
+ refdata1 = refdata1.astype("float32")
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata2 = refds.GetRasterBand(1).ReadAsArray(10, 10, 5, 6)
assert numpy.alltrue(data == (refdata1 / refdata2))
@@ -529,39 +550,41 @@ def test_pixfun_div_r():
###############################################################################
# Verify the division of 2 (complex) datasets.
+
def test_pixfun_div_c():
- filename = 'data/vrt/pixfun_div_c.vrt'
+ filename = "data/vrt/pixfun_div_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cfloat64.tif'
+ reffilename = "data/cfloat64.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata1 = refds.GetRasterBand(1).ReadAsArray(0, 0, 5, 6)
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata2 = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.alltrue(data == (refdata1 / refdata2).astype('complex64'))
+ assert numpy.alltrue(data == (refdata1 / refdata2).astype("complex64"))
###############################################################################
# Verify the product with complex conjugate of a complex datasets.
+
def test_pixfun_cmul_c():
- filename = 'data/vrt/pixfun_cmul_c.vrt'
+ filename = "data/vrt/pixfun_cmul_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == refdata * refdata.conj())
@@ -570,24 +593,25 @@ def test_pixfun_cmul_c():
###############################################################################
# Verify the product with complex conjugate of two real datasets.
+
def test_pixfun_cmul_r():
- filename = 'data/vrt/pixfun_cmul_r.vrt'
+ filename = "data/vrt/pixfun_cmul_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/uint16.tif'
+ reffilename = "data/uint16.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata1 = refds.GetRasterBand(1).ReadAsArray()
- refdata1 = refdata1.astype('float64')
+ refdata1 = refdata1.astype("float64")
- reffilename = 'data/int32.tif'
+ reffilename = "data/int32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata2 = refds.GetRasterBand(1).ReadAsArray()
- refdata2 = refdata2.astype('float64')
+ refdata2 = refdata2.astype("float64")
assert numpy.alltrue(data == refdata1 * refdata2.conj())
@@ -595,25 +619,27 @@ def test_pixfun_cmul_r():
###############################################################################
# Verify computation of the inverse of a real datasets.
+
def test_pixfun_inv_r():
- filename = 'data/vrt/pixfun_inv_r.vrt'
+ filename = "data/vrt/pixfun_inv_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/uint16.tif'
+ reffilename = "data/uint16.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
- assert numpy.alltrue(data == 1. / refdata)
+ assert numpy.alltrue(data == 1.0 / refdata)
def test_pixfun_inv_r_zero():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
Inverse
inv
@@ -625,7 +651,8 @@ def test_pixfun_inv_r_zero():
0
-""")
+"""
+ )
data = ds.GetRasterBand(1).ReadAsArray()
assert math.isinf(data[0][0])
@@ -633,19 +660,20 @@ def test_pixfun_inv_r_zero():
###############################################################################
# Verify computation of the inverse of a complex datasets.
+
def test_pixfun_inv_c():
- filename = 'data/vrt/pixfun_inv_c.vrt'
+ filename = "data/vrt/pixfun_inv_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('complex')
- delta = data - 1. / refdata
+ refdata = refdata.astype("complex")
+ delta = data - 1.0 / refdata
assert numpy.alltrue(abs(delta.real) < 1e-13)
assert numpy.alltrue(abs(delta.imag) < 1e-13)
@@ -653,7 +681,8 @@ def test_pixfun_inv_c():
def test_pixfun_inv_c_zero():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
Inverse
inv
@@ -665,7 +694,8 @@ def test_pixfun_inv_c_zero():
0
-""")
+"""
+ )
data = ds.GetRasterBand(1).ReadAsArray()
assert math.isinf(data[0][0].real)
assert math.isinf(data[0][0].imag)
@@ -674,36 +704,38 @@ def test_pixfun_inv_c_zero():
###############################################################################
# Verify computation of the inverse of a real datasets multiplied by a scalar k.
+
def test_pixfun_inv_k():
- filename = 'data/vrt/pixfun_inv_k.vrt'
+ filename = "data/vrt/pixfun_inv_k.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/uint16.tif'
+ reffilename = "data/uint16.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
- k = 2.
+ k = 2.0
assert numpy.alltrue(data == k / refdata)
###############################################################################
# Verify intensity computation of a complex dataset.
+
def test_pixfun_intensity_c():
- filename = 'data/vrt/pixfun_intensity_c.vrt'
+ filename = "data/vrt/pixfun_intensity_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == (refdata * refdata.conj()).real)
@@ -712,16 +744,17 @@ def test_pixfun_intensity_c():
###############################################################################
# Verify intensity computation of real dataset.
+
def test_pixfun_intensity_r():
- filename = 'data/vrt/pixfun_intensity_r.vrt'
+ filename = "data/vrt/pixfun_intensity_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == (refdata * refdata.conj()).real)
@@ -730,16 +763,17 @@ def test_pixfun_intensity_r():
###############################################################################
# Verify square root computation.
+
def test_pixfun_sqrt():
- filename = 'data/vrt/pixfun_sqrt.vrt'
+ filename = "data/vrt/pixfun_sqrt.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.alltrue(data == numpy.sqrt(refdata))
@@ -748,16 +782,17 @@ def test_pixfun_sqrt():
###############################################################################
# Verify logarithm computation of real dataset.
+
def test_pixfun_log10_r():
- filename = 'data/vrt/pixfun_log10_r.vrt'
+ filename = "data/vrt/pixfun_log10_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, numpy.log10(refdata))
@@ -766,16 +801,17 @@ def test_pixfun_log10_r():
###############################################################################
# Verify logarithm computation of imag dataset.
+
def test_pixfun_log10_c():
- filename = 'data/vrt/pixfun_log10_c.vrt'
+ filename = "data/vrt/pixfun_log10_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
assert numpy.allclose(data, numpy.log10(numpy.abs(refdata)))
@@ -783,122 +819,130 @@ def test_pixfun_log10_c():
###############################################################################
# Verify amplitude to dB computation of real dataset.
+
def test_pixfun_dB_r():
- filename = 'data/vrt/pixfun_dB_r.vrt'
+ filename = "data/vrt/pixfun_dB_r.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 20. * numpy.log10(refdata))
+ assert numpy.allclose(data, 20.0 * numpy.log10(refdata))
###############################################################################
# Verify amplitude to dB computation of imag dataset.
+
def test_pixfun_dB_c():
- filename = 'data/vrt/pixfun_dB_c.vrt'
+ filename = "data/vrt/pixfun_dB_c.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 20. * numpy.log10(numpy.abs(refdata)))
+ assert numpy.allclose(data, 20.0 * numpy.log10(numpy.abs(refdata)))
###############################################################################
# Verify amplitude to dB computation of real dataset.
+
def test_pixfun_dB_r_amplitude():
- filename = 'data/vrt/pixfun_dB_r_amplitude.vrt'
+ filename = "data/vrt/pixfun_dB_r_amplitude.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 20. * numpy.log10(refdata))
+ assert numpy.allclose(data, 20.0 * numpy.log10(refdata))
###############################################################################
# Verify amplitude to dB computation of imag dataset.
+
def test_pixfun_dB_c_amplitude():
- filename = 'data/vrt/pixfun_dB_c_amplitude.vrt'
+ filename = "data/vrt/pixfun_dB_c_amplitude.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 20. * numpy.log10(numpy.abs(refdata)))
+ assert numpy.allclose(data, 20.0 * numpy.log10(numpy.abs(refdata)))
###############################################################################
# Verify intensity to dB computation of real dataset.
+
def test_pixfun_dB_r_intensity():
- filename = 'data/vrt/pixfun_dB_r_intensity.vrt'
+ filename = "data/vrt/pixfun_dB_r_intensity.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 10. * numpy.log10(refdata))
+ assert numpy.allclose(data, 10.0 * numpy.log10(refdata))
###############################################################################
# Verify intensity to dB computation of imag dataset.
+
def test_pixfun_dB_c_intensity():
- filename = 'data/vrt/pixfun_dB_c_intensity.vrt'
+ filename = "data/vrt/pixfun_dB_c_intensity.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/cint_sar.tif'
+ reffilename = "data/cint_sar.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 10. * numpy.log10(numpy.abs(refdata)))
+ assert numpy.allclose(data, 10.0 * numpy.log10(numpy.abs(refdata)))
+
###############################################################################
# Verify the exp pixel function.
+
def test_pixfun_exp():
- filename = 'data/vrt/pixfun_exp.vrt'
+ filename = "data/vrt/pixfun_exp.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
assert numpy.allclose(data, numpy.exp(refdata))
@@ -906,92 +950,97 @@ def test_pixfun_exp():
###############################################################################
# Verify conversion from dB to amplitude using the exp pixel function.
+
def test_pixfun_exp_dB2amp():
- filename = 'data/vrt/pixfun_exp_dB2amp.vrt'
+ filename = "data/vrt/pixfun_exp_dB2amp.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 10.**(refdata / 20.))
+ assert numpy.allclose(data, 10.0 ** (refdata / 20.0))
###############################################################################
# Verify conversion from dB to power using the exp pixel function.
+
def test_pixfun_exp_dB2pow():
- filename = 'data/vrt/pixfun_exp_dB2pow.vrt'
+ filename = "data/vrt/pixfun_exp_dB2pow.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
- assert numpy.allclose(data, 10.**(refdata / 10.))
+ assert numpy.allclose(data, 10.0 ** (refdata / 10.0))
###############################################################################
# Verify conversion from dB to amplitude.
+
def test_pixfun_dB2amp():
- filename = 'data/vrt/pixfun_dB2amp.vrt'
+ filename = "data/vrt/pixfun_dB2amp.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- assert numpy.allclose(data, 10.**(refdata / 20.))
+ assert numpy.allclose(data, 10.0 ** (refdata / 20.0))
###############################################################################
# Verify conversion from dB to power.
+
def test_pixfun_dB2pow():
- filename = 'data/vrt/pixfun_dB2pow.vrt'
+ filename = "data/vrt/pixfun_dB2pow.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
- assert numpy.allclose(data, 10.**(refdata / 10.))
+ assert numpy.allclose(data, 10.0 ** (refdata / 10.0))
###############################################################################
# Verify raising values to a power
+
def test_pixfun_pow():
- filename = 'data/vrt/pixfun_pow.vrt'
+ filename = "data/vrt/pixfun_pow.vrt"
ds = gdal.OpenShared(filename, gdal.GA_ReadOnly)
- assert ds is not None, ('Unable to open "%s" dataset.' % filename)
+ assert ds is not None, 'Unable to open "%s" dataset.' % filename
data = ds.GetRasterBand(1).ReadAsArray()
- reffilename = 'data/float32.tif'
+ reffilename = "data/float32.tif"
refds = gdal.Open(reffilename)
- assert refds is not None, ('Unable to open "%s" dataset.' % reffilename)
+ assert refds is not None, 'Unable to open "%s" dataset.' % reffilename
refdata = refds.GetRasterBand(1).ReadAsArray()
- refdata = refdata.astype('float64')
+ refdata = refdata.astype("float64")
assert numpy.allclose(data, refdata**3.14)
@@ -999,16 +1048,19 @@ def test_pixfun_pow():
###############################################################################
# Verify linear pixel interpolation
+
def interpolate_vrt(*, fname, bands, method, nx, ny, t0, dt, t):
- vrtXml = """
+ vrtXml = """
Interpolated
interpolate_{method}
- Float32""".format(nx=nx, ny=ny, t0=t0, dt=dt, t=t, method=method)
+ Float32""".format(
+ nx=nx, ny=ny, t0=t0, dt=dt, t=t, method=method
+ )
- for b in range(1, bands+1):
+ for b in range(1, bands + 1):
vrtXml += """
{fname}
@@ -1016,7 +1068,9 @@ def interpolate_vrt(*, fname, bands, method, nx, ny, t0, dt, t):
- """.format(fname=fname, band=b, nx=nx, ny=ny)
+ """.format(
+ fname=fname, band=b, nx=nx, ny=ny
+ )
vrtXml += """
@@ -1028,7 +1082,7 @@ def interpolate_vrt(*, fname, bands, method, nx, ny, t0, dt, t):
def test_pixfun_interpolate_linear():
- np = pytest.importorskip('numpy')
+ np = pytest.importorskip("numpy")
x = np.array([[1, 2], [3, 4]])
@@ -1038,7 +1092,7 @@ def test_pixfun_interpolate_linear():
ny = x.shape[1]
bands = len(layers)
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
fname = "/vsimem/test.tif"
ds = drv.Create(fname, xsize=nx, ysize=ny, bands=bands, eType=gdal.GDT_Float32)
@@ -1048,41 +1102,92 @@ def test_pixfun_interpolate_linear():
ds = None
# interpolate between bands 2 and 3
- ds = gdal.Open(interpolate_vrt(method='linear', fname=fname, nx=nx, ny=ny, bands=bands, t0=10, dt=5, t=17))
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="linear", fname=fname, nx=nx, ny=ny, bands=bands, t0=10, dt=5, t=17
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[1] + (17-15)*(layers[2]-layers[1])/5)
-
- ds = gdal.Open(interpolate_vrt(method='exp', fname=fname, nx=nx, ny=ny, bands=bands, t0=10, dt=5, t=17))
+ assert np.allclose(
+ interpolated, layers[1] + (17 - 15) * (layers[2] - layers[1]) / 5
+ )
+
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="exp", fname=fname, nx=nx, ny=ny, bands=bands, t0=10, dt=5, t=17
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[1]*np.exp(np.log(layers[2]/layers[1])/5 * (17-15)))
+ assert np.allclose(
+ interpolated, layers[1] * np.exp(np.log(layers[2] / layers[1]) / 5 * (17 - 15))
+ )
# extrapolate beyond band 3
- ds = gdal.Open(interpolate_vrt(method='linear', fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=38))
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="linear", fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=38
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[2] + (38-20)*(layers[2]-layers[1])/10)
-
- ds = gdal.Open(interpolate_vrt(method='linear', fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=28))
+ assert np.allclose(
+ interpolated, layers[2] + (38 - 20) * (layers[2] - layers[1]) / 10
+ )
+
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="linear", fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=28
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[2] + (28-20)*(layers[2]-layers[1])/10)
-
- ds = gdal.Open(interpolate_vrt(method='exp', fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=38))
+ assert np.allclose(
+ interpolated, layers[2] + (28 - 20) * (layers[2] - layers[1]) / 10
+ )
+
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="exp", fname=fname, nx=nx, ny=ny, bands=bands, t0=0, dt=10, t=38
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[2]*np.exp(np.log(layers[2]/layers[1])/10 * (38-20)))
+ assert np.allclose(
+ interpolated, layers[2] * np.exp(np.log(layers[2] / layers[1]) / 10 * (38 - 20))
+ )
# extrapolate before band 1
- ds = gdal.Open(interpolate_vrt(method='linear', fname=fname, nx=nx, ny=ny, bands=bands, t0=-10, dt=1, t=-22.7))
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="linear",
+ fname=fname,
+ nx=nx,
+ ny=ny,
+ bands=bands,
+ t0=-10,
+ dt=1,
+ t=-22.7,
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[0] + (-22.7 - -10)*(layers[1]-layers[0])/1)
-
- ds = gdal.Open(interpolate_vrt(method='exp', fname=fname, nx=nx, ny=ny, bands=bands, t0=-10, dt=1, t=-22.7))
+ assert np.allclose(
+ interpolated, layers[0] + (-22.7 - -10) * (layers[1] - layers[0]) / 1
+ )
+
+ ds = gdal.Open(
+ interpolate_vrt(
+ method="exp", fname=fname, nx=nx, ny=ny, bands=bands, t0=-10, dt=1, t=-22.7
+ )
+ )
interpolated = ds.GetRasterBand(1).ReadAsArray()
- assert np.allclose(interpolated, layers[0]*np.exp(np.log(layers[1]/layers[0])/1 * (-22.7 - -10)))
+ assert np.allclose(
+ interpolated,
+ layers[0] * np.exp(np.log(layers[1] / layers[0]) / 1 * (-22.7 - -10)),
+ )
def test_pixfun_nan():
- src_ds = gdal.Open('data/test_nodatavalues.tif')
- vrt_ds = gdal.Open("""
+ src_ds = gdal.Open("data/test_nodatavalues.tif")
+ vrt_ds = gdal.Open(
+ """
Nan
0.0
@@ -1093,14 +1198,15 @@ def test_pixfun_nan():
1
-""")
+"""
+ )
data_src = src_ds.GetRasterBand(1).ReadAsArray(buf_type=gdal.GDT_Float32)
data_vrt = vrt_ds.GetRasterBand(1).ReadAsArray(buf_type=gdal.GDT_Float32)
NoData = src_ds.GetRasterBand(1).GetNoDataValue()
for i in range(data_src.shape[0]):
for j in range(data_src.shape[1]):
- if (data_src[i][j] == NoData):
+ if data_src[i][j] == NoData:
assert math.isnan(data_vrt[i][j])
else:
assert data_vrt[i][j] == data_src[i][j]
@@ -1108,8 +1214,9 @@ def test_pixfun_nan():
def test_pixfun_replacenodata():
- src_ds = gdal.Open('data/test_nodatavalues.tif')
- vrt_ds = gdal.Open("""
+ src_ds = gdal.Open("data/test_nodatavalues.tif")
+ vrt_ds = gdal.Open(
+ """
Nan
0.0
@@ -1121,22 +1228,24 @@ def test_pixfun_replacenodata():
1
-""")
+"""
+ )
data_src = src_ds.GetRasterBand(1).ReadAsArray(buf_type=gdal.GDT_Float32)
data_vrt = vrt_ds.GetRasterBand(1).ReadAsArray(buf_type=gdal.GDT_Float32)
NoData = src_ds.GetRasterBand(1).GetNoDataValue()
for i in range(data_src.shape[0]):
for j in range(data_src.shape[1]):
- if (data_src[i][j] == NoData):
+ if data_src[i][j] == NoData:
assert data_vrt[i][j] == 42
else:
assert data_vrt[i][j] == data_src[i][j]
def test_pixfun_scale():
- src_ds = gdal.Open('data/float32.tif')
- vrt_ds = gdal.Open("""
+ src_ds = gdal.Open("data/float32.tif")
+ vrt_ds = gdal.Open(
+ """
Scaling
scale
@@ -1148,7 +1257,8 @@ def test_pixfun_scale():
1
-""")
+"""
+ )
band_src = src_ds.GetRasterBand(1)
band_vrt = vrt_ds.GetRasterBand(1)
@@ -1160,8 +1270,10 @@ def test_pixfun_scale():
assert numpy.allclose(data_src * 2 + 1, data_vrt)
+
def test_pixfun_missing_builtin():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
Scaling
replace_nodata
@@ -1171,14 +1283,15 @@ def test_pixfun_missing_builtin():
1
-""")
+"""
+ )
band_vrt = vrt_ds.GetRasterBand(1)
assert band_vrt.GetOffset() == 0
assert band_vrt.GetScale() == 1
assert band_vrt.GetNoDataValue() == None
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
data = band_vrt.ReadAsArray(buf_type=gdal.GDT_Float32)
gdal.PopErrorHandler()
assert data is None
diff --git a/autotest/gcore/pnm_read.py b/autotest/gcore/pnm_read.py
index fa2d5da240b6..fdbddaaff4f4 100755
--- a/autotest/gcore/pnm_read.py
+++ b/autotest/gcore/pnm_read.py
@@ -28,24 +28,21 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import pytest
-
import gdaltest
+import pytest
###############################################################################
# When imported build a list of units based on the files available.
-init_list = [
- ('byte.pnm', 4672),
- ('uint16.pnm', 4672)]
+init_list = [("byte.pnm", 4672), ("uint16.pnm", 4672)]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('PNM')
+@pytest.mark.require_driver("PNM")
def test_pnm_open(filename, checksum):
- ut = gdaltest.GDALTest('PNM', filename, 1, checksum)
+ ut = gdaltest.GDALTest("PNM", filename, 1, checksum)
ut.testOpen()
diff --git a/autotest/gcore/pnm_write.py b/autotest/gcore/pnm_write.py
index 7431824a6476..0bc4a319ff65 100755
--- a/autotest/gcore/pnm_write.py
+++ b/autotest/gcore/pnm_write.py
@@ -25,27 +25,25 @@
# Boston, MA 02111-1307, USA.
###############################################################################
-import pytest
-
import gdaltest
+import pytest
-init_list = [
- ('byte.tif', 4672),
- ('uint16.tif', 4672)]
+init_list = [("byte.tif", 4672), ("uint16.tif", 4672)]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
@pytest.mark.parametrize(
- 'testfunction', [
- 'testCreateCopy',
- 'testCreate',
- ]
+ "testfunction",
+ [
+ "testCreateCopy",
+ "testCreate",
+ ],
)
-@pytest.mark.require_driver('PNM')
+@pytest.mark.require_driver("PNM")
def test_pnm_create(filename, checksum, testfunction):
- ut = gdaltest.GDALTest('PNM', filename, 1, checksum)
+ ut = gdaltest.GDALTest("PNM", filename, 1, checksum)
getattr(ut, testfunction)()
diff --git a/autotest/gcore/rasterio.py b/autotest/gcore/rasterio.py
index 48d1c22de801..670b9919864d 100755
--- a/autotest/gcore/rasterio.py
+++ b/autotest/gcore/rasterio.py
@@ -33,57 +33,78 @@
import struct
import sys
-from osgeo import gdal
import gdaltest
import pytest
+from osgeo import gdal
+
###############################################################################
# Test writing a 1x1 buffer to a 10x6 raster and read it back
def test_rasterio_1():
- data = 'A'.encode('ascii')
+ data = "A".encode("ascii")
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.Create('tmp/rasterio1.tif', 10, 6, 1)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.Create("tmp/rasterio1.tif", 10, 6, 1)
ds.GetRasterBand(1).Fill(65)
checksum = ds.GetRasterBand(1).Checksum()
ds.GetRasterBand(1).Fill(0)
- ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, data, buf_type=gdal.GDT_Byte, buf_xsize=1, buf_ysize=1)
- assert checksum == ds.GetRasterBand(1).Checksum(), 'Didnt get expected checksum '
+ ds.WriteRaster(
+ 0,
+ 0,
+ ds.RasterXSize,
+ ds.RasterYSize,
+ data,
+ buf_type=gdal.GDT_Byte,
+ buf_xsize=1,
+ buf_ysize=1,
+ )
+ assert checksum == ds.GetRasterBand(1).Checksum(), "Didnt get expected checksum "
data2 = ds.ReadRaster(0, 0, ds.RasterXSize, ds.RasterYSize, 1, 1)
- assert data2 == data, 'Didnt get expected buffer '
+ assert data2 == data, "Didnt get expected buffer "
ds = None
- drv.Delete('tmp/rasterio1.tif')
+ drv.Delete("tmp/rasterio1.tif")
+
###############################################################################
# Test writing a 5x4 buffer to a 10x6 raster and read it back
def test_rasterio_2():
- data = 'AAAAAAAAAAAAAAAAAAAA'.encode('ascii')
+ data = "AAAAAAAAAAAAAAAAAAAA".encode("ascii")
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.Create('tmp/rasterio2.tif', 10, 6, 1)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.Create("tmp/rasterio2.tif", 10, 6, 1)
ds.GetRasterBand(1).Fill(65)
checksum = ds.GetRasterBand(1).Checksum()
ds.GetRasterBand(1).Fill(0)
- ds.WriteRaster(0, 0, ds.RasterXSize, ds.RasterYSize, data, buf_type=gdal.GDT_Byte, buf_xsize=5, buf_ysize=4)
- assert checksum == ds.GetRasterBand(1).Checksum(), 'Didnt get expected checksum '
+ ds.WriteRaster(
+ 0,
+ 0,
+ ds.RasterXSize,
+ ds.RasterYSize,
+ data,
+ buf_type=gdal.GDT_Byte,
+ buf_xsize=5,
+ buf_ysize=4,
+ )
+ assert checksum == ds.GetRasterBand(1).Checksum(), "Didnt get expected checksum "
data2 = ds.ReadRaster(0, 0, ds.RasterXSize, ds.RasterYSize, 5, 4)
- assert data2 == data, 'Didnt get expected buffer '
+ assert data2 == data, "Didnt get expected buffer "
ds = None
- drv.Delete('tmp/rasterio2.tif')
+ drv.Delete("tmp/rasterio2.tif")
+
###############################################################################
# Test extensive read & writes into a non tiled raster
@@ -91,15 +112,15 @@ def test_rasterio_2():
def test_rasterio_3():
- data = [['' for i in range(4)] for i in range(5)]
+ data = [["" for i in range(4)] for i in range(5)]
for xsize in range(5):
for ysize in range(4):
for m in range((xsize + 1) * (ysize + 1)):
- data[xsize][ysize] = data[xsize][ysize] + 'A'
- data[xsize][ysize] = data[xsize][ysize].encode('ascii')
+ data[xsize][ysize] = data[xsize][ysize] + "A"
+ data[xsize][ysize] = data[xsize][ysize].encode("ascii")
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.Create('tmp/rasterio3.tif', 10, 6, 1)
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.Create("tmp/rasterio3.tif", 10, 6, 1)
i = 0
while i < ds.RasterXSize:
@@ -112,19 +133,30 @@ def test_rasterio_3():
for xsize in range(5):
for ysize in range(4):
ds.GetRasterBand(1).Fill(0)
- ds.WriteRaster(i, j, k + 1, m + 1, data[xsize][ysize],
- buf_type=gdal.GDT_Byte,
- buf_xsize=xsize + 1, buf_ysize=ysize + 1)
- data2 = ds.ReadRaster(i, j, k + 1, m + 1, xsize + 1, ysize + 1, gdal.GDT_Byte)
- assert data2 == data[xsize][ysize], \
- 'Didnt get expected buffer '
+ ds.WriteRaster(
+ i,
+ j,
+ k + 1,
+ m + 1,
+ data[xsize][ysize],
+ buf_type=gdal.GDT_Byte,
+ buf_xsize=xsize + 1,
+ buf_ysize=ysize + 1,
+ )
+ data2 = ds.ReadRaster(
+ i, j, k + 1, m + 1, xsize + 1, ysize + 1, gdal.GDT_Byte
+ )
+ assert (
+ data2 == data[xsize][ysize]
+ ), "Didnt get expected buffer "
m = m + 1
k = k + 1
j = j + 1
i = i + 1
ds = None
- drv.Delete('tmp/rasterio3.tif')
+ drv.Delete("tmp/rasterio3.tif")
+
###############################################################################
# Test extensive read & writes into a tiled raster
@@ -132,14 +164,20 @@ def test_rasterio_3():
def test_rasterio_4():
- data = ['' for i in range(5 * 4)]
+ data = ["" for i in range(5 * 4)]
for size in range(5 * 4):
for k in range(size + 1):
- data[size] = data[size] + 'A'
- data[size] = data[size].encode('ascii')
-
- drv = gdal.GetDriverByName('GTiff')
- ds = drv.Create('tmp/rasterio4.tif', 20, 20, 1, options=['TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16'])
+ data[size] = data[size] + "A"
+ data[size] = data[size].encode("ascii")
+
+ drv = gdal.GetDriverByName("GTiff")
+ ds = drv.Create(
+ "tmp/rasterio4.tif",
+ 20,
+ 20,
+ 1,
+ options=["TILED=YES", "BLOCKXSIZE=16", "BLOCKYSIZE=16"],
+ )
i = 0
while i < ds.RasterXSize:
@@ -152,13 +190,22 @@ def test_rasterio_4():
for xsize in range(5):
for ysize in range(4):
ds.GetRasterBand(1).Fill(0)
- ds.WriteRaster(i, j, k + 1, m + 1, data[(xsize + 1) * (ysize + 1) - 1],
- buf_type=gdal.GDT_Byte,
- buf_xsize=xsize + 1, buf_ysize=ysize + 1)
- data2 = ds.ReadRaster(i, j, k + 1, m + 1, xsize + 1, ysize + 1, gdal.GDT_Byte)
+ ds.WriteRaster(
+ i,
+ j,
+ k + 1,
+ m + 1,
+ data[(xsize + 1) * (ysize + 1) - 1],
+ buf_type=gdal.GDT_Byte,
+ buf_xsize=xsize + 1,
+ buf_ysize=ysize + 1,
+ )
+ data2 = ds.ReadRaster(
+ i, j, k + 1, m + 1, xsize + 1, ysize + 1, gdal.GDT_Byte
+ )
if data2 != data[(xsize + 1) * (ysize + 1) - 1]:
print(i, j, k, m, xsize, ysize)
- pytest.fail('Didnt get expected buffer ')
+ pytest.fail("Didnt get expected buffer ")
m = m + 1
k = k + 1
if j >= 15:
@@ -171,7 +218,8 @@ def test_rasterio_4():
i = i + 3
ds = None
- drv.Delete('tmp/rasterio4.tif')
+ drv.Delete("tmp/rasterio4.tif")
+
###############################################################################
# Test error cases of ReadRaster()
@@ -179,7 +227,7 @@ def test_rasterio_4():
def test_rasterio_5():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
for obj in [ds, ds.GetRasterBand(1)]:
obj.ReadRaster(0, 0, -2000000000, 1, 1, 1)
@@ -187,26 +235,28 @@ def test_rasterio_5():
for band_number in [-1, 0, 2]:
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
res = ds.ReadRaster(0, 0, 1, 1, band_list=[band_number])
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert res is None, 'expected None'
- assert error_msg.find('this band does not exist on dataset') != -1, \
- 'did not get expected error msg'
+ assert res is None, "expected None"
+ assert (
+ error_msg.find("this band does not exist on dataset") != -1
+ ), "did not get expected error msg"
res = ds.ReadRaster(0, 0, 1, 1, band_list=[1, 1])
- assert res is not None, 'expected non None'
+ assert res is not None, "expected non None"
for obj in [ds, ds.GetRasterBand(1)]:
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
res = obj.ReadRaster(0, 0, 21, 21)
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert res is None, 'expected None'
- assert error_msg.find('Access window out of range in RasterIO()') != -1, \
- 'did not get expected error msg (1)'
+ assert res is None, "expected None"
+ assert (
+ error_msg.find("Access window out of range in RasterIO()") != -1
+ ), "did not get expected error msg (1)"
# This should only fail on a 32bit build
try:
@@ -218,78 +268,86 @@ def test_rasterio_5():
# fails because of out of memory condition, not
# because of integer overflow. I'm not sure on how
# to detect win64 better.
- if maxsize == 2147483647 and sys.platform != 'win32':
+ if maxsize == 2147483647 and sys.platform != "win32":
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
res = obj.ReadRaster(0, 0, 1, 1, 1000000, 1000000)
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert res is None, 'expected None'
- assert error_msg.find('Integer overflow') != -1, \
- 'did not get expected error msg (2)'
+ assert res is None, "expected None"
+ assert (
+ error_msg.find("Integer overflow") != -1
+ ), "did not get expected error msg (2)"
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
res = obj.ReadRaster(0, 0, 0, 1)
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert res is None, 'expected None'
- assert error_msg.find('Illegal values for buffer size') != -1, \
- 'did not get expected error msg (3)'
+ assert res is None, "expected None"
+ assert (
+ error_msg.find("Illegal values for buffer size") != -1
+ ), "did not get expected error msg (3)"
ds = None
+
###############################################################################
# Test error cases of WriteRaster()
def test_rasterio_6():
- ds = gdal.GetDriverByName('MEM').Create('', 2, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 2, 2)
for obj in [ds, ds.GetRasterBand(1)]:
with pytest.raises(Exception):
obj.WriteRaster(0, 0, 2, 2, None)
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- obj.WriteRaster(0, 0, 2, 2, ' ')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ obj.WriteRaster(0, 0, 2, 2, " ")
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert error_msg.find('Buffer too small') != -1, \
- 'did not get expected error msg (1)'
+ assert (
+ error_msg.find("Buffer too small") != -1
+ ), "did not get expected error msg (1)"
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- obj.WriteRaster(-1, 0, 1, 1, ' ')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ obj.WriteRaster(-1, 0, 1, 1, " ")
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert error_msg.find('Access window out of range in RasterIO()') != -1, \
- 'did not get expected error msg (2)'
+ assert (
+ error_msg.find("Access window out of range in RasterIO()") != -1
+ ), "did not get expected error msg (2)"
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- obj.WriteRaster(0, 0, 0, 1, ' ')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ obj.WriteRaster(0, 0, 0, 1, " ")
gdal.PopErrorHandler()
error_msg = gdal.GetLastErrorMsg()
- assert error_msg.find('Illegal values for buffer size') != -1, \
- 'did not get expected error msg (3)'
+ assert (
+ error_msg.find("Illegal values for buffer size") != -1
+ ), "did not get expected error msg (3)"
ds = None
+
###############################################################################
# Test that default window reading works via ReadRaster()
def test_rasterio_7():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
data = ds.GetRasterBand(1).ReadRaster()
- assert len(data) == 400, 'did not read expected band data via ReadRaster()'
+ assert len(data) == 400, "did not read expected band data via ReadRaster()"
data = ds.ReadRaster()
- assert len(data) == 400, 'did not read expected dataset data via ReadRaster()'
+ assert len(data) == 400, "did not read expected dataset data via ReadRaster()"
+
###############################################################################
# Test callback of ReadRaster()
@@ -298,7 +356,7 @@ def test_rasterio_7():
def rasterio_8_progress_callback(pct, message, user_data):
# pylint: disable=unused-argument
if pct != pytest.approx((user_data[0] + 0.05), abs=1e-5):
- print('Expected %f, got %f' % (user_data[0] + 0.05, pct))
+ print("Expected %f, got %f" % (user_data[0] + 0.05, pct))
user_data[1] = False
user_data[0] = pct
return 1 # 1 to continue, 0 to stop
@@ -315,7 +373,7 @@ def rasterio_8_progress_interrupt_callback(pct, message, user_data):
def rasterio_8_progress_callback_2(pct, message, user_data):
# pylint: disable=unused-argument
if pct < user_data[0]:
- print('Got %f, last pct was %f' % (pct, user_data[0]))
+ print("Got %f, last pct was %f" % (pct, user_data[0]))
return 0
user_data[0] = pct
return 1 # 1 to continue, 0 to stop
@@ -323,99 +381,118 @@ def rasterio_8_progress_callback_2(pct, message, user_data):
def test_rasterio_8():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
# Progress not implemented yet
- if gdal.GetConfigOption('GTIFF_DIRECT_IO') == 'YES' or \
- gdal.GetConfigOption('GTIFF_VIRTUAL_MEM_IO') == 'YES':
+ if (
+ gdal.GetConfigOption("GTIFF_DIRECT_IO") == "YES"
+ or gdal.GetConfigOption("GTIFF_VIRTUAL_MEM_IO") == "YES"
+ ):
pytest.skip()
# Test RasterBand.ReadRaster
tab = [0, True]
- data = ds.GetRasterBand(1).ReadRaster(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=rasterio_8_progress_callback,
- callback_data=tab)
- assert len(data) == 400, 'did not read expected band data via ReadRaster()'
+ data = ds.GetRasterBand(1).ReadRaster(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=rasterio_8_progress_callback,
+ callback_data=tab,
+ )
+ assert len(data) == 400, "did not read expected band data via ReadRaster()"
assert tab[0] == pytest.approx(1, abs=1e-5) and tab[1]
# Test interruption
tab = [0]
- data = ds.GetRasterBand(1).ReadRaster(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=rasterio_8_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=rasterio_8_progress_interrupt_callback,
+ callback_data=tab,
+ )
assert data is None
assert tab[0] >= 0.50
# Test RasterBand.ReadRaster with type change
tab = [0, True]
- data = ds.GetRasterBand(1).ReadRaster(buf_type=gdal.GDT_Int16,
- callback=rasterio_8_progress_callback,
- callback_data=tab)
- assert data is not None, 'did not read expected band data via ReadRaster()'
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_type=gdal.GDT_Int16,
+ callback=rasterio_8_progress_callback,
+ callback_data=tab,
+ )
+ assert data is not None, "did not read expected band data via ReadRaster()"
assert tab[0] == pytest.approx(1, abs=1e-5) and tab[1]
# Same with interruption
tab = [0]
- data = ds.GetRasterBand(1).ReadRaster(buf_type=gdal.GDT_Int16,
- callback=rasterio_8_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_type=gdal.GDT_Int16,
+ callback=rasterio_8_progress_interrupt_callback,
+ callback_data=tab,
+ )
assert data is None and tab[0] >= 0.50
# Test RasterBand.ReadRaster with resampling
tab = [0, True]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=40,
- callback=rasterio_8_progress_callback,
- callback_data=tab)
- assert data is not None, 'did not read expected band data via ReadRaster()'
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=40, callback=rasterio_8_progress_callback, callback_data=tab
+ )
+ assert data is not None, "did not read expected band data via ReadRaster()"
assert tab[0] == pytest.approx(1, abs=1e-5) and tab[1]
# Same with interruption
tab = [0]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=40,
- callback=rasterio_8_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=40, callback=rasterio_8_progress_interrupt_callback, callback_data=tab
+ )
assert data is None and tab[0] >= 0.50
# Test Dataset.ReadRaster
tab = [0, True]
- data = ds.ReadRaster(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=rasterio_8_progress_callback,
- callback_data=tab)
- assert len(data) == 400, 'did not read expected dataset data via ReadRaster()'
+ data = ds.ReadRaster(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=rasterio_8_progress_callback,
+ callback_data=tab,
+ )
+ assert len(data) == 400, "did not read expected dataset data via ReadRaster()"
assert tab[0] == pytest.approx(1, abs=1e-5) and tab[1]
ds = None
# Test Dataset.ReadRaster on a multi band file, with INTERLEAVE=BAND
- ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdal.Open("data/rgbsmall.tif")
last_pct = [0]
- data = ds.ReadRaster(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=rasterio_8_progress_callback_2,
- callback_data=last_pct)
+ data = ds.ReadRaster(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=rasterio_8_progress_callback_2,
+ callback_data=last_pct,
+ )
assert not (data is None or last_pct[0] != pytest.approx(1.0, abs=1e-5))
# Same with interruption
tab = [0]
- data = ds.ReadRaster(callback=rasterio_8_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.ReadRaster(
+ callback=rasterio_8_progress_interrupt_callback, callback_data=tab
+ )
assert data is None and tab[0] >= 0.50
ds = None
# Test Dataset.ReadRaster on a multi band file, with INTERLEAVE=PIXEL
- ds = gdal.Open('data/rgbsmall_cmyk.tif')
+ ds = gdal.Open("data/rgbsmall_cmyk.tif")
last_pct = [0]
- data = ds.ReadRaster(resample_alg=gdal.GRIORA_NearestNeighbour,
- callback=rasterio_8_progress_callback_2,
- callback_data=last_pct)
+ data = ds.ReadRaster(
+ resample_alg=gdal.GRIORA_NearestNeighbour,
+ callback=rasterio_8_progress_callback_2,
+ callback_data=last_pct,
+ )
assert not (data is None or last_pct[0] != pytest.approx(1.0, abs=1e-5))
# Same with interruption
tab = [0]
- data = ds.ReadRaster(callback=rasterio_8_progress_interrupt_callback,
- callback_data=tab)
+ data = ds.ReadRaster(
+ callback=rasterio_8_progress_interrupt_callback, callback_data=tab
+ )
assert data is None and tab[0] >= 0.50
+
###############################################################################
# Test resampling algorithm of ReadRaster()
@@ -423,7 +500,7 @@ def test_rasterio_8():
def rasterio_9_progress_callback(pct, message, user_data):
# pylint: disable=unused-argument
if pct < user_data[0]:
- print('Got %f, last pct was %f' % (pct, user_data[0]))
+ print("Got %f, last pct was %f" % (pct, user_data[0]))
return 0
user_data[0] = pct
if user_data[1] is not None and pct >= user_data[1]:
@@ -432,25 +509,29 @@ def rasterio_9_progress_callback(pct, message, user_data):
def rasterio_9_checksum(data, buf_xsize, buf_ysize, data_type=gdal.GDT_Byte):
- ds = gdal.GetDriverByName('MEM').Create('', buf_xsize, buf_ysize, 1)
- ds.GetRasterBand(1).WriteRaster(0, 0, buf_xsize, buf_ysize, data, buf_type=data_type)
+ ds = gdal.GetDriverByName("MEM").Create("", buf_xsize, buf_ysize, 1)
+ ds.GetRasterBand(1).WriteRaster(
+ 0, 0, buf_xsize, buf_ysize, data, buf_type=data_type
+ )
cs = ds.GetRasterBand(1).Checksum()
return cs
def test_rasterio_9():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
# Test RasterBand.ReadRaster, with Bilinear
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_type=gdal.GDT_Int16,
- buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Bilinear,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_type=gdal.GDT_Int16,
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Bilinear,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
- data_ar = struct.unpack('h' * 10 * 10, data)
+ data_ar = struct.unpack("h" * 10 * 10, data)
cs = rasterio_9_checksum(data, 10, 10, data_type=gdal.GDT_Int16)
assert cs == 1211
@@ -458,21 +539,25 @@ def test_rasterio_9():
# Same but query with GDT_Float32. Check that we do not get floating-point
# values, since the band type is Byte
- data = ds.GetRasterBand(1).ReadRaster(buf_type=gdal.GDT_Float32,
- buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Bilinear)
-
- data_float32_ar = struct.unpack('f' * 10 * 10, data)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_type=gdal.GDT_Float32,
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Bilinear,
+ )
+
+ data_float32_ar = struct.unpack("f" * 10 * 10, data)
assert data_ar == data_float32_ar
# Test RasterBand.ReadRaster, with Lanczos
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Lanczos,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Lanczos,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 10, 10)
assert cs == 1154
@@ -480,14 +565,16 @@ def test_rasterio_9():
assert tab[0] == pytest.approx(1.0, abs=1e-5)
# Test RasterBand.ReadRaster, with Bilinear and UInt16 data type
- src_ds_uint16 = gdal.Open('data/uint16.tif')
+ src_ds_uint16 = gdal.Open("data/uint16.tif")
tab = [0, None]
- data = src_ds_uint16.GetRasterBand(1).ReadRaster(buf_type=gdal.GDT_UInt16,
- buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Bilinear,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = src_ds_uint16.GetRasterBand(1).ReadRaster(
+ buf_type=gdal.GDT_UInt16,
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Bilinear,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 10, 10, data_type=gdal.GDT_UInt16)
assert cs == 1211
@@ -496,13 +583,17 @@ def test_rasterio_9():
# Test RasterBand.ReadRaster, with Bilinear on Complex, thus using warp API
tab = [0, None]
- complex_ds = gdal.GetDriverByName('MEM').Create('', 20, 20, 1, gdal.GDT_CInt16)
- complex_ds.GetRasterBand(1).WriteRaster(0, 0, 20, 20, ds.GetRasterBand(1).ReadRaster(), buf_type=gdal.GDT_Byte)
- data = complex_ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Bilinear,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ complex_ds = gdal.GetDriverByName("MEM").Create("", 20, 20, 1, gdal.GDT_CInt16)
+ complex_ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 20, 20, ds.GetRasterBand(1).ReadRaster(), buf_type=gdal.GDT_Byte
+ )
+ data = complex_ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Bilinear,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 10, 10, data_type=gdal.GDT_CInt16)
assert cs == 1211
@@ -511,23 +602,27 @@ def test_rasterio_9():
# Test interruption
tab = [0, 0.5]
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Bilinear,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Bilinear,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
gdal.PopErrorHandler()
assert data is None
assert tab[0] >= 0.50
# Test RasterBand.ReadRaster, with Gauss, and downsampling
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Gauss,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Gauss,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 10, 10)
assert cs == 1089
@@ -536,11 +631,13 @@ def test_rasterio_9():
# Test RasterBand.ReadRaster, with Cubic, and downsampling
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10,
- resample_alg=gdal.GRIORA_Cubic,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=10,
+ buf_ysize=10,
+ resample_alg=gdal.GRIORA_Cubic,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 10, 10)
assert cs == 1059
@@ -548,28 +645,30 @@ def test_rasterio_9():
assert tab[0] == pytest.approx(1.0, abs=1e-5)
# Test RasterBand.ReadRaster, with Cubic, and downsampling with >=8x8 source samples used for a dest sample
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=5,
- buf_ysize=5,
- resample_alg=gdal.GRIORA_Cubic)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=5, buf_ysize=5, resample_alg=gdal.GRIORA_Cubic
+ )
assert data is not None
cs = rasterio_9_checksum(data, 5, 5)
assert cs == 214
# Same with UInt16
- data = src_ds_uint16.GetRasterBand(1).ReadRaster(buf_xsize=5,
- buf_ysize=5,
- resample_alg=gdal.GRIORA_Cubic)
+ data = src_ds_uint16.GetRasterBand(1).ReadRaster(
+ buf_xsize=5, buf_ysize=5, resample_alg=gdal.GRIORA_Cubic
+ )
assert data is not None
cs = rasterio_9_checksum(data, 5, 5, data_type=gdal.GDT_UInt16)
assert cs == 214
# Test RasterBand.ReadRaster, with Cubic and supersampling
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=40,
- buf_ysize=40,
- resample_alg=gdal.GRIORA_Cubic,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=40,
+ buf_ysize=40,
+ resample_alg=gdal.GRIORA_Cubic,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 40, 40)
assert cs == 19556
@@ -578,11 +677,13 @@ def test_rasterio_9():
# Test Dataset.ReadRaster, with Cubic and supersampling
tab = [0, None]
- data = ds.ReadRaster(buf_xsize=40,
- buf_ysize=40,
- resample_alg=gdal.GRIORA_CubicSpline,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.ReadRaster(
+ buf_xsize=40,
+ buf_ysize=40,
+ resample_alg=gdal.GRIORA_CubicSpline,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 40, 40)
assert cs == 19041
@@ -590,41 +691,46 @@ def test_rasterio_9():
assert tab[0] == pytest.approx(1.0, abs=1e-5)
# Test Dataset.ReadRaster on a multi band file, with INTERLEAVE=PIXEL
- ds = gdal.Open('data/rgbsmall_cmyk.tif')
+ ds = gdal.Open("data/rgbsmall_cmyk.tif")
tab = [0, None]
- data = ds.ReadRaster(buf_xsize=25,
- buf_ysize=25,
- resample_alg=gdal.GRIORA_Cubic,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.ReadRaster(
+ buf_xsize=25,
+ buf_ysize=25,
+ resample_alg=gdal.GRIORA_Cubic,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
- cs = rasterio_9_checksum(data[0:25 * 25], 25, 25)
+ cs = rasterio_9_checksum(data[0 : 25 * 25], 25, 25)
assert cs == 5975
- cs = rasterio_9_checksum(data[25 * 25:2 * 25 * 25], 25, 25)
+ cs = rasterio_9_checksum(data[25 * 25 : 2 * 25 * 25], 25, 25)
assert cs == 6248
assert tab[0] == pytest.approx(1.0, abs=1e-5)
ds = None
# Test Band.ReadRaster on a RGBA with parts fully opaque, and fully transparent and with huge upscaling
- ds = gdal.Open('data/stefan_full_rgba.png')
+ ds = gdal.Open("data/stefan_full_rgba.png")
tab = [0, None]
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=162 * 16,
- buf_ysize=150 * 16,
- resample_alg=gdal.GRIORA_Cubic,
- callback=rasterio_9_progress_callback,
- callback_data=tab)
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=162 * 16,
+ buf_ysize=150 * 16,
+ resample_alg=gdal.GRIORA_Cubic,
+ callback=rasterio_9_progress_callback,
+ callback_data=tab,
+ )
assert data is not None
cs = rasterio_9_checksum(data, 162 * 16, 150 * 16)
assert cs == 18981
assert tab[0] == pytest.approx(1.0, abs=1e-5)
+
###############################################################################
# Test error when getting a block
def test_rasterio_10():
- ds = gdal.Open('data/byte_truncated.tif')
+ ds = gdal.Open("data/byte_truncated.tif")
gdal.PushErrorHandler()
data = ds.GetRasterBand(1).ReadRaster()
@@ -639,64 +745,88 @@ def test_rasterio_10():
# Resampling case
gdal.PushErrorHandler()
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10,
- buf_ysize=10)
+ data = ds.GetRasterBand(1).ReadRaster(buf_xsize=10, buf_ysize=10)
gdal.PopErrorHandler()
assert data is None
+
###############################################################################
# Test cubic resampling and nbits
def test_rasterio_11():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- mem_ds = gdal.GetDriverByName('MEM').Create('', 4, 3)
- mem_ds.GetRasterBand(1).WriteArray(numpy.array([[80, 125, 125, 80], [80, 125, 125, 80], [80, 125, 125, 80]]))
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 4, 3)
+ mem_ds.GetRasterBand(1).WriteArray(
+ numpy.array([[80, 125, 125, 80], [80, 125, 125, 80], [80, 125, 125, 80]])
+ )
# A bit dummy
- mem_ds.GetRasterBand(1).SetMetadataItem('NBITS', '8', 'IMAGE_STRUCTURE')
- ar = mem_ds.GetRasterBand(1).ReadAsArray(0, 0, 4, 3, 8, 3, resample_alg=gdal.GRIORA_Cubic)
+ mem_ds.GetRasterBand(1).SetMetadataItem("NBITS", "8", "IMAGE_STRUCTURE")
+ ar = mem_ds.GetRasterBand(1).ReadAsArray(
+ 0, 0, 4, 3, 8, 3, resample_alg=gdal.GRIORA_Cubic
+ )
assert ar.max() == 129
# NBITS=7
- mem_ds.GetRasterBand(1).SetMetadataItem('NBITS', '7', 'IMAGE_STRUCTURE')
- ar = mem_ds.GetRasterBand(1).ReadAsArray(0, 0, 4, 3, 8, 3, resample_alg=gdal.GRIORA_Cubic)
+ mem_ds.GetRasterBand(1).SetMetadataItem("NBITS", "7", "IMAGE_STRUCTURE")
+ ar = mem_ds.GetRasterBand(1).ReadAsArray(
+ 0, 0, 4, 3, 8, 3, resample_alg=gdal.GRIORA_Cubic
+ )
# Would overshoot to 129 if NBITS was ignored
assert ar.max() == 127
+
###############################################################################
# Test cubic resampling on dataset RasterIO with an alpha channel
def rasterio_12_progress_callback(pct, message, user_data):
if pct < user_data[0]:
- print('Got %f, last pct was %f' % (pct, user_data[0]))
+ print("Got %f, last pct was %f" % (pct, user_data[0]))
return 0
user_data[0] = pct
return 1 # 1 to continue, 0 to stop
def test_rasterio_12():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- mem_ds = gdal.GetDriverByName('MEM').Create('', 4, 3, 4)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 4, 3, 4)
for i in range(3):
mem_ds.GetRasterBand(i + 1).SetColorInterpretation(gdal.GCI_GrayIndex)
mem_ds.GetRasterBand(4).SetColorInterpretation(gdal.GCI_AlphaBand)
for i in range(4):
- mem_ds.GetRasterBand(i + 1).WriteArray(numpy.array([[0, 0, 0, 0], [0, 255, 0, 0], [0, 0, 0, 0]]))
+ mem_ds.GetRasterBand(i + 1).WriteArray(
+ numpy.array([[0, 0, 0, 0], [0, 255, 0, 0], [0, 0, 0, 0]])
+ )
tab = [0]
- ar_ds = mem_ds.ReadAsArray(0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic,
- callback=rasterio_12_progress_callback,
- callback_data=tab)
+ ar_ds = mem_ds.ReadAsArray(
+ 0,
+ 0,
+ 4,
+ 3,
+ buf_xsize=8,
+ buf_ysize=3,
+ resample_alg=gdal.GRIORA_Cubic,
+ callback=rasterio_12_progress_callback,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
- ar_ds2 = mem_ds.ReadAsArray(0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic)
+ ar_ds2 = mem_ds.ReadAsArray(
+ 0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic
+ )
assert numpy.array_equal(ar_ds, ar_ds2)
- ar_bands = [mem_ds.GetRasterBand(i + 1).ReadAsArray(0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic) for i in range(4)]
+ ar_bands = [
+ mem_ds.GetRasterBand(i + 1).ReadAsArray(
+ 0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic
+ )
+ for i in range(4)
+ ]
# Results of band or dataset RasterIO should be the same
for i in range(4):
@@ -708,22 +838,33 @@ def test_rasterio_12():
# Alpha band should be different
assert not numpy.array_equal(ar_ds[0], ar_ds[3])
+
###############################################################################
# Test cubic resampling with masking
def test_rasterio_13():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
for dt in [gdal.GDT_Byte, gdal.GDT_UInt16, gdal.GDT_UInt32]:
- mem_ds = gdal.GetDriverByName('MEM').Create('', 4, 3, 1, dt)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 4, 3, 1, dt)
mem_ds.GetRasterBand(1).SetNoDataValue(0)
- mem_ds.GetRasterBand(1).WriteArray(numpy.array([[0, 0, 0, 0], [0, 255, 0, 0], [0, 0, 0, 0]]))
-
- ar_ds = mem_ds.ReadAsArray(0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic)
-
- expected_ar = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 255, 255, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]])
+ mem_ds.GetRasterBand(1).WriteArray(
+ numpy.array([[0, 0, 0, 0], [0, 255, 0, 0], [0, 0, 0, 0]])
+ )
+
+ ar_ds = mem_ds.ReadAsArray(
+ 0, 0, 4, 3, buf_xsize=8, buf_ysize=3, resample_alg=gdal.GRIORA_Cubic
+ )
+
+ expected_ar = numpy.array(
+ [
+ [0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 255, 255, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0],
+ ]
+ )
assert numpy.array_equal(ar_ds, expected_ar), (ar_ds, dt)
@@ -733,8 +874,9 @@ def test_rasterio_13():
def test_rasterio_14():
- gdal.FileFromMemBuffer('/vsimem/rasterio_14.asc',
- """ncols 6
+ gdal.FileFromMemBuffer(
+ "/vsimem/rasterio_14.asc",
+ """ncols 6
nrows 6
xllcorner 0
yllcorner 0
@@ -744,33 +886,62 @@ def test_rasterio_14():
0 0 0 0 100 0
100 0 100 0 0 0
0 100 0 100 0 0
- 0 0 0 0 0 100""")
-
- ds = gdal.Translate('/vsimem/rasterio_14_out.asc', '/vsimem/rasterio_14.asc', options='-of AAIGRID -r average -outsize 50% 50%')
+ 0 0 0 0 0 100""",
+ )
+
+ ds = gdal.Translate(
+ "/vsimem/rasterio_14_out.asc",
+ "/vsimem/rasterio_14.asc",
+ options="-of AAIGRID -r average -outsize 50% 50%",
+ )
cs = ds.GetRasterBand(1).Checksum()
assert cs == 110, ds.ReadAsArray()
- gdal.Unlink('/vsimem/rasterio_14.asc')
- gdal.Unlink('/vsimem/rasterio_14_out.asc')
-
- ds = gdal.GetDriverByName('MEM').Create('', 1000000, 1)
- ds.GetRasterBand(1).WriteRaster(ds.RasterXSize - 1, 0, 1, 1, struct.pack('B' * 1, 100))
- data = ds.ReadRaster(buf_xsize=int(ds.RasterXSize / 2), buf_ysize=1, resample_alg=gdal.GRIORA_Average)
- data = struct.unpack('B' * int(ds.RasterXSize / 2), data)
+ gdal.Unlink("/vsimem/rasterio_14.asc")
+ gdal.Unlink("/vsimem/rasterio_14_out.asc")
+
+ ds = gdal.GetDriverByName("MEM").Create("", 1000000, 1)
+ ds.GetRasterBand(1).WriteRaster(
+ ds.RasterXSize - 1, 0, 1, 1, struct.pack("B" * 1, 100)
+ )
+ data = ds.ReadRaster(
+ buf_xsize=int(ds.RasterXSize / 2), buf_ysize=1, resample_alg=gdal.GRIORA_Average
+ )
+ data = struct.unpack("B" * int(ds.RasterXSize / 2), data)
assert data[-1:][0] == 50
- data = ds.ReadRaster(ds.RasterXSize - 2, 0, 2, 1, buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Average)
- data = struct.unpack('B' * 1, data)
+ data = ds.ReadRaster(
+ ds.RasterXSize - 2,
+ 0,
+ 2,
+ 1,
+ buf_xsize=1,
+ buf_ysize=1,
+ resample_alg=gdal.GRIORA_Average,
+ )
+ data = struct.unpack("B" * 1, data)
assert data[0] == 50
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1000000)
- ds.GetRasterBand(1).WriteRaster(0, ds.RasterYSize - 1, 1, 1, struct.pack('B' * 1, 100))
- data = ds.ReadRaster(buf_xsize=1, buf_ysize=int(ds.RasterYSize / 2), resample_alg=gdal.GRIORA_Average)
- data = struct.unpack('B' * int(ds.RasterYSize / 2), data)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1000000)
+ ds.GetRasterBand(1).WriteRaster(
+ 0, ds.RasterYSize - 1, 1, 1, struct.pack("B" * 1, 100)
+ )
+ data = ds.ReadRaster(
+ buf_xsize=1, buf_ysize=int(ds.RasterYSize / 2), resample_alg=gdal.GRIORA_Average
+ )
+ data = struct.unpack("B" * int(ds.RasterYSize / 2), data)
assert data[-1:][0] == 50
- data = ds.ReadRaster(0, ds.RasterYSize - 2, 1, 2, buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Average)
- data = struct.unpack('B' * 1, data)
+ data = ds.ReadRaster(
+ 0,
+ ds.RasterYSize - 2,
+ 1,
+ 2,
+ buf_xsize=1,
+ buf_ysize=1,
+ resample_alg=gdal.GRIORA_Average,
+ )
+ data = struct.unpack("B" * 1, data)
assert data[0] == 50
@@ -780,8 +951,9 @@ def test_rasterio_14():
def test_rasterio_average_4by4_to_3by3():
- gdal.FileFromMemBuffer('/vsimem/test_rasterio_average_4by4_to_3by3.asc',
- """ncols 4
+ gdal.FileFromMemBuffer(
+ "/vsimem/test_rasterio_average_4by4_to_3by3.asc",
+ """ncols 4
nrows 4
xllcorner 0
yllcorner 0
@@ -789,15 +961,29 @@ def test_rasterio_average_4by4_to_3by3():
1.0 5 9 13
2 6 10 14
3 7 11 15
- 4 8 12 16""")
-
- ds = gdal.Translate('', '/vsimem/test_rasterio_average_4by4_to_3by3.asc', options='-ot Float32 -f MEM -r average -outsize 3 3')
+ 4 8 12 16""",
+ )
+
+ ds = gdal.Translate(
+ "",
+ "/vsimem/test_rasterio_average_4by4_to_3by3.asc",
+ options="-ot Float32 -f MEM -r average -outsize 3 3",
+ )
data = ds.GetRasterBand(1).ReadRaster()
- assert struct.unpack('f' * 9, data) == (2.25, 7.25, 12.25,
- 3.5, 8.5, 13.5,
- 4.75, 9.75, 14.75)
+ assert struct.unpack("f" * 9, data) == (
+ 2.25,
+ 7.25,
+ 12.25,
+ 3.5,
+ 8.5,
+ 13.5,
+ 4.75,
+ 9.75,
+ 14.75,
+ )
+
+ gdal.Unlink("/vsimem/test_rasterio_average_4by4_to_3by3.asc")
- gdal.Unlink('/vsimem/test_rasterio_average_4by4_to_3by3.asc')
###############################################################################
# Test average oversampling by an integer factor (should behave like nearest)
@@ -805,25 +991,36 @@ def test_rasterio_average_4by4_to_3by3():
def test_rasterio_15():
- gdal.FileFromMemBuffer('/vsimem/rasterio_15.asc',
- """ncols 2
+ gdal.FileFromMemBuffer(
+ "/vsimem/rasterio_15.asc",
+ """ncols 2
nrows 2
xllcorner 0
yllcorner 0
cellsize 0
0 100
-100 100""")
-
- ds = gdal.Translate('/vsimem/rasterio_15_out.asc', '/vsimem/rasterio_15.asc', options='-of AAIGRID -outsize 200% 200%')
+100 100""",
+ )
+
+ ds = gdal.Translate(
+ "/vsimem/rasterio_15_out.asc",
+ "/vsimem/rasterio_15.asc",
+ options="-of AAIGRID -outsize 200% 200%",
+ )
data_ref = ds.GetRasterBand(1).ReadRaster()
ds = None
- ds = gdal.Translate('/vsimem/rasterio_15_out.asc', '/vsimem/rasterio_15.asc', options='-of AAIGRID -r average -outsize 200% 200%')
+ ds = gdal.Translate(
+ "/vsimem/rasterio_15_out.asc",
+ "/vsimem/rasterio_15.asc",
+ options="-of AAIGRID -r average -outsize 200% 200%",
+ )
data = ds.GetRasterBand(1).ReadRaster()
cs = ds.GetRasterBand(1).Checksum()
assert data == data_ref and cs == 134, ds.ReadAsArray()
- gdal.Unlink('/vsimem/rasterio_15.asc')
- gdal.Unlink('/vsimem/rasterio_15_out.asc')
+ gdal.Unlink("/vsimem/rasterio_15.asc")
+ gdal.Unlink("/vsimem/rasterio_15_out.asc")
+
###############################################################################
# Test mode downsampling by a factor of 2 on exact boundaries
@@ -831,8 +1028,9 @@ def test_rasterio_15():
def test_rasterio_16():
- gdal.FileFromMemBuffer('/vsimem/rasterio_16.asc',
- """ncols 6
+ gdal.FileFromMemBuffer(
+ "/vsimem/rasterio_16.asc",
+ """ncols 6
nrows 6
xllcorner 0
yllcorner 0
@@ -842,65 +1040,168 @@ def test_rasterio_16():
100 100 0 0 0 0
0 100 0 0 0 0
0 0 0 0 0 0
- 0 0 0 0 0 0""")
-
- ds = gdal.Translate('/vsimem/rasterio_16_out.asc', '/vsimem/rasterio_16.asc', options='-of AAIGRID -r mode -outsize 50% 50%')
+ 0 0 0 0 0 0""",
+ )
+
+ ds = gdal.Translate(
+ "/vsimem/rasterio_16_out.asc",
+ "/vsimem/rasterio_16.asc",
+ options="-of AAIGRID -r mode -outsize 50% 50%",
+ )
cs = ds.GetRasterBand(1).Checksum()
assert cs == 15, ds.ReadAsArray()
- gdal.Unlink('/vsimem/rasterio_16.asc')
- gdal.Unlink('/vsimem/rasterio_16_out.asc')
+ gdal.Unlink("/vsimem/rasterio_16.asc")
+ gdal.Unlink("/vsimem/rasterio_16_out.asc")
+
###############################################################################
def test_rasterio_nodata():
- pytest.importorskip('numpy')
+ pytest.importorskip("numpy")
ndv = 123
- btype = [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_Int32, gdal.GDT_Float32, gdal.GDT_Float64]
+ btype = [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_Int32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]
### create a MEM dataset
for src_type in btype:
- mem_ds = gdal.GetDriverByName('MEM').Create('', 10, 9, 1, src_type)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 10, 9, 1, src_type)
mem_ds.GetRasterBand(1).SetNoDataValue(ndv)
mem_ds.GetRasterBand(1).Fill(ndv)
for dst_type in btype:
- if ( dst_type > src_type ):
+ if dst_type > src_type:
### read to a buffer of a wider type (and resample)
- data = mem_ds.GetRasterBand(1).ReadAsArray(0, 0, 10, 9, 4, 3, resample_alg=gdal.GRIORA_Bilinear, buf_type=dst_type)
- assert int(data[0,0]) == ndv, 'did not read expected band data via ReadAsArray() - src type -> dst type: ' + str( src_type ) + ' -> ' + str( dst_type )
+ data = mem_ds.GetRasterBand(1).ReadAsArray(
+ 0,
+ 0,
+ 10,
+ 9,
+ 4,
+ 3,
+ resample_alg=gdal.GRIORA_Bilinear,
+ buf_type=dst_type,
+ )
+ assert int(data[0, 0]) == ndv, (
+ "did not read expected band data via ReadAsArray() - src type -> dst type: "
+ + str(src_type)
+ + " -> "
+ + str(dst_type)
+ )
###############################################################################
+
def test_rasterio_lanczos_nodata():
- ds = gdal.Open('data/rasterio_lanczos_nodata.tif')
-
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=9,
- buf_ysize=9,
- resample_alg=gdal.GRIORA_Lanczos)
- data_ar = struct.unpack('H' * 9 * 9, data)
- expected_ar = (0, 0, 0, 22380, 22417, 22509, 22525, 22505, 22518,
- 0, 0, 0, 22415, 22432, 22433, 22541, 22541, 22568,
- 0, 0, 0, 22355, 22378, 22429, 22468, 22562, 22591,
- 0, 0, 0, 22271, 22343, 22384, 22526, 22565, 22699,
- 0, 0, 0, 22404, 22345, 22537, 22590, 22582, 22645,
- 0, 0, 0, 22461, 22484, 22464, 22495, 22633, 22638,
- 0, 0, 0, 22481, 22466, 22500, 22534, 22536, 22571,
- 0, 0, 0, 22460, 22460, 22547, 22538, 22456, 22572,
- 0, 0, 0, 0, 22504, 22496, 22564, 22563, 22610)
+ ds = gdal.Open("data/rasterio_lanczos_nodata.tif")
+
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=9, buf_ysize=9, resample_alg=gdal.GRIORA_Lanczos
+ )
+ data_ar = struct.unpack("H" * 9 * 9, data)
+ expected_ar = (
+ 0,
+ 0,
+ 0,
+ 22380,
+ 22417,
+ 22509,
+ 22525,
+ 22505,
+ 22518,
+ 0,
+ 0,
+ 0,
+ 22415,
+ 22432,
+ 22433,
+ 22541,
+ 22541,
+ 22568,
+ 0,
+ 0,
+ 0,
+ 22355,
+ 22378,
+ 22429,
+ 22468,
+ 22562,
+ 22591,
+ 0,
+ 0,
+ 0,
+ 22271,
+ 22343,
+ 22384,
+ 22526,
+ 22565,
+ 22699,
+ 0,
+ 0,
+ 0,
+ 22404,
+ 22345,
+ 22537,
+ 22590,
+ 22582,
+ 22645,
+ 0,
+ 0,
+ 0,
+ 22461,
+ 22484,
+ 22464,
+ 22495,
+ 22633,
+ 22638,
+ 0,
+ 0,
+ 0,
+ 22481,
+ 22466,
+ 22500,
+ 22534,
+ 22536,
+ 22571,
+ 0,
+ 0,
+ 0,
+ 22460,
+ 22460,
+ 22547,
+ 22538,
+ 22456,
+ 22572,
+ 0,
+ 0,
+ 0,
+ 0,
+ 22504,
+ 22496,
+ 22564,
+ 22563,
+ 22610,
+ )
assert data_ar == expected_ar
+
###############################################################################
def test_rasterio_resampled_value_is_nodata():
- gdal.FileFromMemBuffer('/vsimem/in.asc',
-"""ncols 4
+ gdal.FileFromMemBuffer(
+ "/vsimem/in.asc",
+ """ncols 4
nrows 4
xllcorner 440720.000000000000
yllcorner 3750120.000000000000
@@ -909,29 +1210,30 @@ def test_rasterio_resampled_value_is_nodata():
-1.1 -1.1 1.1 1.1
-1.1 -1.1 1.1 1.1
-1.1 -1.1 1.1 1.1
- -1.1 -1.1 1.1 1.1""")
+ -1.1 -1.1 1.1 1.1""",
+ )
- ds = gdal.Open('/vsimem/in.asc')
+ ds = gdal.Open("/vsimem/in.asc")
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,
- buf_ysize=1,
- resample_alg=gdal.GRIORA_Lanczos)
- data_ar = struct.unpack('f' * 1, data)
- expected_ar = (1.1754943508222875e-38, )
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Lanczos
+ )
+ data_ar = struct.unpack("f" * 1, data)
+ expected_ar = (1.1754943508222875e-38,)
assert data_ar == expected_ar
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,
- buf_ysize=1,
- resample_alg=gdal.GRIORA_Average)
- data_ar = struct.unpack('f' * 1, data)
- expected_ar = (1.1754943508222875e-38, )
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Average
+ )
+ data_ar = struct.unpack("f" * 1, data)
+ expected_ar = (1.1754943508222875e-38,)
assert data_ar == expected_ar
- gdal.Unlink('/vsimem/in.asc')
-
+ gdal.Unlink("/vsimem/in.asc")
- gdal.FileFromMemBuffer('/vsimem/in.asc',
-"""ncols 4
+ gdal.FileFromMemBuffer(
+ "/vsimem/in.asc",
+ """ncols 4
nrows 4
xllcorner 440720.000000000000
yllcorner 3750120.000000000000
@@ -940,32 +1242,32 @@ def test_rasterio_resampled_value_is_nodata():
-1 -1 1 1
-1 -1 1 1
-1 -1 1 1
- -1 -1 1 1""")
+ -1 -1 1 1""",
+ )
- ds = gdal.Open('/vsimem/in.asc')
+ ds = gdal.Open("/vsimem/in.asc")
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,
- buf_ysize=1,
- resample_alg=gdal.GRIORA_Lanczos)
- data_ar = struct.unpack('I' * 1, data)
- expected_ar = (1, )
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Lanczos
+ )
+ data_ar = struct.unpack("I" * 1, data)
+ expected_ar = (1,)
assert data_ar == expected_ar
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,
- buf_ysize=1,
- resample_alg=gdal.GRIORA_Average)
- data_ar = struct.unpack('I' * 1, data)
- expected_ar = (1, )
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, resample_alg=gdal.GRIORA_Average
+ )
+ data_ar = struct.unpack("I" * 1, data)
+ expected_ar = (1,)
assert data_ar == expected_ar
- gdal.Unlink('/vsimem/in.asc')
-
+ gdal.Unlink("/vsimem/in.asc")
def test_rasterio_dataset_readarray_cint16():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- mem_ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 2, gdal.GDT_CInt16)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 2, gdal.GDT_CInt16)
mem_ds.GetRasterBand(1).WriteArray(numpy.array([[1 + 2j]]))
mem_ds.GetRasterBand(2).WriteArray(numpy.array([[3 + 4j]]))
got = mem_ds.GetRasterBand(1).ReadAsArray()
@@ -977,7 +1279,7 @@ def test_rasterio_dataset_readarray_cint16():
def test_rasterio_rasterband_write_on_readonly():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
band = ds.GetRasterBand(1)
with gdaltest.error_handler():
err = band.WriteRaster(0, 0, 20, 20, band.ReadRaster())
@@ -986,54 +1288,88 @@ def test_rasterio_rasterband_write_on_readonly():
def test_rasterio_dataset_write_on_readonly():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
with gdaltest.error_handler():
err = ds.WriteRaster(0, 0, 20, 20, ds.ReadRaster())
assert err != 0
-@pytest.mark.parametrize('resample_alg', [-1, 8, "foo"])
+@pytest.mark.parametrize("resample_alg", [-1, 8, "foo"])
def test_rasterio_dataset_invalid_resample_alg(resample_alg):
- mem_ds = gdal.GetDriverByName('MEM').Create('', 2, 2)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 2, 2)
with gdaltest.error_handler():
with pytest.raises(Exception):
- assert mem_ds.ReadRaster(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg) is None
+ assert (
+ mem_ds.ReadRaster(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg)
+ is None
+ )
with pytest.raises(Exception):
- assert mem_ds.GetRasterBand(1).ReadRaster(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg) is None
+ assert (
+ mem_ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, resample_alg=resample_alg
+ )
+ is None
+ )
with pytest.raises(Exception):
- assert mem_ds.ReadAsArray(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg) is None
+ assert (
+ mem_ds.ReadAsArray(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg)
+ is None
+ )
with pytest.raises(Exception):
- assert mem_ds.GetRasterBand(1).ReadAsArray(buf_xsize=1, buf_ysize=1, resample_alg=resample_alg) is None
+ assert (
+ mem_ds.GetRasterBand(1).ReadAsArray(
+ buf_xsize=1, buf_ysize=1, resample_alg=resample_alg
+ )
+ is None
+ )
def test_rasterio_floating_point_window_no_resampling():
- """ Test fix for #3101 """
+ """Test fix for #3101"""
- ds = gdal.Translate('/vsimem/test.tif', gdal.Open('data/rgbsmall.tif'), options = '-co INTERLEAVE=PIXEL')
- assert ds.GetMetadataItem('INTERLEAVE', 'IMAGE_STRUCTURE') == 'PIXEL'
+ ds = gdal.Translate(
+ "/vsimem/test.tif",
+ gdal.Open("data/rgbsmall.tif"),
+ options="-co INTERLEAVE=PIXEL",
+ )
+ assert ds.GetMetadataItem("INTERLEAVE", "IMAGE_STRUCTURE") == "PIXEL"
# Check that GDALDataset::IRasterIO() in block-based strategy behaves the
# same as GDALRasterBand::IRasterIO() generic case (ie the one dealing
# with floating-point window coordinates)
- data_per_band = b''.join( ds.GetRasterBand(i+1).ReadRaster(0.1,0.2,10.4,11.4,10,11) for i in range(3) )
- data_per_dataset = ds.ReadRaster(0.1,0.2,10.4,11.4,10,11)
+ data_per_band = b"".join(
+ ds.GetRasterBand(i + 1).ReadRaster(0.1, 0.2, 10.4, 11.4, 10, 11)
+ for i in range(3)
+ )
+ data_per_dataset = ds.ReadRaster(0.1, 0.2, 10.4, 11.4, 10, 11)
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
assert data_per_band == data_per_dataset
def test_rasterio_floating_point_window_no_resampling_numpy():
# Same as above but using ReadAsArray() instead of ReadRaster()
- numpy = pytest.importorskip('numpy')
-
- ds = gdal.Translate('/vsimem/test.tif', gdal.Open('data/rgbsmall.tif'), options = '-co INTERLEAVE=PIXEL')
- assert ds.GetMetadataItem('INTERLEAVE', 'IMAGE_STRUCTURE') == 'PIXEL'
-
- data_per_band = numpy.stack([ds.GetRasterBand(i+1).ReadAsArray(0.1,0.2,10.4,11.4,buf_xsize=10,buf_ysize=11) for i in range(3)])
- data_per_dataset = ds.ReadAsArray(0.1,0.2,10.4,11.4,buf_xsize=10,buf_ysize=11)
+ numpy = pytest.importorskip("numpy")
+
+ ds = gdal.Translate(
+ "/vsimem/test.tif",
+ gdal.Open("data/rgbsmall.tif"),
+ options="-co INTERLEAVE=PIXEL",
+ )
+ assert ds.GetMetadataItem("INTERLEAVE", "IMAGE_STRUCTURE") == "PIXEL"
+
+ data_per_band = numpy.stack(
+ [
+ ds.GetRasterBand(i + 1).ReadAsArray(
+ 0.1, 0.2, 10.4, 11.4, buf_xsize=10, buf_ysize=11
+ )
+ for i in range(3)
+ ]
+ )
+ data_per_dataset = ds.ReadAsArray(0.1, 0.2, 10.4, 11.4, buf_xsize=10, buf_ysize=11)
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
assert numpy.array_equal(data_per_band, data_per_dataset)
@@ -1066,19 +1402,114 @@ def test_rasterio_average_halfsize_downsampling_byte():
v15 = 1
v16 = 1
m4 = (v13 + v14 + v15 + v16 + 2) >> 2
- ds = gdal.GetDriverByName('MEM').Create('', 18, 4, 1, gdal.GDT_Byte)
- ds.WriteRaster(0, 0, 18, 4,
- struct.pack('B' * 18 * 4,
- v1, v2, v5, v6, v9, v10, v13, v14, v5, v6, v9, v10, v13, v14, v1, v2, v5, v6,
- v3, v4, v7, v8, v11, v12, v15, v16, v7, v8, v11, v12, v15, v16, v3, v4, v7, v8,
- v1, v2, v5, v6, v9, v10, v13, v14, v5, v6, v9, v10, v13, v14, v1, v2, v5, v6,
- v3, v4, v7, v8, v11, v12, v15, v16, v7, v8, v11, v12, v15, v16, v3, v4, v7, v8))
+ ds = gdal.GetDriverByName("MEM").Create("", 18, 4, 1, gdal.GDT_Byte)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 18,
+ 4,
+ struct.pack(
+ "B" * 18 * 4,
+ v1,
+ v2,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v1,
+ v2,
+ v5,
+ v6,
+ v3,
+ v4,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v3,
+ v4,
+ v7,
+ v8,
+ v1,
+ v2,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v1,
+ v2,
+ v5,
+ v6,
+ v3,
+ v4,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v3,
+ v4,
+ v7,
+ v8,
+ ),
+ )
# Ask for at least 8 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 18, 4, 9, 2, resample_alg = gdal.GRIORA_Average)
- assert struct.unpack('B' * 9 * 2, data) == (m1, m2, m3, m4, m2, m3, m4, m1, m2,
- m1, m2, m3, m4, m2, m3, m4, m1, m2)
-
- ds.BuildOverviews('AVERAGE', [2])
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 18, 4, 9, 2, resample_alg=gdal.GRIORA_Average
+ )
+ assert struct.unpack("B" * 9 * 2, data) == (
+ m1,
+ m2,
+ m3,
+ m4,
+ m2,
+ m3,
+ m4,
+ m1,
+ m2,
+ m1,
+ m2,
+ m3,
+ m4,
+ m2,
+ m3,
+ m4,
+ m1,
+ m2,
+ )
+
+ ds.BuildOverviews("AVERAGE", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
@@ -1112,148 +1543,976 @@ def test_rasterio_average_halfsize_downsampling_uint16():
v15 = 1
v16 = 1
m4 = (v13 + v14 + v15 + v16 + 2) >> 2
- ds = gdal.GetDriverByName('MEM').Create('', 18, 4, 1, gdal.GDT_UInt16)
- ds.WriteRaster(0, 0, 18, 4,
- struct.pack('H' * 18 * 4,
- v1, v2, v5, v6, v9, v10, v13, v14, v5, v6, v9, v10, v13, v14, v1, v2, v5, v6,
- v3, v4, v7, v8, v11, v12, v15, v16, v7, v8, v11, v12, v15, v16, v3, v4, v7, v8,
- v1, v2, v5, v6, v9, v10, v13, v14, v5, v6, v9, v10, v13, v14, v1, v2, v5, v6,
- v3, v4, v7, v8, v11, v12, v15, v16, v7, v8, v11, v12, v15, v16, v3, v4, v7, v8)) # Ask for at least 8 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 18, 4, 9, 2, resample_alg = gdal.GRIORA_Average)
- assert struct.unpack('H' * 9 * 2, data) == (m1, m2, m3, m4, m2, m3, m4, m1, m2,
- m1, m2, m3, m4, m2, m3, m4, m1, m2)
-
- ds.BuildOverviews('AVERAGE', [2])
+ ds = gdal.GetDriverByName("MEM").Create("", 18, 4, 1, gdal.GDT_UInt16)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 18,
+ 4,
+ struct.pack(
+ "H" * 18 * 4,
+ v1,
+ v2,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v1,
+ v2,
+ v5,
+ v6,
+ v3,
+ v4,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v3,
+ v4,
+ v7,
+ v8,
+ v1,
+ v2,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v5,
+ v6,
+ v9,
+ v10,
+ v13,
+ v14,
+ v1,
+ v2,
+ v5,
+ v6,
+ v3,
+ v4,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v7,
+ v8,
+ v11,
+ v12,
+ v15,
+ v16,
+ v3,
+ v4,
+ v7,
+ v8,
+ ),
+ ) # Ask for at least 8 output pixels in width to trigger SSE2 optim
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 18, 4, 9, 2, resample_alg=gdal.GRIORA_Average
+ )
+ assert struct.unpack("H" * 9 * 2, data) == (
+ m1,
+ m2,
+ m3,
+ m4,
+ m2,
+ m3,
+ m4,
+ m1,
+ m2,
+ m1,
+ m2,
+ m3,
+ m4,
+ m2,
+ m3,
+ m4,
+ m1,
+ m2,
+ )
+
+ ds.BuildOverviews("AVERAGE", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
###############################################################################
# Test average downsampling by a factor of 2 on exact boundaries, with float32 data type
def test_rasterio_average_halfsize_downsampling_float32():
- ds = gdal.GetDriverByName('MEM').Create('', 18, 4, 1, gdal.GDT_Float32)
- ds.WriteRaster(0, 0, 18, 4,
- struct.pack('f' * 18 * 4,
- 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535,
- 2, 65535, 0, 0, 65535, 65535, 2, 65535, 0, 0, 65535, 65535, 2, 65535, 0, 0, 65535, 65535,
- 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0,
- 0, 65535, 0, 0, 0, 0, 0, 65535, 0, 0, 0, 0, 0, 65535, 0, 0, 0, 0))
+ ds = gdal.GetDriverByName("MEM").Create("", 18, 4, 1, gdal.GDT_Float32)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 18,
+ 4,
+ struct.pack(
+ "f" * 18 * 4,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
# Ask for at least 8 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 18, 4, 9, 2, resample_alg = gdal.GRIORA_Average)
- assert struct.unpack('f' * 18, data) == pytest.approx(
- (16384.25, 0.0, 65535.0, 16384.25, 0.0, 65535.0, 16384.25, 0.0, 65535.0,
- 49151.25, 0.0, 0.0, 49151.25, 0.0, 0.0, 49151.25, 0.0, 0.0), rel=1e-10)
-
- ds.BuildOverviews('AVERAGE', [2])
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 18, 4, 9, 2, resample_alg=gdal.GRIORA_Average
+ )
+ assert struct.unpack("f" * 18, data) == pytest.approx(
+ (
+ 16384.25,
+ 0.0,
+ 65535.0,
+ 16384.25,
+ 0.0,
+ 65535.0,
+ 16384.25,
+ 0.0,
+ 65535.0,
+ 49151.25,
+ 0.0,
+ 0.0,
+ 49151.25,
+ 0.0,
+ 0.0,
+ 49151.25,
+ 0.0,
+ 0.0,
+ ),
+ rel=1e-10,
+ )
+
+ ds.BuildOverviews("AVERAGE", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with float data type
def test_rasterio_rms_halfsize_downsampling_float32():
- inf = float('inf')
- nan = float('nan')
-
- ds = gdal.GetDriverByName('MEM').Create('', 18, 4, 1, gdal.GDT_Float32)
- ds.WriteRaster(0, 0, 18, 4,
- struct.pack('f' * 18 * 4,
- 0, 0, nan, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 1e-38, 1e-38, 65535, 65535,
- 2, 65535, 0, 0, 65535, 65535, 2, 65535, 0, 0, 65535, 65535, 2, 65535, 1e-38, 1e-38, 65535, 65535,
- 1e38, -1e38, 0, inf, 1e-20, 1e-20, -65535, -65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 1e38, -1e38,
- 1e38, 1e38, 0, 0, 1e-20, 1e-20, 0, -65535, 0, 0, 0, 0, 0, 65535, 0, 0, 1e38, 1e38))
+ inf = float("inf")
+ nan = float("nan")
+
+ ds = gdal.GetDriverByName("MEM").Create("", 18, 4, 1, gdal.GDT_Float32)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 18,
+ 4,
+ struct.pack(
+ "f" * 18 * 4,
+ 0,
+ 0,
+ nan,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 1e-38,
+ 1e-38,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 1e-38,
+ 1e-38,
+ 65535,
+ 65535,
+ 1e38,
+ -1e38,
+ 0,
+ inf,
+ 1e-20,
+ 1e-20,
+ -65535,
+ -65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 1e38,
+ -1e38,
+ 1e38,
+ 1e38,
+ 0,
+ 0,
+ 1e-20,
+ 1e-20,
+ 0,
+ -65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 1e38,
+ 1e38,
+ ),
+ )
# Ask for at least 8 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 18, 4, 9, 2, resample_alg = gdal.GRIORA_RMS)
- got = struct.unpack('f' * 18, data)
- #print(got)
- expected = (32767.5, nan, 65535, 32767.5, 0, 65535, 32767.5, 1e-38, 65535,
- 1e38, inf, 1e-20, 56754.974837013186, 0, 0, 56754.974837013186, 0, 1e38)
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 18, 4, 9, 2, resample_alg=gdal.GRIORA_RMS
+ )
+ got = struct.unpack("f" * 18, data)
+ # print(got)
+ expected = (
+ 32767.5,
+ nan,
+ 65535,
+ 32767.5,
+ 0,
+ 65535,
+ 32767.5,
+ 1e-38,
+ 65535,
+ 1e38,
+ inf,
+ 1e-20,
+ 56754.974837013186,
+ 0,
+ 0,
+ 56754.974837013186,
+ 0,
+ 1e38,
+ )
for i in range(len(got)):
if math.isnan(expected[i]):
assert math.isnan(got[i])
else:
assert got[i] == pytest.approx(expected[i], rel=1e-7), i
- ds.BuildOverviews('RMS', [2])
+ ds.BuildOverviews("RMS", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with byte data type
+
def internal_test_rasterio_rms_halfsize_downsampling_byte_content(gdal_dt, struct_type):
- ds = gdal.GetDriverByName('MEM').Create('', 38, 6, 1, gdal_dt)
- ds.WriteRaster(0, 0, 38, 6,
- struct.pack(struct_type * 38 * 6,
- 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 2, 100,
- 100, 100, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 100, 100, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 100, 100,
- 0, 100, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 100, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 100,
- 188, 229, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 188, 229,
- 233, 233, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 233, 233 ))
+ ds = gdal.GetDriverByName("MEM").Create("", 38, 6, 1, gdal_dt)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 38,
+ 6,
+ struct.pack(
+ struct_type * 38 * 6,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 2,
+ 100,
+ 100,
+ 100,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 100,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 100,
+ 0,
+ 100,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 188,
+ 229,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 188,
+ 229,
+ 233,
+ 233,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 233,
+ 233,
+ ),
+ )
# Make sure to request at least 16 pixels in width to test the SSE2 implementation
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 38, 6, 19, 3, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack(struct_type * 19 * 3, data) == \
- (50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50,
- 87, 1, 1, 0, 0, 1, 1, 0, 0, 87, 1, 1, 0, 0, 1, 1, 0, 0, 87,
- 222,0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 222)
-
- ds.BuildOverviews('RMS', [2])
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 38, 6, 19, 3, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack(struct_type * 19 * 3, data) == (
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 50,
+ 87,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 87,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 87,
+ 222,
+ 0,
+ 255,
+ 0,
+ 0,
+ 0,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 0,
+ 0,
+ 0,
+ 255,
+ 0,
+ 0,
+ 222,
+ )
+
+ ds.BuildOverviews("RMS", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
def test_rasterio_rms_halfsize_downsampling_byte():
- internal_test_rasterio_rms_halfsize_downsampling_byte_content(gdal.GDT_Byte, 'B')
+ internal_test_rasterio_rms_halfsize_downsampling_byte_content(gdal.GDT_Byte, "B")
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with byte data type
# and nodata never hit
+
def test_rasterio_rms_halfsize_downsampling_byte_nodata_not_hit():
- ds = gdal.GetDriverByName('MEM').Create('', 20, 6, 1, gdal.GDT_Byte)
+ ds = gdal.GetDriverByName("MEM").Create("", 20, 6, 1, gdal.GDT_Byte)
ds.GetRasterBand(1).SetNoDataValue(180)
- ds.WriteRaster(0, 0, 20, 6,
- struct.pack('B' * 20 * 6,
- 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 0, 0, 0, 0, 2, 100, 2, 100, 2, 100,
- 100, 100, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 100, 100,
- 0, 100, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 100,
- 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0))
+ ds.WriteRaster(
+ 0,
+ 0,
+ 20,
+ 6,
+ struct.pack(
+ "B" * 20 * 6,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 2,
+ 100,
+ 2,
+ 100,
+ 100,
+ 100,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 100,
+ 0,
+ 100,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
# Make sure to request at least 8 pixels in width to test the SSE2 implementation
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 6, 10, 3, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('B' * 30, data) == (50, 0, 0, 50, 50, 0, 0, 50, 50, 50,
- 87, 1, 1, 0, 0, 1, 1, 0, 0, 87,
- 0, 0, 255, 0, 0, 0, 255, 0, 0, 0)
-
- ds.BuildOverviews('RMS', [2])
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 20, 6, 10, 3, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("B" * 30, data) == (
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 0,
+ 0,
+ 50,
+ 50,
+ 50,
+ 87,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 87,
+ 0,
+ 0,
+ 255,
+ 0,
+ 0,
+ 0,
+ 255,
+ 0,
+ 0,
+ 0,
+ )
+
+ ds.BuildOverviews("RMS", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with uint16 data type
def test_rasterio_rms_halfsize_downsampling_uint16():
- ds = gdal.GetDriverByName('MEM').Create('', 18, 4, 1, gdal.GDT_UInt16)
- ds.WriteRaster(0, 0, 18, 4,
- struct.pack('H' * 18 * 4,
- 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535,
- 2, 65535, 0, 0, 65535, 65535, 2, 65535, 0, 0, 65535, 65535, 2, 65535, 0, 0, 65535, 65535,
- 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0,
- 0, 65535, 0, 0, 0, 0, 0, 65535, 0, 0, 0, 0, 0, 65535, 0, 0, 0, 0))
+ ds = gdal.GetDriverByName("MEM").Create("", 18, 4, 1, gdal.GDT_UInt16)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 18,
+ 4,
+ struct.pack(
+ "H" * 18 * 4,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 2,
+ 65535,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 65535,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
# Ask for at least 4 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 18, 4, 9, 2, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('H' * 18, data) == (32768, 0, 65535, 32768, 0, 65535, 32768, 0, 65535,
- 56755, 0, 0, 56755, 0, 0, 56755, 0, 0)
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 18, 4, 9, 2, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("H" * 18, data) == (
+ 32768,
+ 0,
+ 65535,
+ 32768,
+ 0,
+ 65535,
+ 32768,
+ 0,
+ 65535,
+ 56755,
+ 0,
+ 0,
+ 56755,
+ 0,
+ 0,
+ 56755,
+ 0,
+ 0,
+ )
###############################################################################
@@ -1263,26 +2522,64 @@ def test_rasterio_rms_halfsize_downsampling_uint16():
def test_rasterio_rms_halfsize_downsampling_uint16_fits_in_14bits():
- ds = gdal.GetDriverByName('MEM').Create('', 8, 4, 1, gdal.GDT_UInt16)
- ds.WriteRaster(0, 0, 8, 4,
- struct.pack('H' * 8 * 4,
- 10, 9, 16383, 16383, 1, 0, 16380, 16380,
- 10, 10, 16383, 16383, 1, 1, 16378, 16380,
- 10, 9, 16383, 16383, 1, 0, 16380, 16380,
- 10, 10, 16383, 16383, 1, 1, 16378, 16380))
+ ds = gdal.GetDriverByName("MEM").Create("", 8, 4, 1, gdal.GDT_UInt16)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 8,
+ 4,
+ struct.pack(
+ "H" * 8 * 4,
+ 10,
+ 9,
+ 16383,
+ 16383,
+ 1,
+ 0,
+ 16380,
+ 16380,
+ 10,
+ 10,
+ 16383,
+ 16383,
+ 1,
+ 1,
+ 16378,
+ 16380,
+ 10,
+ 9,
+ 16383,
+ 16383,
+ 1,
+ 0,
+ 16380,
+ 16380,
+ 10,
+ 10,
+ 16383,
+ 16383,
+ 1,
+ 1,
+ 16378,
+ 16380,
+ ),
+ )
# Ask for at least 4 output pixels in width to trigger SSE2 optim
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 8, 4, 4, 2, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('H' * 8, data) == (10, 16383, 1, 16380,
- 10, 16383, 1, 16380)
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 8, 4, 4, 2, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("H" * 8, data) == (10, 16383, 1, 16380, 10, 16383, 1, 16380)
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with uint16 data type
# but with content as in test_rasterio_rms_halfsize_downsampling_byte to
# check UInt16 resampling is consistent with Byte one
+
def test_rasterio_rms_halfsize_downsampling_uint16_with_byte_content():
- internal_test_rasterio_rms_halfsize_downsampling_byte_content(gdal.GDT_UInt16, 'H')
+ internal_test_rasterio_rms_halfsize_downsampling_byte_content(gdal.GDT_UInt16, "H")
###############################################################################
@@ -1291,21 +2588,77 @@ def test_rasterio_rms_halfsize_downsampling_uint16_with_byte_content():
def test_rasterio_rms_two_third_downsampling_float32():
- ds = gdal.GetDriverByName('MEM').Create('', 6, 6, 1, gdal.GDT_Float32)
- ds.WriteRaster(0, 0, 6, 6,
- struct.pack('f' * 6 * 6,
- 0, 0, 0, 0, 0, 0,
- 2, 100, 0, 0, 0, 0,
- 100, 100, 0, 0, 0, 0,
- 0, 100, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0))
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 6, 6, 4, 4, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('f' * 16, data) == pytest.approx(
- (33.34666442871094, 33.33333206176758, 0.0, 0.0,
- 88.19674682617188, 57.73502731323242, 0.0, 0.0,
- 47.14045333862305, 47.14045333862305, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0), rel=1e-10)
+ ds = gdal.GetDriverByName("MEM").Create("", 6, 6, 1, gdal.GDT_Float32)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 6,
+ 6,
+ struct.pack(
+ "f" * 6 * 6,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 6, 6, 4, 4, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("f" * 16, data) == pytest.approx(
+ (
+ 33.34666442871094,
+ 33.33333206176758,
+ 0.0,
+ 0.0,
+ 88.19674682617188,
+ 57.73502731323242,
+ 0.0,
+ 0.0,
+ 47.14045333862305,
+ 47.14045333862305,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ ),
+ rel=1e-10,
+ )
+
###############################################################################
# Test rms downsampling by a factor of 2 on exact boundaries, with CFloat32
@@ -1314,107 +2667,237 @@ def test_rasterio_rms_two_third_downsampling_float32():
def test_rasterio_rms_halfsize_downsampling_cfloat32():
# Test real part
- ds = gdal.GetDriverByName('MEM').Create('', 4, 6, 1, gdal.GDT_CFloat32)
- ds.WriteRaster(0, 0, 4, 6,
- struct.pack('f' * 2 * 4 * 6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 100, 0, 0, 0, 0, 0,
- 100, 0, 100, 0, 0, 0, 0, 0,
- 0, 0, 100, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0))
+ ds = gdal.GetDriverByName("MEM").Create("", 4, 6, 1, gdal.GDT_CFloat32)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 4,
+ 6,
+ struct.pack(
+ "f" * 2 * 4 * 6,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
# This will go through the warping code internally
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 4, 6, 2, 3, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('f' * 2 * 2 * 3, data) == pytest.approx(
- (50.0099983215332, 0., 0., 0.,
- 86.6025390625, 0., 0., 0.,
- 0., 0., 0., 0.), rel = 1e-10)
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 4, 6, 2, 3, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("f" * 2 * 2 * 3, data) == pytest.approx(
+ (
+ 50.0099983215332,
+ 0.0,
+ 0.0,
+ 0.0,
+ 86.6025390625,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ ),
+ rel=1e-10,
+ )
# This will use the overview code
- ds.BuildOverviews('RMS', [2])
+ ds.BuildOverviews("RMS", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
-
# Test imaginary part
- ds = gdal.GetDriverByName('MEM').Create('', 4, 6, 1, gdal.GDT_CFloat32)
- ds.WriteRaster(0, 0, 4, 6,
- struct.pack('f' * 2 * 4 * 6,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 100, 0, 0, 0, 0,
- 0, 100, 0, 100, 0, 0, 0, 0,
- 0, 0, 0, 100, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0))
+ ds = gdal.GetDriverByName("MEM").Create("", 4, 6, 1, gdal.GDT_CFloat32)
+ ds.WriteRaster(
+ 0,
+ 0,
+ 4,
+ 6,
+ struct.pack(
+ "f" * 2 * 4 * 6,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
# This will go through the warping code internally
- data = ds.GetRasterBand(1).ReadRaster(0, 0, 4, 6, 2, 3, resample_alg = gdal.GRIORA_RMS)
- assert struct.unpack('f' * 2 * 2 * 3, data) == pytest.approx(
- (0.0, 50.0099983215332, 0., 0.,
- 0.0, 86.6025390625, 0., 0.,
- 0.0, 0., 0., 0.), rel = 1e-10)
+ data = ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 4, 6, 2, 3, resample_alg=gdal.GRIORA_RMS
+ )
+ assert struct.unpack("f" * 2 * 2 * 3, data) == pytest.approx(
+ (
+ 0.0,
+ 50.0099983215332,
+ 0.0,
+ 0.0,
+ 0.0,
+ 86.6025390625,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ ),
+ rel=1e-10,
+ )
# This will use the overview code
- ds.BuildOverviews('RMS', [2])
+ ds.BuildOverviews("RMS", [2])
ovr_data = ds.GetRasterBand(1).GetOverview(0).ReadRaster()
assert ovr_data == data
+
###############################################################################
# Test WriteRaster() on a bytearray
def test_rasterio_writeraster_from_bytearray():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 2)
ar = bytearray([1, 2])
ds.WriteRaster(0, 0, 1, 2, ar)
assert ds.ReadRaster() == ar
+
###############################################################################
# Test WriteRaster() on a memoryview
def test_rasterio_writeraster_from_memoryview():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 2)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 2)
ar = memoryview(bytearray([1, 2, 3]))[1:]
ds.WriteRaster(0, 0, 1, 2, ar)
assert ds.ReadRaster() == ar
+
###############################################################################
# Test ReadRaster() in an existing buffer
def test_rasterio_readraster_in_existing_buffer():
- ds = gdal.GetDriverByName('MEM').Create('', 2, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 2, 1)
ar = bytearray([1, 2])
ds.WriteRaster(0, 0, 2, 1, ar)
band = ds.GetRasterBand(1)
# buf_obj is of expected size
- assert ds.ReadRaster(buf_obj = bytearray([0, 0])) == ar
+ assert ds.ReadRaster(buf_obj=bytearray([0, 0])) == ar
# buf_obj is larger than expected
- assert ds.ReadRaster(buf_obj = bytearray([0, 0, 10])) == bytearray([1, 2, 10])
+ assert ds.ReadRaster(buf_obj=bytearray([0, 0, 10])) == bytearray([1, 2, 10])
with gdaltest.error_handler():
- # buf_obj is a wrong object type
- assert ds.ReadRaster(buf_obj = 123) is None
- # buf_obj is not large enough
- assert ds.ReadRaster(buf_obj = bytearray([0])) is None
- # buf_obj is read-only
- assert ds.ReadRaster(buf_obj = bytes(bytearray([0, 0]))) is None
-
+ # buf_obj is a wrong object type
+ assert ds.ReadRaster(buf_obj=123) is None
+ # buf_obj is not large enough
+ assert ds.ReadRaster(buf_obj=bytearray([0])) is None
+ # buf_obj is read-only
+ assert ds.ReadRaster(buf_obj=bytes(bytearray([0, 0]))) is None
# buf_obj is of expected size
- assert band.ReadRaster(buf_obj = bytearray([0, 0])) == ar
+ assert band.ReadRaster(buf_obj=bytearray([0, 0])) == ar
# buf_obj is larger than expected
- assert band.ReadRaster(buf_obj = bytearray([0, 0, 10])) == bytearray([1, 2, 10])
+ assert band.ReadRaster(buf_obj=bytearray([0, 0, 10])) == bytearray([1, 2, 10])
with gdaltest.error_handler():
- # buf_obj is a wrong object type
- assert band.ReadRaster(buf_obj = 123) is None
- # buf_obj is not large enough
- assert band.ReadRaster(buf_obj = bytearray([0])) is None
- # buf_obj is read-only
- assert band.ReadRaster(buf_obj = bytes(bytearray([0, 0]))) is None
+ # buf_obj is a wrong object type
+ assert band.ReadRaster(buf_obj=123) is None
+ # buf_obj is not large enough
+ assert band.ReadRaster(buf_obj=bytearray([0])) is None
+ # buf_obj is read-only
+ assert band.ReadRaster(buf_obj=bytes(bytearray([0, 0]))) is None
+
###############################################################################
# Test ReadBlock() in an existing buffer
@@ -1422,7 +2905,7 @@ def test_rasterio_readraster_in_existing_buffer():
def test_rasterio_readblock_in_existing_buffer():
- ds = gdal.GetDriverByName('MEM').Create('', 2, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 2, 1)
ar = bytearray([1, 2])
ds.WriteRaster(0, 0, 2, 1, ar)
band = ds.GetRasterBand(1)
@@ -1430,57 +2913,72 @@ def test_rasterio_readblock_in_existing_buffer():
assert band.ReadBlock(0, 0) == ar
# buf_obj is of expected size
- assert band.ReadBlock(0, 0, buf_obj = bytearray([0, 0])) == ar
+ assert band.ReadBlock(0, 0, buf_obj=bytearray([0, 0])) == ar
# buf_obj is larger than expected
- assert band.ReadBlock(0, 0, buf_obj = bytearray([0, 0, 10])) == bytearray([1, 2, 10])
+ assert band.ReadBlock(0, 0, buf_obj=bytearray([0, 0, 10])) == bytearray([1, 2, 10])
with gdaltest.error_handler():
- # buf_obj is a wrong object type
- assert band.ReadBlock(0, 0, buf_obj = 123) is None
- # buf_obj is not large enough
- assert band.ReadBlock(0, 0, buf_obj = bytearray([0])) is None
- # buf_obj is read-only
- assert band.ReadBlock(0, 0, buf_obj = bytes(bytearray([0, 0]))) is None
+ # buf_obj is a wrong object type
+ assert band.ReadBlock(0, 0, buf_obj=123) is None
+ # buf_obj is not large enough
+ assert band.ReadBlock(0, 0, buf_obj=bytearray([0])) is None
+ # buf_obj is read-only
+ assert band.ReadBlock(0, 0, buf_obj=bytes(bytearray([0, 0]))) is None
+
###############################################################################
# Test ReadRaster() in an existing buffer and alignment issues
-@pytest.mark.parametrize('datatype', [gdal.GDT_Int16,
- gdal.GDT_UInt16,
- gdal.GDT_Int32,
- gdal.GDT_UInt32,
- gdal.GDT_Float32,
- gdal.GDT_Float64,
- gdal.GDT_CInt16,
- gdal.GDT_CInt32,
- gdal.GDT_CFloat32,
- gdal.GDT_CFloat64],
- ids=gdal.GetDataTypeName)
+@pytest.mark.parametrize(
+ "datatype",
+ [
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CInt16,
+ gdal.GDT_CInt32,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ],
+ ids=gdal.GetDataTypeName,
+)
def test_rasterio_readraster_in_existing_buffer_alignment_issues(datatype):
- ds = gdal.GetDriverByName('MEM').Create('', 2, 1, 1, datatype)
+ ds = gdal.GetDriverByName("MEM").Create("", 2, 1, 1, datatype)
band = ds.GetRasterBand(1)
band.Fill(1)
ar = band.ReadRaster()
buffer_size = 2 * 1 * (gdal.GetDataTypeSize(datatype) // 8)
# buf_obj has appropriate alignment
- assert ds.ReadRaster(buf_obj = bytearray([0] * buffer_size)) == ar
+ assert ds.ReadRaster(buf_obj=bytearray([0] * buffer_size)) == ar
with gdaltest.error_handler():
# buf_obj has not appropriate alignment
- assert ds.ReadRaster(buf_obj = memoryview(bytearray([0] * (buffer_size + 1)))[1:]) is None
+ assert (
+ ds.ReadRaster(buf_obj=memoryview(bytearray([0] * (buffer_size + 1)))[1:])
+ is None
+ )
# buf_obj has appropriate alignment
- assert band.ReadRaster(buf_obj = bytearray([0] * buffer_size)) == ar
+ assert band.ReadRaster(buf_obj=bytearray([0] * buffer_size)) == ar
with gdaltest.error_handler():
# buf_obj has not appropriate alignment
- assert band.ReadRaster(buf_obj = memoryview(bytearray([0] * (buffer_size + 1)))[1:]) is None
+ assert (
+ band.ReadRaster(buf_obj=memoryview(bytearray([0] * (buffer_size + 1)))[1:])
+ is None
+ )
# buf_obj has appropriate alignment
- assert band.ReadBlock(0, 0, buf_obj = bytearray([0] * buffer_size)) == ar
+ assert band.ReadBlock(0, 0, buf_obj=bytearray([0] * buffer_size)) == ar
with gdaltest.error_handler():
# buf_obj has not appropriate alignment
- assert band.ReadBlock(0, 0, buf_obj = memoryview(bytearray([0] * (2 * 8 + 1)))[1:]) is None
+ assert (
+ band.ReadBlock(0, 0, buf_obj=memoryview(bytearray([0] * (2 * 8 + 1)))[1:])
+ is None
+ )
diff --git a/autotest/gcore/rat.py b/autotest/gcore/rat.py
index d5b9f6d451aa..adaa228ea0f3 100755
--- a/autotest/gcore/rat.py
+++ b/autotest/gcore/rat.py
@@ -32,9 +32,10 @@
import gdaltest
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
###############################################################################
# Create a raster attribute table.
@@ -48,8 +49,8 @@ def test_rat_1():
except:
pytest.skip()
- rat.CreateColumn('Value', gdal.GFT_Integer, gdal.GFU_MinMax)
- rat.CreateColumn('Count', gdal.GFT_Integer, gdal.GFU_PixelCount)
+ rat.CreateColumn("Value", gdal.GFT_Integer, gdal.GFU_MinMax)
+ rat.CreateColumn("Count", gdal.GFT_Integer, gdal.GFU_PixelCount)
rat.SetRowCount(3)
rat.SetValueAsInt(0, 0, 10)
@@ -61,22 +62,23 @@ def test_rat_1():
rat2 = rat.Clone()
- assert rat2.GetColumnCount() == 2, 'wrong column count'
+ assert rat2.GetColumnCount() == 2, "wrong column count"
- assert rat2.GetRowCount() == 3, 'wrong row count'
+ assert rat2.GetRowCount() == 3, "wrong row count"
- assert rat2.GetNameOfCol(1) == 'Count', 'wrong column name'
+ assert rat2.GetNameOfCol(1) == "Count", "wrong column name"
- assert rat2.GetUsageOfCol(1) == gdal.GFU_PixelCount, 'wrong column usage'
+ assert rat2.GetUsageOfCol(1) == gdal.GFU_PixelCount, "wrong column usage"
- assert rat2.GetTypeOfCol(1) == gdal.GFT_Integer, 'wrong column type'
+ assert rat2.GetTypeOfCol(1) == gdal.GFT_Integer, "wrong column type"
- assert rat2.GetRowOfValue(11.0) == 1, 'wrong row for value'
+ assert rat2.GetRowOfValue(11.0) == 1, "wrong row for value"
- assert rat2.GetValueAsInt(1, 1) == 200, 'wrong field value.'
+ assert rat2.GetValueAsInt(1, 1) == 200, "wrong field value."
gdaltest.saved_rat = rat
+
###############################################################################
# Save a RAT in a file, written to .aux.xml, read it back and check it.
@@ -86,54 +88,55 @@ def test_rat_2():
if gdaltest.saved_rat is None:
pytest.skip()
- ds = gdal.GetDriverByName('PNM').Create('tmp/rat_2.pnm', 100, 90, 1,
- gdal.GDT_Byte)
+ ds = gdal.GetDriverByName("PNM").Create("tmp/rat_2.pnm", 100, 90, 1, gdal.GDT_Byte)
ds.GetRasterBand(1).SetDefaultRAT(gdaltest.saved_rat)
ds = None
- ds = gdal.Open('tmp/rat_2.pnm', gdal.GA_Update)
+ ds = gdal.Open("tmp/rat_2.pnm", gdal.GA_Update)
rat2 = ds.GetRasterBand(1).GetDefaultRAT()
- assert rat2.GetColumnCount() == 2, 'wrong column count'
+ assert rat2.GetColumnCount() == 2, "wrong column count"
- assert rat2.GetRowCount() == 3, 'wrong row count'
+ assert rat2.GetRowCount() == 3, "wrong row count"
- assert rat2.GetNameOfCol(1) == 'Count', 'wrong column name'
+ assert rat2.GetNameOfCol(1) == "Count", "wrong column name"
- assert rat2.GetUsageOfCol(1) == gdal.GFU_PixelCount, 'wrong column usage'
+ assert rat2.GetUsageOfCol(1) == gdal.GFU_PixelCount, "wrong column usage"
- assert rat2.GetTypeOfCol(1) == gdal.GFT_Integer, 'wrong column type'
+ assert rat2.GetTypeOfCol(1) == gdal.GFT_Integer, "wrong column type"
- assert rat2.GetRowOfValue(11.0) == 1, 'wrong row for value'
+ assert rat2.GetRowOfValue(11.0) == 1, "wrong row for value"
- assert rat2.GetValueAsInt(1, 1) == 200, 'wrong field value.'
+ assert rat2.GetValueAsInt(1, 1) == 200, "wrong field value."
# unset the RAT
ds.GetRasterBand(1).SetDefaultRAT(None)
ds = None
- ds = gdal.Open('tmp/rat_2.pnm')
+ ds = gdal.Open("tmp/rat_2.pnm")
rat = ds.GetRasterBand(1).GetDefaultRAT()
ds = None
- assert rat is None, 'expected a NULL RAT.'
+ assert rat is None, "expected a NULL RAT."
- gdal.GetDriverByName('PNM').Delete('tmp/rat_2.pnm')
+ gdal.GetDriverByName("PNM").Delete("tmp/rat_2.pnm")
gdaltest.saved_rat = None
+
###############################################################################
# Save an empty RAT (#5451)
def test_rat_3():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/rat_3.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/rat_3.tif", 1, 1)
ds.GetRasterBand(1).SetDefaultRAT(gdal.RasterAttributeTable())
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/rat_3.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/rat_3.tif")
+
###############################################################################
# Edit an existing RAT (#3783)
@@ -142,17 +145,17 @@ def test_rat_3():
def test_rat_4():
# Create test RAT
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/rat_4.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/rat_4.tif", 1, 1)
rat = gdal.RasterAttributeTable()
- rat.CreateColumn('VALUE', gdal.GFT_Integer, gdal.GFU_MinMax)
- rat.CreateColumn('CLASS', gdal.GFT_String, gdal.GFU_Name)
+ rat.CreateColumn("VALUE", gdal.GFT_Integer, gdal.GFU_MinMax)
+ rat.CreateColumn("CLASS", gdal.GFT_String, gdal.GFU_Name)
rat.SetValueAsInt(0, 0, 111)
- rat.SetValueAsString(0, 1, 'Class1')
+ rat.SetValueAsString(0, 1, "Class1")
ds.GetRasterBand(1).SetDefaultRAT(rat)
ds = None
# Verify
- ds = gdal.OpenEx('/vsimem/rat_4.tif')
+ ds = gdal.OpenEx("/vsimem/rat_4.tif")
gdal_band = ds.GetRasterBand(1)
rat = gdal_band.GetDefaultRAT()
assert rat.GetValueAsInt(0, 0) == 111
@@ -160,23 +163,24 @@ def test_rat_4():
# Replace existing RAT
rat = gdal.RasterAttributeTable()
- rat.CreateColumn('VALUE', gdal.GFT_Integer, gdal.GFU_MinMax)
- rat.CreateColumn('CLASS', gdal.GFT_String, gdal.GFU_Name)
+ rat.CreateColumn("VALUE", gdal.GFT_Integer, gdal.GFU_MinMax)
+ rat.CreateColumn("CLASS", gdal.GFT_String, gdal.GFU_Name)
rat.SetValueAsInt(0, 0, 222)
- rat.SetValueAsString(0, 1, 'Class1')
- ds = gdal.OpenEx('/vsimem/rat_4.tif', gdal.OF_RASTER | gdal.OF_UPDATE)
+ rat.SetValueAsString(0, 1, "Class1")
+ ds = gdal.OpenEx("/vsimem/rat_4.tif", gdal.OF_RASTER | gdal.OF_UPDATE)
gdal_band = ds.GetRasterBand(1)
gdal_band.SetDefaultRAT(rat)
ds = None
# Verify
- ds = gdal.OpenEx('/vsimem/rat_4.tif')
+ ds = gdal.OpenEx("/vsimem/rat_4.tif")
gdal_band = ds.GetRasterBand(1)
rat = gdal_band.GetDefaultRAT()
assert rat is not None
assert rat.GetValueAsInt(0, 0) == 222
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/rat_4.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/rat_4.tif")
+
##############################################################################
diff --git a/autotest/gcore/relationship.py b/autotest/gcore/relationship.py
index 571ca9931b2e..60d32f24085e 100755
--- a/autotest/gcore/relationship.py
+++ b/autotest/gcore/relationship.py
@@ -28,57 +28,61 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-from osgeo import gdal
-
import pytest
+from osgeo import gdal
+
def test_gdal_relationship():
with pytest.raises(ValueError):
gdal.Relationship(None, None, None, gdal.GRC_ONE_TO_ONE)
- relationship = gdal.Relationship('name', 'left_table', 'right_table', gdal.GRC_MANY_TO_ONE)
- assert relationship.GetName() == 'name'
+ relationship = gdal.Relationship(
+ "name", "left_table", "right_table", gdal.GRC_MANY_TO_ONE
+ )
+ assert relationship.GetName() == "name"
assert relationship.GetCardinality() == gdal.GRC_MANY_TO_ONE
- assert relationship.GetLeftTableName() == 'left_table'
- assert relationship.GetRightTableName() == 'right_table'
+ assert relationship.GetLeftTableName() == "left_table"
+ assert relationship.GetRightTableName() == "right_table"
- relationship = gdal.Relationship('name', 'left_table', 'right_table', gdal.GRC_ONE_TO_ONE)
+ relationship = gdal.Relationship(
+ "name", "left_table", "right_table", gdal.GRC_ONE_TO_ONE
+ )
assert relationship.GetCardinality() == gdal.GRC_ONE_TO_ONE
- assert relationship.GetMappingTableName() == ''
- relationship.SetMappingTableName('mapping_table')
- assert relationship.GetMappingTableName() == 'mapping_table'
+ assert relationship.GetMappingTableName() == ""
+ relationship.SetMappingTableName("mapping_table")
+ assert relationship.GetMappingTableName() == "mapping_table"
assert relationship.GetLeftTableFields() is None
- relationship.SetLeftTableFields(['a_field'])
- assert relationship.GetLeftTableFields() == ['a_field']
+ relationship.SetLeftTableFields(["a_field"])
+ assert relationship.GetLeftTableFields() == ["a_field"]
assert relationship.GetRightTableFields() is None
- relationship.SetRightTableFields(['b_field', 'c_field'])
- assert relationship.GetRightTableFields() == ['b_field', 'c_field']
+ relationship.SetRightTableFields(["b_field", "c_field"])
+ assert relationship.GetRightTableFields() == ["b_field", "c_field"]
assert relationship.GetLeftMappingTableFields() is None
- relationship.SetLeftMappingTableFields(['a_field2'])
- assert relationship.GetLeftMappingTableFields() == ['a_field2']
+ relationship.SetLeftMappingTableFields(["a_field2"])
+ assert relationship.GetLeftMappingTableFields() == ["a_field2"]
assert relationship.GetRightMappingTableFields() is None
- relationship.SetRightMappingTableFields(['b_field2', 'c_field2'])
- assert relationship.GetRightMappingTableFields() == ['b_field2', 'c_field2']
+ relationship.SetRightMappingTableFields(["b_field2", "c_field2"])
+ assert relationship.GetRightMappingTableFields() == ["b_field2", "c_field2"]
assert relationship.GetType() == gdal.GRT_ASSOCIATION
relationship.SetType(gdal.GRT_AGGREGATION)
assert relationship.GetType() == gdal.GRT_AGGREGATION
- assert relationship.GetForwardPathLabel() == ''
- relationship.SetForwardPathLabel('forward path')
- assert relationship.GetForwardPathLabel() == 'forward path'
+ assert relationship.GetForwardPathLabel() == ""
+ relationship.SetForwardPathLabel("forward path")
+ assert relationship.GetForwardPathLabel() == "forward path"
- assert relationship.GetBackwardPathLabel() == ''
- relationship.SetBackwardPathLabel('backward path')
- assert relationship.GetBackwardPathLabel() == 'backward path'
+ assert relationship.GetBackwardPathLabel() == ""
+ relationship.SetBackwardPathLabel("backward path")
+ assert relationship.GetBackwardPathLabel() == "backward path"
- assert relationship.GetRelatedTableType() == ''
- relationship.SetRelatedTableType('media')
- assert relationship.GetRelatedTableType() == 'media'
+ assert relationship.GetRelatedTableType() == ""
+ relationship.SetRelatedTableType("media")
+ assert relationship.GetRelatedTableType() == "media"
diff --git a/autotest/gcore/rfc30.py b/autotest/gcore/rfc30.py
index 23b771bf0b6a..0a8f469edd17 100755
--- a/autotest/gcore/rfc30.py
+++ b/autotest/gcore/rfc30.py
@@ -31,36 +31,39 @@
import urllib.parse
-from osgeo import gdal
-
import gdaltest
import pytest
+from osgeo import gdal
+
###############################################################################
# Try opening a file with a Chinese name using the Python UTF-8 string.
def test_rfc30_1():
- filename = 'xx\u4E2D\u6587.\u4E2D\u6587'
+ filename = "xx\u4E2D\u6587.\u4E2D\u6587"
filename_escaped = urllib.parse.quote(filename)
- if not gdaltest.download_file('http://download.osgeo.org/gdal/data/gtiff/' + filename_escaped, filename):
+ if not gdaltest.download_file(
+ "http://download.osgeo.org/gdal/data/gtiff/" + filename_escaped, filename
+ ):
pytest.skip()
- filename = 'tmp/cache/' + filename
+ filename = "tmp/cache/" + filename
ds = gdal.Open(filename)
file_list = ds.GetFileList()
- assert ds is not None, 'failed to open utf filename.'
+ assert ds is not None, "failed to open utf filename."
ds = None
ds = gdal.Open(file_list[0])
- assert ds is not None, 'failed to open utf filename (2).'
+ assert ds is not None, "failed to open utf filename (2)."
+
###############################################################################
# Try creating, then renaming a utf-8 named file.
@@ -68,29 +71,29 @@ def test_rfc30_1():
def test_rfc30_2():
- filename = 'tmp/yy\u4E2D\u6587.\u4E2D\u6587'
- fd = gdal.VSIFOpenL(filename, 'w')
- assert fd is not None, 'failed to create utf-8 named file.'
+ filename = "tmp/yy\u4E2D\u6587.\u4E2D\u6587"
+ fd = gdal.VSIFOpenL(filename, "w")
+ assert fd is not None, "failed to create utf-8 named file."
- gdal.VSIFWriteL('abc', 3, 1, fd)
+ gdal.VSIFWriteL("abc", 3, 1, fd)
gdal.VSIFCloseL(fd)
# rename
- new_filename = 'tmp/yy\u4E2D\u6587.\u4E2D\u6587'
+ new_filename = "tmp/yy\u4E2D\u6587.\u4E2D\u6587"
filename_for_rename = filename
- assert gdal.Rename(filename_for_rename, new_filename) == 0, 'utf-8 rename failed.'
+ assert gdal.Rename(filename_for_rename, new_filename) == 0, "utf-8 rename failed."
- fd = gdal.VSIFOpenL(new_filename, 'r')
- assert fd is not None, 'reopen failed with utf8'
+ fd = gdal.VSIFOpenL(new_filename, "r")
+ assert fd is not None, "reopen failed with utf8"
data = gdal.VSIFReadL(3, 1, fd)
gdal.VSIFCloseL(fd)
- assert data == b'abc'
+ assert data == b"abc"
gdal.Unlink(new_filename)
- fd = gdal.VSIFOpenL(new_filename, 'r')
- assert fd is None, 'did unlink fail on utf8 filename?'
+ fd = gdal.VSIFOpenL(new_filename, "r")
+ assert fd is None, "did unlink fail on utf8 filename?"
diff --git a/autotest/gcore/test_driver_metadata.py b/autotest/gcore/test_driver_metadata.py
index f152dcc6dbed..bab8c1cc0538 100644
--- a/autotest/gcore/test_driver_metadata.py
+++ b/autotest/gcore/test_driver_metadata.py
@@ -30,18 +30,32 @@
import pytest
-from osgeo import gdal
from lxml import etree
-all_driver_names = [gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())]
-ogr_driver_names = [driver_name for driver_name in all_driver_names
- if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_VECTOR') == 'YES']
-gdal_driver_names = [driver_name for driver_name in all_driver_names
- if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_RASTER') == 'YES']
-multidim_driver_name = [driver_name for driver_name in gdal_driver_names
- if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_MULTIDIM_RASTER') == 'YES']
+from osgeo import gdal
-schema_openoptionslist = etree.XML(r"""
+all_driver_names = [
+ gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())
+]
+ogr_driver_names = [
+ driver_name
+ for driver_name in all_driver_names
+ if gdal.GetDriverByName(driver_name).GetMetadataItem("DCAP_VECTOR") == "YES"
+]
+gdal_driver_names = [
+ driver_name
+ for driver_name in all_driver_names
+ if gdal.GetDriverByName(driver_name).GetMetadataItem("DCAP_RASTER") == "YES"
+]
+multidim_driver_name = [
+ driver_name
+ for driver_name in gdal_driver_names
+ if gdal.GetDriverByName(driver_name).GetMetadataItem("DCAP_MULTIDIM_RASTER")
+ == "YES"
+]
+
+schema_openoptionslist = etree.XML(
+ r"""
@@ -106,9 +120,11 @@
-""")
+"""
+)
-schema_creationoptionslist_xml = etree.XML(r"""
+schema_creationoptionslist_xml = etree.XML(
+ r"""
@@ -173,9 +189,11 @@
-""")
+"""
+)
-schema_layer_creationoptionslist_xml = etree.XML(r"""
+schema_layer_creationoptionslist_xml = etree.XML(
+ r"""
@@ -240,10 +258,12 @@
-""")
+"""
+)
-schema_multidim_array_creationoptionslist_xml =etree.XML(r"""
+schema_multidim_array_creationoptionslist_xml = etree.XML(
+ r"""
@@ -276,10 +296,12 @@
-""")
+"""
+)
-schema_multidim_attribute_creationoptionslist_xml = etree.XML(r"""
+schema_multidim_attribute_creationoptionslist_xml = etree.XML(
+ r"""
@@ -299,10 +321,12 @@
-""")
+"""
+)
-schema_multidim_dataset_creationoptionslist_xml = etree.XML(r"""
+schema_multidim_dataset_creationoptionslist_xml = etree.XML(
+ r"""
@@ -323,10 +347,12 @@
-""")
+"""
+)
-schema_multidim_dimension_creationoptionslist_xml = etree.XML(r"""
+schema_multidim_dimension_creationoptionslist_xml = etree.XML(
+ r"""
@@ -347,17 +373,18 @@
-""")
+"""
+)
-@pytest.mark.parametrize('driver_name', all_driver_names)
+@pytest.mark.parametrize("driver_name", all_driver_names)
def test_metadata_openoptionlist(driver_name):
- """ Test if DMD_OPENOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_OPENOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_openoptionslist)
driver = gdal.GetDriverByName(driver_name)
- openoptionlist_xml = driver.GetMetadataItem('DMD_OPENOPTIONLIST')
+ openoptionlist_xml = driver.GetMetadataItem("DMD_OPENOPTIONLIST")
if openoptionlist_xml is not None and len(openoptionlist_xml) > 0:
# do not fail
@@ -369,14 +396,14 @@ def test_metadata_openoptionlist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', all_driver_names)
+@pytest.mark.parametrize("driver_name", all_driver_names)
def test_metadata_creationoptionslist(driver_name):
- """ Test if DMD_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- creationoptionslist_xml = driver.GetMetadataItem('DMD_CREATIONOPTIONLIST')
+ creationoptionslist_xml = driver.GetMetadataItem("DMD_CREATIONOPTIONLIST")
if creationoptionslist_xml is not None and len(creationoptionslist_xml) > 0:
# do not fail
@@ -388,14 +415,14 @@ def test_metadata_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', ogr_driver_names)
+@pytest.mark.parametrize("driver_name", ogr_driver_names)
def test_metadata_layer_creationoptionslist(driver_name):
- """ Test if DS_LAYER_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DS_LAYER_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_layer_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- creationoptionslist_xml = driver.GetMetadataItem('DS_LAYER_CREATIONOPTIONLIST')
+ creationoptionslist_xml = driver.GetMetadataItem("DS_LAYER_CREATIONOPTIONLIST")
if creationoptionslist_xml is not None and len(creationoptionslist_xml) > 0:
# do not fail
@@ -407,14 +434,14 @@ def test_metadata_layer_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', multidim_driver_name)
+@pytest.mark.parametrize("driver_name", multidim_driver_name)
def test_metadata_multidim_array_creationoptionslist(driver_name):
- """ Test if DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_multidim_array_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- xml = driver.GetMetadataItem('DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST')
+ xml = driver.GetMetadataItem("DMD_MULTIDIM_ARRAY_CREATIONOPTIONLIST")
if xml is not None and len(xml) > 0:
# do not fail
@@ -426,14 +453,14 @@ def test_metadata_multidim_array_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', multidim_driver_name)
+@pytest.mark.parametrize("driver_name", multidim_driver_name)
def test_metadata_multidim_attribute_creationoptionslist(driver_name):
- """ Test if DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_multidim_attribute_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- xml = driver.GetMetadataItem('DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST')
+ xml = driver.GetMetadataItem("DMD_MULTIDIM_ATTRIBUTE_CREATIONOPTIONLIST")
if xml is not None and len(xml) > 0:
# do not fail
@@ -445,14 +472,14 @@ def test_metadata_multidim_attribute_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', multidim_driver_name)
+@pytest.mark.parametrize("driver_name", multidim_driver_name)
def test_metadata_multidim_dataset_creationoptionslist(driver_name):
- """ Test if DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_multidim_dataset_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- xml = driver.GetMetadataItem('DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST')
+ xml = driver.GetMetadataItem("DMD_MULTIDIM_DATASET_CREATIONOPTIONLIST")
if xml is not None and len(xml) > 0:
# do not fail
@@ -464,14 +491,14 @@ def test_metadata_multidim_dataset_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', multidim_driver_name)
+@pytest.mark.parametrize("driver_name", multidim_driver_name)
def test_metadata_multidim_dimension_creationoptionslist(driver_name):
- """ Test if DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
schema = etree.XMLSchema(schema_multidim_dimension_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- xml = driver.GetMetadataItem('DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST')
+ xml = driver.GetMetadataItem("DMD_MULTIDIM_DIMENSION_CREATIONOPTIONLIST")
if xml is not None and len(xml) > 0:
# do not fail
@@ -483,15 +510,15 @@ def test_metadata_multidim_dimension_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', multidim_driver_name)
+@pytest.mark.parametrize("driver_name", multidim_driver_name)
def test_metadata_multidim_group_creationoptionslist(driver_name):
- """ Test if DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST metadataitem is present and can be parsed """
+ """Test if DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST metadataitem is present and can be parsed"""
# TODO: create schema if xml is available
# schema = etree.XMLSchema(schema_multidim_group_creationoptionslist_xml)
driver = gdal.GetDriverByName(driver_name)
- xml = driver.GetMetadataItem('DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST')
+ xml = driver.GetMetadataItem("DMD_MULTIDIM_GROUP_CREATIONOPTIONLIST")
if xml is not None and len(xml) > 0:
# do not fail
@@ -504,41 +531,53 @@ def test_metadata_multidim_group_creationoptionslist(driver_name):
raise
-@pytest.mark.parametrize('driver_name', all_driver_names)
+@pytest.mark.parametrize("driver_name", all_driver_names)
def test_metadata_creation_field_datatypes(driver_name):
- """ Test if DMD_CREATIONFIELDDATATYPES metadataitem returns valid datatypes """
-
- valid_datatypes = {'Integer', 'Integer64', 'Real', 'String', 'Date', 'DateTime', 'Time', 'IntegerList',
- 'Integer64List', 'RealList', 'StringList', 'Binary'}
+ """Test if DMD_CREATIONFIELDDATATYPES metadataitem returns valid datatypes"""
+
+ valid_datatypes = {
+ "Integer",
+ "Integer64",
+ "Real",
+ "String",
+ "Date",
+ "DateTime",
+ "Time",
+ "IntegerList",
+ "Integer64List",
+ "RealList",
+ "StringList",
+ "Binary",
+ }
driver = gdal.GetDriverByName(driver_name)
- datatypes_str = driver.GetMetadataItem('DMD_CREATIONFIELDDATATYPES')
+ datatypes_str = driver.GetMetadataItem("DMD_CREATIONFIELDDATATYPES")
if datatypes_str is not None:
- for datatype in datatypes_str.split(' '):
+ for datatype in datatypes_str.split(" "):
assert datatype in valid_datatypes
-@pytest.mark.parametrize('driver_name', all_driver_names)
+@pytest.mark.parametrize("driver_name", all_driver_names)
def test_metadata_creation_sub_field_datatypes(driver_name):
- """ Test if DMD_CREATIONFIELDDATASUBTYPES metadataitem returns valid data subtypes """
+ """Test if DMD_CREATIONFIELDDATASUBTYPES metadataitem returns valid data subtypes"""
- valid_datatypes = {'Boolean', 'Float32', 'Int16', 'JSON', 'UUID'}
+ valid_datatypes = {"Boolean", "Float32", "Int16", "JSON", "UUID"}
driver = gdal.GetDriverByName(driver_name)
- datatypes_str = driver.GetMetadataItem('DMD_CREATIONFIELDDATASUBTYPES')
+ datatypes_str = driver.GetMetadataItem("DMD_CREATIONFIELDDATASUBTYPES")
if datatypes_str is not None:
- for datatype in datatypes_str.split(' '):
+ for datatype in datatypes_str.split(" "):
assert datatype in valid_datatypes
-@pytest.mark.parametrize('driver_name', ogr_driver_names)
+@pytest.mark.parametrize("driver_name", ogr_driver_names)
def test_metadata_alter_geom_field_defn_flags(driver_name):
- """ Test if GDAL_DMD_ALTER_GEOM_FIELD_DEFN_FLAGS metadataitem returns valid flags """
+ """Test if GDAL_DMD_ALTER_GEOM_FIELD_DEFN_FLAGS metadataitem returns valid flags"""
- supported_flags = {'Name', 'Type', 'Nullable', 'SRS', 'CoordinateEpoch'}
+ supported_flags = {"Name", "Type", "Nullable", "SRS", "CoordinateEpoch"}
driver = gdal.GetDriverByName(driver_name)
flags_str = driver.GetMetadataItem(gdal.DMD_ALTER_GEOM_FIELD_DEFN_FLAGS)
if flags_str is not None:
- for flag in flags_str.split(' '):
+ for flag in flags_str.split(" "):
assert flag in supported_flags
diff --git a/autotest/gcore/testnonboundtoswig.py b/autotest/gcore/testnonboundtoswig.py
index 00efa45c53c6..ab3384758ade 100755
--- a/autotest/gcore/testnonboundtoswig.py
+++ b/autotest/gcore/testnonboundtoswig.py
@@ -31,10 +31,10 @@
import ctypes
-from osgeo import gdal
+import gdaltest
import pytest
-import gdaltest
+from osgeo import gdal
gdal_handle_init = False
gdal_handle = None
@@ -45,13 +45,14 @@
def find_libgdal():
- return gdaltest.find_lib('gdal')
+ return gdaltest.find_lib("gdal")
+
###############################################################################
# Init
-@pytest.fixture(scope='module', autouse=True)
+@pytest.fixture(scope="module", autouse=True)
def setup():
global gdal_handle_init, gdal_handle, gdal_handle_stdcall
@@ -66,7 +67,7 @@ def setup():
if name is None:
pytest.skip()
- print('Found libgdal we are running against : %s' % name)
+ print("Found libgdal we are running against : %s" % name)
static_version = gdal.VersionInfo(None)
# short_static_version = static_version[0:2]
@@ -82,17 +83,20 @@ def setup():
gdal_handle_stdcall.GDALVersionInfo.restype = ctypes.c_char_p
dynamic_version = gdal_handle_stdcall.GDALVersionInfo(None)
- dynamic_version = dynamic_version.decode('utf-8')
+ dynamic_version = dynamic_version.decode("utf-8")
if dynamic_version != static_version:
gdal_handle = None
gdal_handle_stdcall = None
- pytest.skip(f'dynamic version({dynamic_version}) does not match '
- f'static version ({static_version})')
+ pytest.skip(
+ f"dynamic version({dynamic_version}) does not match "
+ f"static version ({static_version})"
+ )
return gdal_handle
except Exception:
- pytest.skip('cannot find gdal shared object')
+ pytest.skip("cannot find gdal shared object")
+
###############################################################################
# Call GDALDestroyDriverManager()
@@ -105,6 +109,7 @@ def GDALDestroyDriverManager():
gdal_handle_stdcall.GDALDestroyDriverManager()
+
###############################################################################
# Call OGRCleanupAll()
@@ -116,6 +121,7 @@ def OGRCleanupAll():
gdal_handle_stdcall.OGRCleanupAll()
+
###############################################################################
# Call OSRCleanup()
@@ -127,13 +133,14 @@ def OSRCleanup():
gdal_handle.OSRCleanup()
+
###############################################################################
# Test GDALSimpleImageWarp
def test_testnonboundtoswig_GDALSimpleImageWarp():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
gt = src_ds.GetGeoTransform()
wkt = src_ds.GetProjectionRef()
src_ds = None
@@ -145,31 +152,57 @@ def test_testnonboundtoswig_GDALSimpleImageWarp():
gdal_handle_stdcall.GDALClose.restype = None
gdal_handle.GDALCreateGenImgProjTransformer2.restype = ctypes.c_void_p
- gdal_handle.GDALCreateGenImgProjTransformer2.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
-
- gdal_handle_stdcall.GDALSimpleImageWarp.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
+ gdal_handle.GDALCreateGenImgProjTransformer2.argtypes = [
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ]
+
+ gdal_handle_stdcall.GDALSimpleImageWarp.argtypes = [
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_int,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ctypes.c_void_p,
+ ]
gdal_handle_stdcall.GDALSimpleImageWarp.restype = ctypes.c_int
gdal_handle.GDALDestroyGenImgProjTransformer.argtypes = [ctypes.c_void_p]
gdal_handle.GDALDestroyGenImgProjTransformer.restype = None
- out_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/out.tif', 20, 20, 1)
+ out_ds = gdal.GetDriverByName("GTiff").Create("/vsimem/out.tif", 20, 20, 1)
out_ds.SetGeoTransform(gt)
out_ds.SetProjection(wkt)
out_ds = None
- filename = b'data/byte.tif'
+ filename = b"data/byte.tif"
native_in_ds = gdal_handle_stdcall.GDALOpen(filename, gdal.GA_ReadOnly)
assert native_in_ds is not None
- filename = b'/vsimem/out.tif'
+ filename = b"/vsimem/out.tif"
native_out_ds = gdal_handle_stdcall.GDALOpen(filename, gdal.GA_Update)
assert native_out_ds is not None
- pTransformerArg = gdal_handle.GDALCreateGenImgProjTransformer2(native_in_ds, native_out_ds, None)
+ pTransformerArg = gdal_handle.GDALCreateGenImgProjTransformer2(
+ native_in_ds, native_out_ds, None
+ )
assert pTransformerArg is not None
- ret = gdal_handle_stdcall.GDALSimpleImageWarp(native_in_ds, native_out_ds, 0, None, gdal_handle_stdcall.GDALGenImgProjTransform, pTransformerArg, None, None, None)
+ ret = gdal_handle_stdcall.GDALSimpleImageWarp(
+ native_in_ds,
+ native_out_ds,
+ 0,
+ None,
+ gdal_handle_stdcall.GDALGenImgProjTransform,
+ pTransformerArg,
+ None,
+ None,
+ None,
+ )
assert ret == 1
gdal_handle.GDALDestroyGenImgProjTransformer(pTransformerArg)
@@ -177,14 +210,15 @@ def test_testnonboundtoswig_GDALSimpleImageWarp():
gdal_handle_stdcall.GDALClose(native_in_ds)
gdal_handle_stdcall.GDALClose(native_out_ds)
- ds = gdal.Open('/vsimem/out.tif')
+ ds = gdal.Open("/vsimem/out.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- gdal.Unlink('/vsimem/out.tif')
+ gdal.Unlink("/vsimem/out.tif")
assert cs == 4672
+
###############################################################################
# Test VRT derived bands with callback functions implemented in Python!
@@ -208,32 +242,42 @@ def GDALTypeToCTypes(gdaltype):
return None
-def my_pyDerivedPixelFunc(papoSources, nSources, pData, nBufXSize, nBufYSize, eSrcType, eBufType, nPixelSpace, nLineSpace):
+def my_pyDerivedPixelFunc(
+ papoSources,
+ nSources,
+ pData,
+ nBufXSize,
+ nBufYSize,
+ eSrcType,
+ eBufType,
+ nPixelSpace,
+ nLineSpace,
+):
if nSources != 1:
print(nSources)
- print('did not get expected nSources')
+ print("did not get expected nSources")
return 1
srcctype = GDALTypeToCTypes(eSrcType)
if srcctype is None:
print(eSrcType)
- print('did not get expected eSrcType')
+ print("did not get expected eSrcType")
return 1
dstctype = GDALTypeToCTypes(eBufType)
if dstctype is None:
print(eBufType)
- print('did not get expected eBufType')
+ print("did not get expected eBufType")
return 1
if nPixelSpace != gdal.GetDataTypeSize(eBufType) / 8:
print(nPixelSpace)
- print('did not get expected nPixelSpace')
+ print("did not get expected nPixelSpace")
return 1
if (nLineSpace % nPixelSpace) != 0:
print(nLineSpace)
- print('did not get expected nLineSpace')
+ print("did not get expected nLineSpace")
return 1
nLineStride = (int)(nLineSpace / nPixelSpace)
@@ -249,27 +293,34 @@ def my_pyDerivedPixelFunc(papoSources, nSources, pData, nBufXSize, nBufYSize, eS
def test_testnonboundtoswig_VRTDerivedBands():
- DerivedPixelFuncType = ctypes.CFUNCTYPE(ctypes.c_int, # ret CPLErr
- ctypes.POINTER(ctypes.c_void_p), # void **papoSources
- ctypes.c_int, # int nSources
- ctypes.c_void_p, # void *pData
- ctypes.c_int, # int nBufXSize
- ctypes.c_int, # int nBufYSize
- ctypes.c_int, # GDALDataType eSrcType
- ctypes.c_int, # GDALDataType eBufType
- ctypes.c_int, # int nPixelSpace
- ctypes.c_int) # int nLineSpace
+ DerivedPixelFuncType = ctypes.CFUNCTYPE(
+ ctypes.c_int, # ret CPLErr
+ ctypes.POINTER(ctypes.c_void_p), # void **papoSources
+ ctypes.c_int, # int nSources
+ ctypes.c_void_p, # void *pData
+ ctypes.c_int, # int nBufXSize
+ ctypes.c_int, # int nBufYSize
+ ctypes.c_int, # GDALDataType eSrcType
+ ctypes.c_int, # GDALDataType eBufType
+ ctypes.c_int, # int nPixelSpace
+ ctypes.c_int,
+ ) # int nLineSpace
my_cDerivedPixelFunc = DerivedPixelFuncType(my_pyDerivedPixelFunc)
# CPLErr CPL_DLL CPL_STDCALL GDALAddDerivedBandPixelFunc( const char *pszName,
# GDALDerivedPixelFunc pfnPixelFunc );
- gdal_handle_stdcall.GDALAddDerivedBandPixelFunc.argtypes = [ctypes.c_char_p, DerivedPixelFuncType]
+ gdal_handle_stdcall.GDALAddDerivedBandPixelFunc.argtypes = [
+ ctypes.c_char_p,
+ DerivedPixelFuncType,
+ ]
gdal_handle_stdcall.GDALAddDerivedBandPixelFunc.restype = ctypes.c_int
funcName = b"pyDerivedPixelFunc"
- ret = gdal_handle_stdcall.GDALAddDerivedBandPixelFunc(funcName, my_cDerivedPixelFunc)
+ ret = gdal_handle_stdcall.GDALAddDerivedBandPixelFunc(
+ funcName, my_cDerivedPixelFunc
+ )
assert ret == 0
vrt_xml = """
@@ -285,7 +336,7 @@ def test_testnonboundtoswig_VRTDerivedBands():
"""
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
ref_cs = src_ds.GetRasterBand(1).Checksum()
ref_data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20)
src_ds = None
@@ -295,6 +346,6 @@ def test_testnonboundtoswig_VRTDerivedBands():
got_data = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20)
ds = None
- assert ref_cs == got_cs, 'wrong checksum'
+ assert ref_cs == got_cs, "wrong checksum"
assert ref_data == got_data
diff --git a/autotest/gcore/thread_test.py b/autotest/gcore/thread_test.py
index 28aa05aa1b0f..c2f401988862 100755
--- a/autotest/gcore/thread_test.py
+++ b/autotest/gcore/thread_test.py
@@ -31,9 +31,10 @@
import threading
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
def my_error_handler(err_type, err_no, err_msg):
# pylint: disable=unused-argument
@@ -42,39 +43,35 @@ def my_error_handler(err_type, err_no, err_msg):
def thread_test_1_worker(args_dict):
for i in range(1000):
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
if (i % 2) == 0:
if ds.GetRasterBand(1).Checksum() != 4672:
- args_dict['ret'] = False
+ args_dict["ret"] = False
else:
ds.GetRasterBand(1).ReadAsArray()
for i in range(1000):
gdal.PushErrorHandler(my_error_handler)
- ds = gdal.Open('i_dont_exist')
+ ds = gdal.Open("i_dont_exist")
gdal.PopErrorHandler()
def test_thread_test_1():
- pytest.importorskip('numpy')
+ pytest.importorskip("numpy")
threads = []
args_array = []
for i in range(4):
- args_dict = {'ret': True}
+ args_dict = {"ret": True}
t = threading.Thread(target=thread_test_1_worker, args=(args_dict,))
args_array.append(args_dict)
threads.append(t)
t.start()
- ret = 'success'
+ ret = "success"
for i in range(4):
threads[i].join()
if not args_array[i]:
- ret = 'fail'
+ ret = "fail"
return ret
-
-
-
-
diff --git a/autotest/gcore/tiff_ovr.py b/autotest/gcore/tiff_ovr.py
index c6dd800c4a19..984463a62890 100755
--- a/autotest/gcore/tiff_ovr.py
+++ b/autotest/gcore/tiff_ovr.py
@@ -30,26 +30,25 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
+import array
import os
import shutil
-import array
import stat
import struct
-from osgeo import osr
-from osgeo import gdal
+import gdaltest
import pytest
-import gdaltest
+from osgeo import gdal, osr
-@pytest.fixture(params=['invert', 'dont-invert'])
+@pytest.fixture(params=["invert", "dont-invert"])
def both_endian(request):
"""
Runs tests with both values of GDAL_TIFF_ENDIANNESS
"""
- if request.param == 'invert':
- with gdaltest.config_option('GDAL_TIFF_ENDIANNESS', 'INVERTED'):
+ if request.param == "invert":
+ with gdaltest.config_option("GDAL_TIFF_ENDIANNESS", "INVERTED"):
yield
else:
yield
@@ -58,28 +57,44 @@ def both_endian(request):
###############################################################################
# Check the overviews
+
def tiff_ovr_check(src_ds):
for i in (1, 2, 3):
- assert src_ds.GetRasterBand(i).GetOverviewCount() == 2, 'overviews missing'
+ assert src_ds.GetRasterBand(i).GetOverviewCount() == 2, "overviews missing"
ovr_band = src_ds.GetRasterBand(i).GetOverview(0)
if ovr_band.XSize != 10 or ovr_band.YSize != 10:
- msg = 'overview wrong size: band %d, overview 0, size = %d * %d,' % (i, ovr_band.XSize, ovr_band.YSize)
+ msg = "overview wrong size: band %d, overview 0, size = %d * %d," % (
+ i,
+ ovr_band.XSize,
+ ovr_band.YSize,
+ )
pytest.fail(msg)
if ovr_band.Checksum() != 1087:
- msg = 'overview wrong checksum: band %d, overview 0, checksum = %d,' % (i, ovr_band.Checksum())
+ msg = "overview wrong checksum: band %d, overview 0, checksum = %d," % (
+ i,
+ ovr_band.Checksum(),
+ )
pytest.fail(msg)
ovr_band = src_ds.GetRasterBand(i).GetOverview(1)
if ovr_band.XSize != 5 or ovr_band.YSize != 5:
- msg = 'overview wrong size: band %d, overview 1, size = %d * %d,' % (i, ovr_band.XSize, ovr_band.YSize)
+ msg = "overview wrong size: band %d, overview 1, size = %d * %d," % (
+ i,
+ ovr_band.XSize,
+ ovr_band.YSize,
+ )
pytest.fail(msg)
if ovr_band.Checksum() != 328:
- msg = 'overview wrong checksum: band %d, overview 1, checksum = %d,' % (i, ovr_band.Checksum())
+ msg = "overview wrong checksum: band %d, overview 1, checksum = %d," % (
+ i,
+ ovr_band.Checksum(),
+ )
pytest.fail(msg)
+
###############################################################################
# Create a 3 band floating point GeoTIFF file so we can build overviews on it
# later. Build overviews on it.
@@ -87,23 +102,24 @@ def tiff_ovr_check(src_ds):
def test_tiff_ovr_1(both_endian):
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
- src_ds = gdal.Open('data/mfloat32.vrt')
+ src_ds = gdal.Open("data/mfloat32.vrt")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- gdaltest.tiff_drv.CreateCopy('tmp/mfloat32.tif', src_ds,
- options=['INTERLEAVE=PIXEL'])
+ gdaltest.tiff_drv.CreateCopy(
+ "tmp/mfloat32.tif", src_ds, options=["INTERLEAVE=PIXEL"]
+ )
src_ds = None
- ds = gdal.Open('tmp/mfloat32.tif')
+ ds = gdal.Open("tmp/mfloat32.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
err = ds.BuildOverviews(overviewlist=[2, 4])
- assert err == 0, 'BuildOverviews reports an error'
+ assert err == 0, "BuildOverviews reports an error"
ret = tiff_ovr_check(ds)
@@ -115,11 +131,12 @@ def test_tiff_ovr_1(both_endian):
###############################################################################
# Open file and verify some characteristics of the overviews.
+
def test_tiff_ovr_2(both_endian):
- src_ds = gdal.Open('tmp/mfloat32.tif')
+ src_ds = gdal.Open("tmp/mfloat32.tif")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
ret = tiff_ovr_check(src_ds)
@@ -127,6 +144,7 @@ def test_tiff_ovr_2(both_endian):
return ret
+
###############################################################################
# Open target file in update mode, and create internal overviews.
@@ -134,16 +152,16 @@ def test_tiff_ovr_2(both_endian):
def test_tiff_ovr_3(both_endian):
try:
- os.unlink('tmp/mfloat32.tif.ovr')
+ os.unlink("tmp/mfloat32.tif.ovr")
except OSError:
pass
- src_ds = gdal.Open('tmp/mfloat32.tif', gdal.GA_Update)
+ src_ds = gdal.Open("tmp/mfloat32.tif", gdal.GA_Update)
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
err = src_ds.BuildOverviews(overviewlist=[2, 4])
- assert err == 0, 'BuildOverviews reports an error'
+ assert err == 0, "BuildOverviews reports an error"
ret = tiff_ovr_check(src_ds)
@@ -151,6 +169,7 @@ def test_tiff_ovr_3(both_endian):
return ret
+
###############################################################################
# Re-open target file and check overviews
@@ -158,27 +177,29 @@ def test_tiff_ovr_3(both_endian):
def test_tiff_ovr_3bis(both_endian):
return test_tiff_ovr_2(both_endian)
+
###############################################################################
# Test generation
def test_tiff_ovr_4(both_endian):
- shutil.copyfile('data/oddsize_1bit2b.tif', 'tmp/ovr4.tif')
+ shutil.copyfile("data/oddsize_1bit2b.tif", "tmp/ovr4.tif")
- wrk_ds = gdal.Open('tmp/ovr4.tif', gdal.GA_Update)
+ wrk_ds = gdal.Open("tmp/ovr4.tif", gdal.GA_Update)
- assert wrk_ds is not None, 'Failed to open test dataset.'
+ assert wrk_ds is not None, "Failed to open test dataset."
- wrk_ds.BuildOverviews('AVERAGE_BIT2GRAYSCALE', overviewlist=[2, 4])
+ wrk_ds.BuildOverviews("AVERAGE_BIT2GRAYSCALE", overviewlist=[2, 4])
wrk_ds = None
- wrk_ds = gdal.Open('tmp/ovr4.tif')
+ wrk_ds = gdal.Open("tmp/ovr4.tif")
ovband = wrk_ds.GetRasterBand(1).GetOverview(1)
md = ovband.GetMetadata()
- assert 'RESAMPLING' in md and md['RESAMPLING'] == 'AVERAGE_BIT2GRAYSCALE', \
- 'Did not get expected RESAMPLING metadata.'
+ assert (
+ "RESAMPLING" in md and md["RESAMPLING"] == "AVERAGE_BIT2GRAYSCALE"
+ ), "Did not get expected RESAMPLING metadata."
# compute average value of overview band image data.
ovimage = ovband.ReadRaster(0, 0, ovband.XSize, ovband.YSize)
@@ -188,21 +209,26 @@ def test_tiff_ovr_4(both_endian):
average = total / pix_count
exp_average = 154.0992
- assert average == pytest.approx(exp_average, abs=0.1), 'got wrong average for overview image'
+ assert average == pytest.approx(
+ exp_average, abs=0.1
+ ), "got wrong average for overview image"
# Read base band as overview resolution and verify we aren't getting
# the grayscale image.
frband = wrk_ds.GetRasterBand(1)
- ovimage = frband.ReadRaster(0, 0, frband.XSize, frband.YSize,
- ovband.XSize, ovband.YSize)
+ ovimage = frband.ReadRaster(
+ 0, 0, frband.XSize, frband.YSize, ovband.XSize, ovband.YSize
+ )
pix_count = ovband.XSize * ovband.YSize
total = float(sum(ovimage))
average = total / pix_count
exp_average = 0.6096
- assert average == pytest.approx(exp_average, abs=0.01), 'got wrong average for downsampled image'
+ assert average == pytest.approx(
+ exp_average, abs=0.01
+ ), "got wrong average for downsampled image"
wrk_ds = None
@@ -210,20 +236,22 @@ def test_tiff_ovr_4(both_endian):
###############################################################################
# Test average overview generation with nodata.
+
def test_tiff_ovr_5(both_endian):
- shutil.copyfile('data/nodata_byte.tif', 'tmp/ovr5.tif')
+ shutil.copyfile("data/nodata_byte.tif", "tmp/ovr5.tif")
- wrk_ds = gdal.Open('tmp/ovr5.tif', gdal.GA_ReadOnly)
+ wrk_ds = gdal.Open("tmp/ovr5.tif", gdal.GA_ReadOnly)
- assert wrk_ds is not None, 'Failed to open test dataset.'
+ assert wrk_ds is not None, "Failed to open test dataset."
- wrk_ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ wrk_ds.BuildOverviews("AVERAGE", overviewlist=[2])
cs = wrk_ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 1130
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Same as tiff_ovr_5 but with USE_RDD=YES to force external overview
@@ -231,12 +259,12 @@ def test_tiff_ovr_5(both_endian):
def test_tiff_ovr_6(both_endian):
- shutil.copyfile('data/nodata_byte.tif', 'tmp/ovr6.tif')
+ shutil.copyfile("data/nodata_byte.tif", "tmp/ovr6.tif")
- with gdaltest.config_option('USE_RRD', 'YES'):
- wrk_ds = gdal.Open('tmp/ovr6.tif', gdal.GA_Update)
+ with gdaltest.config_option("USE_RRD", "YES"):
+ wrk_ds = gdal.Open("tmp/ovr6.tif", gdal.GA_Update)
- assert wrk_ds is not None, 'Failed to open test dataset.'
+ assert wrk_ds is not None, "Failed to open test dataset."
def cbk(pct, _, user_data):
if user_data[0] < 0:
@@ -246,41 +274,45 @@ def cbk(pct, _, user_data):
return 1
tab = [-1]
- wrk_ds.BuildOverviews('AVERAGE', overviewlist=[2], callback=cbk, callback_data=tab)
+ wrk_ds.BuildOverviews(
+ "AVERAGE", overviewlist=[2], callback=cbk, callback_data=tab
+ )
assert tab[0] == 1.0
try:
- os.stat('tmp/ovr6.aux')
+ os.stat("tmp/ovr6.aux")
except OSError:
- pytest.fail('no external overview.')
+ pytest.fail("no external overview.")
cs = wrk_ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 1130
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
###############################################################################
# Check nearest resampling on a dataset with a raster band that has a color table
+
def test_tiff_ovr_7(both_endian):
- shutil.copyfile('data/test_average_palette.tif', 'tmp/test_average_palette.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/test_average_palette.tif")
# This dataset is a black&white chessboard, index 0 is black, index 1 is white.
# In nearest resampling, we are expecting a uniform black image.
- ds = gdal.Open('tmp/test_average_palette.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/test_average_palette.tif", gdal.GA_Update)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 0
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Check average resampling on a dataset with a raster band that has a color table
@@ -288,23 +320,24 @@ def test_tiff_ovr_7(both_endian):
def test_tiff_ovr_8(both_endian):
- shutil.copyfile('data/test_average_palette.tif', 'tmp/test_average_palette.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/test_average_palette.tif")
# This dataset is a black&white chessboard, index 0 is black, index 1 is white.
# So the result of averaging (0,0,0) and (255,255,255) is (127,127,127), which is
# index 2. So the result of the averaging is a uniform grey image.
- ds = gdal.Open('tmp/test_average_palette.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/test_average_palette.tif", gdal.GA_Update)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 200
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Check RMS resampling on a dataset with a raster band that has a color table
@@ -312,21 +345,22 @@ def test_tiff_ovr_8(both_endian):
def test_tiff_ovr_rms_palette(both_endian):
- shutil.copyfile('data/test_average_palette.tif', 'tmp/test_average_palette.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/test_average_palette.tif")
# This dataset is a black&white chessboard, index 0 is black, index 1 is white.
# So the result of averaging (0,0,0) and (255,255,255) is (180.3,180.3,180.3),
# and the closest color is (127,127,127) at index 2.
# So the result of the averaging is a uniform grey image.
- ds = gdal.Open('tmp/test_average_palette.tif', gdal.GA_Update)
- ds.BuildOverviews('RMS', overviewlist=[2])
+ ds = gdal.Open("tmp/test_average_palette.tif", gdal.GA_Update)
+ ds.BuildOverviews("RMS", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 200
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Test --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR -ro
@@ -334,30 +368,32 @@ def test_tiff_ovr_rms_palette(both_endian):
def test_tiff_ovr_9(both_endian):
- gdaltest.tiff_drv.Delete('tmp/ovr9.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr9.tif")
- shutil.copyfile('data/rgbsmall.tif', 'tmp/ovr9.tif')
+ shutil.copyfile("data/rgbsmall.tif", "tmp/ovr9.tif")
- with gdaltest.config_options({'COMPRESS_OVERVIEW': 'JPEG',
- 'PHOTOMETRIC_OVERVIEW': 'YCBCR'}):
- ds = gdal.Open('tmp/ovr9.tif', gdal.GA_ReadOnly)
+ with gdaltest.config_options(
+ {"COMPRESS_OVERVIEW": "JPEG", "PHOTOMETRIC_OVERVIEW": "YCBCR"}
+ ):
+ ds = gdal.Open("tmp/ovr9.tif", gdal.GA_ReadOnly)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
- exp_cs_list = (5562,
- 5635,
- 5601, # libjpeg 9e
- )
+ exp_cs_list = (
+ 5562,
+ 5635,
+ 5601, # libjpeg 9e
+ )
ds = None
assert cs in exp_cs_list
# Re-check after dataset reopening
- ds = gdal.Open('tmp/ovr9.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("tmp/ovr9.tif", gdal.GA_ReadOnly)
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
@@ -365,36 +401,41 @@ def test_tiff_ovr_9(both_endian):
assert cs in exp_cs_list
+
###############################################################################
# Similar to tiff_ovr_9 but with internal overviews.
def test_tiff_ovr_10(both_endian):
- src_ds = gdal.Open('data/rgbsmall.tif', gdal.GA_ReadOnly)
+ src_ds = gdal.Open("data/rgbsmall.tif", gdal.GA_ReadOnly)
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr10.tif', src_ds, options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/ovr10.tif", src_ds, options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR"]
+ )
src_ds = None
- assert ds is not None, 'Failed to apply JPEG compression.'
+ assert ds is not None, "Failed to apply JPEG compression."
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr10.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("tmp/ovr10.tif", gdal.GA_ReadOnly)
- assert ds is not None, 'Failed to open copy of test dataset.'
+ assert ds is not None, "Failed to open copy of test dataset."
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
ds = None
- assert cs in (5562,
- 5635,
- 5601, # libjpeg 9e
- )
+ assert cs in (
+ 5562,
+ 5635,
+ 5601, # libjpeg 9e
+ )
+
###############################################################################
# Overview on a dataset with NODATA_VALUES
@@ -402,19 +443,19 @@ def test_tiff_ovr_10(both_endian):
def test_tiff_ovr_11(both_endian):
- src_ds = gdal.Open('data/test_nodatavalues.tif', gdal.GA_ReadOnly)
+ src_ds = gdal.Open("data/test_nodatavalues.tif", gdal.GA_ReadOnly)
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr11.tif', src_ds)
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/ovr11.tif", src_ds)
src_ds = None
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr11.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("tmp/ovr11.tif", gdal.GA_ReadOnly)
- assert ds is not None, 'Failed to open copy of test dataset.'
+ assert ds is not None, "Failed to open copy of test dataset."
cs = ds.GetRasterBand(2).GetOverview(0).Checksum()
# If NODATA_VALUES was ignored, we would get 2766
@@ -422,7 +463,8 @@ def test_tiff_ovr_11(both_endian):
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Same as tiff_ovr_11 but with compression to trigger the multiband overview
@@ -431,19 +473,21 @@ def test_tiff_ovr_11(both_endian):
def test_tiff_ovr_12(both_endian):
- src_ds = gdal.Open('data/test_nodatavalues.tif', gdal.GA_ReadOnly)
+ src_ds = gdal.Open("data/test_nodatavalues.tif", gdal.GA_ReadOnly)
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr12.tif', src_ds, options=['COMPRESS=DEFLATE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/ovr12.tif", src_ds, options=["COMPRESS=DEFLATE"]
+ )
src_ds = None
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr12.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("tmp/ovr12.tif", gdal.GA_ReadOnly)
- assert ds is not None, 'Failed to open copy of test dataset.'
+ assert ds is not None, "Failed to open copy of test dataset."
cs = ds.GetRasterBand(2).GetOverview(0).Checksum()
# If NODATA_VALUES was ignored, we would get 2766
@@ -451,31 +495,33 @@ def test_tiff_ovr_12(both_endian):
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
###############################################################################
# Test gaussian resampling
+
def test_tiff_ovr_13(both_endian):
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
- src_ds = gdal.Open('data/mfloat32.vrt')
+ src_ds = gdal.Open("data/mfloat32.vrt")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- gdaltest.tiff_drv.CreateCopy('tmp/mfloat32.tif', src_ds,
- options=['INTERLEAVE=PIXEL'])
+ gdaltest.tiff_drv.CreateCopy(
+ "tmp/mfloat32.tif", src_ds, options=["INTERLEAVE=PIXEL"]
+ )
src_ds = None
- ds = gdal.Open('tmp/mfloat32.tif')
+ ds = gdal.Open("tmp/mfloat32.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- err = ds.BuildOverviews('GAUSS', overviewlist=[2, 4])
+ err = ds.BuildOverviews("GAUSS", overviewlist=[2, 4])
- assert err == 0, 'BuildOverviews reports an error'
+ assert err == 0, "BuildOverviews reports an error"
# if ds.GetRasterBand(1).GetOverview(0).Checksum() != 1225:
# gdaltest.post_reason( 'bad checksum' )
@@ -483,26 +529,28 @@ def test_tiff_ovr_13(both_endian):
ds = None
+
###############################################################################
# Check gauss resampling on a dataset with a raster band that has a color table
def test_tiff_ovr_14(both_endian):
- shutil.copyfile('data/test_average_palette.tif', 'tmp/test_gauss_palette.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/test_gauss_palette.tif")
- ds = gdal.Open('tmp/test_gauss_palette.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/test_gauss_palette.tif", gdal.GA_Update)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- ds.BuildOverviews('GAUSS', overviewlist=[2])
+ ds.BuildOverviews("GAUSS", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 200
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Same as tiff_ovr_11 but with gauss, and compression to trigger the multiband overview
@@ -511,19 +559,21 @@ def test_tiff_ovr_14(both_endian):
def test_tiff_ovr_15(both_endian):
- src_ds = gdal.Open('data/test_nodatavalues.tif', gdal.GA_ReadOnly)
+ src_ds = gdal.Open("data/test_nodatavalues.tif", gdal.GA_ReadOnly)
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr15.tif', src_ds, options=['COMPRESS=DEFLATE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/ovr15.tif", src_ds, options=["COMPRESS=DEFLATE"]
+ )
src_ds = None
- ds.BuildOverviews('GAUSS', overviewlist=[2])
+ ds.BuildOverviews("GAUSS", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr15.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("tmp/ovr15.tif", gdal.GA_ReadOnly)
- assert ds is not None, 'Failed to open copy of test dataset.'
+ assert ds is not None, "Failed to open copy of test dataset."
cs = ds.GetRasterBand(2).GetOverview(0).Checksum()
# If NODATA_VALUES was ignored, we would get 2954
@@ -531,35 +581,35 @@ def test_tiff_ovr_15(both_endian):
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
###############################################################################
# Test mode resampling on non-byte dataset
+
def test_tiff_ovr_16(both_endian):
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
- src_ds = gdal.Open('data/mfloat32.vrt')
+ src_ds = gdal.Open("data/mfloat32.vrt")
- assert src_ds is not None, 'Failed to open test dataset.'
+ assert src_ds is not None, "Failed to open test dataset."
- gdaltest.tiff_drv.CreateCopy('tmp/ovr16.tif', src_ds,
- options=['INTERLEAVE=PIXEL'])
+ gdaltest.tiff_drv.CreateCopy("tmp/ovr16.tif", src_ds, options=["INTERLEAVE=PIXEL"])
src_ds = None
- ds = gdal.Open('tmp/ovr16.tif')
+ ds = gdal.Open("tmp/ovr16.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- err = ds.BuildOverviews('MODE', overviewlist=[2, 4])
+ err = ds.BuildOverviews("MODE", overviewlist=[2, 4])
- assert err == 0, 'BuildOverviews reports an error'
+ assert err == 0, "BuildOverviews reports an error"
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 1122
- assert cs == exp_cs, 'bad checksum'
+ assert cs == exp_cs, "bad checksum"
ds = None
@@ -567,44 +617,47 @@ def test_tiff_ovr_16(both_endian):
###############################################################################
# Test mode resampling on a byte dataset
+
def test_tiff_ovr_17(both_endian):
- shutil.copyfile('data/byte.tif', 'tmp/ovr17.tif')
+ shutil.copyfile("data/byte.tif", "tmp/ovr17.tif")
- ds = gdal.Open('tmp/ovr17.tif')
+ ds = gdal.Open("tmp/ovr17.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- err = ds.BuildOverviews('MODE', overviewlist=[2, 4])
+ err = ds.BuildOverviews("MODE", overviewlist=[2, 4])
- assert err == 0, 'BuildOverviews reports an error'
+ assert err == 0, "BuildOverviews reports an error"
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 1122
- assert cs == exp_cs, 'bad checksum'
+ assert cs == exp_cs, "bad checksum"
ds = None
+
###############################################################################
# Check mode resampling on a dataset with a raster band that has a color table
def test_tiff_ovr_18(both_endian):
- shutil.copyfile('data/test_average_palette.tif', 'tmp/ovr18.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/ovr18.tif")
- ds = gdal.Open('tmp/ovr18.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/ovr18.tif", gdal.GA_Update)
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- ds.BuildOverviews('MODE', overviewlist=[2])
+ ds.BuildOverviews("MODE", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 100
ds = None
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
+
###############################################################################
# Check that we can create overviews on a newly create file (#2621)
@@ -612,17 +665,18 @@ def test_tiff_ovr_18(both_endian):
def test_tiff_ovr_19(both_endian):
- ds = gdal.GetDriverByName('GTiff').Create('tmp/ovr19.tif', 100, 100, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("tmp/ovr19.tif", 100, 100, 1)
ds.GetRasterBand(1).Fill(1)
# The flush is important to simulate the behaviour that wash it by #2621
ds.FlushCache()
- ds.BuildOverviews('NEAR', overviewlist=[2])
+ ds.BuildOverviews("NEAR", overviewlist=[2])
ds.FlushCache()
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
- assert ds.GetRasterBand(1).GetOverviewCount() == 2, \
- 'Overview could not be generated'
+ assert (
+ ds.GetRasterBand(1).GetOverviewCount() == 2
+ ), "Overview could not be generated"
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 2500
@@ -636,56 +690,65 @@ def test_tiff_ovr_19(both_endian):
###############################################################################
# Test BIGTIFF_OVERVIEW=YES option
+
def test_tiff_ovr_20(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr20.tif', 100, 100, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr20.tif", 100, 100, 1)
ds = None
- ds = gdal.Open('tmp/ovr20.tif')
+ ds = gdal.Open("tmp/ovr20.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- with gdaltest.config_option('BIGTIFF_OVERVIEW', 'YES'):
- ds.BuildOverviews('NEAREST', overviewlist=[2, 4])
+ with gdaltest.config_option("BIGTIFF_OVERVIEW", "YES"):
+ ds.BuildOverviews("NEAREST", overviewlist=[2, 4])
ds = None
- fileobj = open('tmp/ovr20.tif.ovr', mode='rb')
- binvalues = array.array('b')
+ fileobj = open("tmp/ovr20.tif.ovr", mode="rb")
+ binvalues = array.array("b")
binvalues.fromfile(fileobj, 4)
fileobj.close()
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
###############################################################################
# Test BIGTIFF_OVERVIEW=IF_NEEDED option
+
def test_tiff_ovr_21(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr21.tif', 170000, 100000, 1, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/ovr21.tif", 170000, 100000, 1, options=["SPARSE_OK=YES"]
+ )
ds = None
- ds = gdal.Open('tmp/ovr21.tif')
+ ds = gdal.Open("tmp/ovr21.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
# 170 k * 100 k = 17 GB. 17 GB / (2^2) = 4.25 GB > 4.2 GB
# so BigTIFF is needed
- ds.BuildOverviews('NONE', overviewlist=[2])
+ ds.BuildOverviews("NONE", overviewlist=[2])
ds = None
- fileobj = open('tmp/ovr21.tif.ovr', mode='rb')
- binvalues = array.array('b')
+ fileobj = open("tmp/ovr21.tif.ovr", mode="rb")
+ binvalues = array.array("b")
binvalues.fromfile(fileobj, 4)
fileobj.close()
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
+
###############################################################################
# Test BIGTIFF_OVERVIEW=NO option when BigTIFF is really needed
@@ -693,18 +756,20 @@ def test_tiff_ovr_21(both_endian):
def test_tiff_ovr_22(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr22.tif', 170000, 100000, 1, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/ovr22.tif", 170000, 100000, 1, options=["SPARSE_OK=YES"]
+ )
ds = None
- ds = gdal.Open('tmp/ovr22.tif')
+ ds = gdal.Open("tmp/ovr22.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
# 170 k * 100 k = 17 GB. 17 GB / (2^2) = 4.25 GB > 4.2 GB
# so BigTIFF is needed
- with gdaltest.config_option('BIGTIFF_OVERVIEW', 'NO'):
+ with gdaltest.config_option("BIGTIFF_OVERVIEW", "NO"):
with gdaltest.error_handler():
- err = ds.BuildOverviews('NONE', overviewlist=[2])
+ err = ds.BuildOverviews("NONE", overviewlist=[2])
ds = None
@@ -712,6 +777,7 @@ def test_tiff_ovr_22(both_endian):
return
pytest.fail()
+
###############################################################################
# Same as before, but BigTIFF might be not needed as we use a compression
# method for the overviews.
@@ -719,27 +785,32 @@ def test_tiff_ovr_22(both_endian):
def test_tiff_ovr_23(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr23.tif', 170000, 100000, 1, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/ovr23.tif", 170000, 100000, 1, options=["SPARSE_OK=YES"]
+ )
ds = None
- ds = gdal.Open('tmp/ovr23.tif')
+ ds = gdal.Open("tmp/ovr23.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- with gdaltest.config_option('BIGTIFF_OVERVIEW', 'NO'):
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- ds.BuildOverviews('NONE', overviewlist=[2])
+ with gdaltest.config_option("BIGTIFF_OVERVIEW", "NO"):
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ ds.BuildOverviews("NONE", overviewlist=[2])
ds = None
- fileobj = open('tmp/ovr23.tif.ovr', mode='rb')
- binvalues = array.array('b')
+ fileobj = open("tmp/ovr23.tif.ovr", mode="rb")
+ binvalues = array.array("b")
binvalues.fromfile(fileobj, 4)
fileobj.close()
# Check Classical TIFF signature
- assert (not ((binvalues[2] != 0x2A or binvalues[3] != 0) and
- (binvalues[3] != 0x2A or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2A or binvalues[3] != 0)
+ and (binvalues[3] != 0x2A or binvalues[2] != 0)
+ )
+
###############################################################################
# Test BIGTIFF_OVERVIEW=IF_SAFER option
@@ -747,28 +818,33 @@ def test_tiff_ovr_23(both_endian):
def test_tiff_ovr_24(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr24.tif', 85000, 100000, 1, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/ovr24.tif", 85000, 100000, 1, options=["SPARSE_OK=YES"]
+ )
ds = None
- ds = gdal.Open('tmp/ovr24.tif')
+ ds = gdal.Open("tmp/ovr24.tif")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
# 85 k * 100 k = 8.5 GB, so BigTIFF might be needed as
# 8.5 GB / 2 > 4.2 GB
- with gdaltest.config_option('BIGTIFF_OVERVIEW', 'IF_SAFER'):
- ds.BuildOverviews('NONE', overviewlist=[16])
+ with gdaltest.config_option("BIGTIFF_OVERVIEW", "IF_SAFER"):
+ ds.BuildOverviews("NONE", overviewlist=[16])
ds = None
- fileobj = open('tmp/ovr24.tif.ovr', mode='rb')
- binvalues = array.array('b')
+ fileobj = open("tmp/ovr24.tif.ovr", mode="rb")
+ binvalues = array.array("b")
binvalues.fromfile(fileobj, 4)
fileobj.close()
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
+
###############################################################################
# Test creating overviews after some blocks have been written in the main
@@ -777,13 +853,13 @@ def test_tiff_ovr_24(both_endian):
def test_tiff_ovr_25(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr25.tif', 100, 100, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr25.tif", 100, 100, 1)
ds.GetRasterBand(1).Fill(1)
ds.GetRasterBand(1).FlushCache()
- ds.BuildOverviews('NEAR', overviewlist=[2])
+ ds.BuildOverviews("NEAR", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr25.tif')
+ ds = gdal.Open("tmp/ovr25.tif")
assert ds is not None
assert ds.GetRasterBand(1).Checksum() == 10000
@@ -792,35 +868,39 @@ def test_tiff_ovr_25(both_endian):
assert ds.GetRasterBand(1).GetOverview(0).Checksum() == 2500
+
###############################################################################
# Test gdal.RegenerateOverview()
def test_tiff_ovr_26(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr26.tif', 100, 100, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr26.tif", 100, 100, 1)
ds.GetRasterBand(1).Fill(1)
ds.GetRasterBand(1).FlushCache()
- ds.BuildOverviews('NEAR', overviewlist=[2])
+ ds.BuildOverviews("NEAR", overviewlist=[2])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
ds.GetRasterBand(1).GetOverview(0).Fill(0)
cs_new = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs_new == 0
- gdal.RegenerateOverview(ds.GetRasterBand(1), ds.GetRasterBand(1).GetOverview(0), 'NEAR')
+ gdal.RegenerateOverview(
+ ds.GetRasterBand(1), ds.GetRasterBand(1).GetOverview(0), "NEAR"
+ )
cs_new = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == cs_new
ds = None
+
###############################################################################
# Test gdal.RegenerateOverviews()
def test_tiff_ovr_27(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr27.tif', 100, 100, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr27.tif", 100, 100, 1)
ds.GetRasterBand(1).Fill(1)
ds.GetRasterBand(1).FlushCache()
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
ds.GetRasterBand(1).GetOverview(0).Fill(0)
@@ -828,31 +908,40 @@ def test_tiff_ovr_27(both_endian):
cs_new = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2_new = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs_new == 0 and cs2_new == 0
- gdal.RegenerateOverviews(ds.GetRasterBand(1), [ds.GetRasterBand(1).GetOverview(0), ds.GetRasterBand(1).GetOverview(1)], 'NEAR')
+ gdal.RegenerateOverviews(
+ ds.GetRasterBand(1),
+ [ds.GetRasterBand(1).GetOverview(0), ds.GetRasterBand(1).GetOverview(1)],
+ "NEAR",
+ )
cs_new = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2_new = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs == cs_new
assert cs2 == cs2_new
ds = None
+
###############################################################################
# Test cleaning overviews.
def test_tiff_ovr_28(both_endian):
- ds = gdal.Open('tmp/ovr25.tif', gdal.GA_Update)
- assert ds.BuildOverviews(overviewlist=[]) == 0, \
- 'BuildOverviews() returned error code.'
+ ds = gdal.Open("tmp/ovr25.tif", gdal.GA_Update)
+ assert (
+ ds.BuildOverviews(overviewlist=[]) == 0
+ ), "BuildOverviews() returned error code."
- assert ds.GetRasterBand(1).GetOverviewCount() == 0, \
- 'Overview(s) appear to still exist.'
+ assert (
+ ds.GetRasterBand(1).GetOverviewCount() == 0
+ ), "Overview(s) appear to still exist."
# Close and reopen to confirm they are really gone.
ds = None
- ds = gdal.Open('tmp/ovr25.tif')
- assert ds.GetRasterBand(1).GetOverviewCount() == 0, \
- 'Overview(s) appear to still exist after reopen.'
+ ds = gdal.Open("tmp/ovr25.tif")
+ assert (
+ ds.GetRasterBand(1).GetOverviewCount() == 0
+ ), "Overview(s) appear to still exist after reopen."
+
###############################################################################
# Test cleaning external overviews (ovr) on a non-TIFF format.
@@ -860,32 +949,33 @@ def test_tiff_ovr_28(both_endian):
def test_tiff_ovr_29(both_endian):
- src_ds = gdal.Open('data/byte.tif')
- png_ds = gdal.GetDriverByName('PNG').CreateCopy('tmp/ovr29.png', src_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ png_ds = gdal.GetDriverByName("PNG").CreateCopy("tmp/ovr29.png", src_ds)
src_ds = None
png_ds.BuildOverviews(overviewlist=[2])
png_ds = None
- assert open('tmp/ovr29.png.ovr') is not None, 'Did not expected .ovr file.'
+ assert open("tmp/ovr29.png.ovr") is not None, "Did not expected .ovr file."
- png_ds = gdal.Open('tmp/ovr29.png')
+ png_ds = gdal.Open("tmp/ovr29.png")
- assert png_ds.GetRasterBand(1).GetOverviewCount() == 1, 'did not find overview'
+ assert png_ds.GetRasterBand(1).GetOverviewCount() == 1, "did not find overview"
png_ds.BuildOverviews(overviewlist=[])
- assert png_ds.GetRasterBand(1).GetOverviewCount() == 0, 'delete overview failed.'
+ assert png_ds.GetRasterBand(1).GetOverviewCount() == 0, "delete overview failed."
png_ds = None
- png_ds = gdal.Open('tmp/ovr29.png')
+ png_ds = gdal.Open("tmp/ovr29.png")
- assert png_ds.GetRasterBand(1).GetOverviewCount() == 0, 'delete overview failed.'
+ assert png_ds.GetRasterBand(1).GetOverviewCount() == 0, "delete overview failed."
png_ds = None
- assert not os.path.exists('tmp/ovr29.png.ovr')
+ assert not os.path.exists("tmp/ovr29.png.ovr")
+
+ gdal.GetDriverByName("PNG").Delete("tmp/ovr29.png")
- gdal.GetDriverByName('PNG').Delete('tmp/ovr29.png')
###############################################################################
# Test fix for #2988.
@@ -893,26 +983,27 @@ def test_tiff_ovr_29(both_endian):
def test_tiff_ovr_30(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr30.tif', 20, 20, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr30.tif", 20, 20, 1)
ds.BuildOverviews(overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr30.tif', gdal.GA_Update)
- ds.SetMetadata({'TEST_KEY': 'TestValue'})
+ ds = gdal.Open("tmp/ovr30.tif", gdal.GA_Update)
+ ds.SetMetadata({"TEST_KEY": "TestValue"})
ds = None
- ds = gdaltest.tiff_drv.Create('tmp/ovr30.tif', 20, 20, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr30.tif", 20, 20, 1)
ds.BuildOverviews(overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr30.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/ovr30.tif", gdal.GA_Update)
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
ds.SetProjection(sr.ExportToWkt())
ds = None
- ds = gdal.Open('tmp/ovr30.tif')
- assert ds.GetProjectionRef().find('4326') != -1
+ ds = gdal.Open("tmp/ovr30.tif")
+ assert ds.GetProjectionRef().find("4326") != -1
+
###############################################################################
# Test fix for #3033
@@ -920,18 +1011,21 @@ def test_tiff_ovr_30(both_endian):
def test_tiff_ovr_31(both_endian):
- ds = gdaltest.tiff_drv.Create('tmp/ovr31.tif', 100, 100, 4)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr31.tif", 100, 100, 4)
ds.GetRasterBand(1).Fill(255)
ds.GetRasterBand(2).Fill(255)
ds.GetRasterBand(3).Fill(255)
ds.GetRasterBand(4).Fill(255)
- ds.BuildOverviews('average', overviewlist=[2, 4])
+ ds.BuildOverviews("average", overviewlist=[2, 4])
cs = ds.GetRasterBand(1).GetOverview(1).Checksum()
expected_cs = 7646
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d' % (cs, expected_cs))
+ assert cs == expected_cs, "Checksum is %d. Expected checksum is %d" % (
+ cs,
+ expected_cs,
+ )
ds = None
+
###############################################################################
# Test Cubic sampling.
@@ -939,178 +1033,239 @@ def test_tiff_ovr_31(both_endian):
def test_tiff_ovr_32(both_endian):
# 4 regular band
- shutil.copyfile('data/stefan_full_rgba_photometric_rgb.tif', 'tmp/ovr32.tif')
+ shutil.copyfile("data/stefan_full_rgba_photometric_rgb.tif", "tmp/ovr32.tif")
- ds = gdal.Open('tmp/ovr32.tif', gdal.GA_Update)
- ds.BuildOverviews('cubic', overviewlist=[2, 5])
+ ds = gdal.Open("tmp/ovr32.tif", gdal.GA_Update)
+ ds.BuildOverviews("cubic", overviewlist=[2, 5])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs = 21168
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (cs, expected_cs)
cs = ds.GetRasterBand(3).GetOverview(1).Checksum()
expected_cs = 1851
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 1.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 1." % (cs, expected_cs)
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr32.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr32.tif")
# Same, but with non-byte data type (help testing the non-SSE2 code path)
- src_ds = gdal.Open('data/stefan_full_rgba_photometric_rgb.tif')
-
- tmp_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/ovr32_float.tif', src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, gdal.GDT_Float32)
+ src_ds = gdal.Open("data/stefan_full_rgba_photometric_rgb.tif")
+
+ tmp_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/ovr32_float.tif",
+ src_ds.RasterXSize,
+ src_ds.RasterYSize,
+ src_ds.RasterCount,
+ gdal.GDT_Float32,
+ )
src_data = src_ds.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize)
- tmp_ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, src_data, buf_type=gdal.GDT_Byte)
- tmp_ds.BuildOverviews('cubic', overviewlist=[2])
-
- tmp2_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/ovr32_byte.tif', tmp_ds.RasterXSize, tmp_ds.RasterYSize, tmp_ds.RasterCount)
- tmp2_ds.BuildOverviews('NONE', overviewlist=[2])
+ tmp_ds.WriteRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, src_data, buf_type=gdal.GDT_Byte
+ )
+ tmp_ds.BuildOverviews("cubic", overviewlist=[2])
+
+ tmp2_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/ovr32_byte.tif",
+ tmp_ds.RasterXSize,
+ tmp_ds.RasterYSize,
+ tmp_ds.RasterCount,
+ )
+ tmp2_ds.BuildOverviews("NONE", overviewlist=[2])
tmp2_ovr_ds = tmp2_ds.GetRasterBand(1).GetOverview(0).GetDataset()
tmp_ovr_ds = tmp_ds.GetRasterBand(1).GetOverview(0).GetDataset()
- src_data = tmp_ovr_ds.ReadRaster(0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, buf_type=gdal.GDT_Byte)
- tmp2_ovr_ds.WriteRaster(0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, src_data)
+ src_data = tmp_ovr_ds.ReadRaster(
+ 0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, buf_type=gdal.GDT_Byte
+ )
+ tmp2_ovr_ds.WriteRaster(
+ 0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, src_data
+ )
cs = tmp2_ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs = 21168
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (cs, expected_cs)
src_ds = None
tmp_ds = None
tmp2_ds = None
- gdaltest.tiff_drv.Delete('/vsimem/ovr32_float.tif')
- gdaltest.tiff_drv.Delete('/vsimem/ovr32_byte.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/ovr32_float.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/ovr32_byte.tif")
# Test GDALRegenerateOverviewsMultiBand
- shutil.copyfile('data/stefan_full_rgba_photometric_rgb.tif', 'tmp/ovr32.tif')
+ shutil.copyfile("data/stefan_full_rgba_photometric_rgb.tif", "tmp/ovr32.tif")
- ds = gdal.Open('tmp/ovr32.tif')
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- with gdaltest.config_option('INTERLEAVE_OVERVIEW', 'PIXEL'):
- ds.BuildOverviews('cubic', overviewlist=[2, 5])
+ ds = gdal.Open("tmp/ovr32.tif")
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ with gdaltest.config_option("INTERLEAVE_OVERVIEW", "PIXEL"):
+ ds.BuildOverviews("cubic", overviewlist=[2, 5])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs = 21168
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (cs, expected_cs)
cs = ds.GetRasterBand(3).GetOverview(1).Checksum()
expected_cs = 1851
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 1.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 1." % (cs, expected_cs)
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr32.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr32.tif")
# 3 bands + alpha
- shutil.copyfile('data/stefan_full_rgba.tif', 'tmp/ovr32.tif')
+ shutil.copyfile("data/stefan_full_rgba.tif", "tmp/ovr32.tif")
- ds = gdal.Open('tmp/ovr32.tif', gdal.GA_Update)
- ds.BuildOverviews('cubic', overviewlist=[2, 5])
+ ds = gdal.Open("tmp/ovr32.tif", gdal.GA_Update)
+ ds.BuildOverviews("cubic", overviewlist=[2, 5])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs_band1_overview0 = 21296
- assert cs == expected_cs_band1_overview0, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs_band1_overview0))
+ assert (
+ cs == expected_cs_band1_overview0
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (
+ cs,
+ expected_cs_band1_overview0,
+ )
cs = ds.GetRasterBand(3).GetOverview(1).Checksum()
expected_cs_band3_overview1 = 1994
- assert cs == expected_cs_band3_overview1, \
- ('Checksum is %d. Expected checksum is %d for overview 1.' % (cs, expected_cs_band3_overview1))
+ assert (
+ cs == expected_cs_band3_overview1
+ ), "Checksum is %d. Expected checksum is %d for overview 1." % (
+ cs,
+ expected_cs_band3_overview1,
+ )
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr32.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr32.tif")
# Same, but with non-byte data type (help testing the non-SSE2 code path)
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
-
- tmp_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/ovr32_float.tif', src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, gdal.GDT_Float32)
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
+
+ tmp_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/ovr32_float.tif",
+ src_ds.RasterXSize,
+ src_ds.RasterYSize,
+ src_ds.RasterCount,
+ gdal.GDT_Float32,
+ )
src_data = src_ds.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize)
- tmp_ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, src_data, buf_type=gdal.GDT_Byte)
- tmp_ds.BuildOverviews('cubic', overviewlist=[2])
-
- tmp2_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/ovr32_byte.tif', tmp_ds.RasterXSize, tmp_ds.RasterYSize, tmp_ds.RasterCount)
- tmp2_ds.BuildOverviews('NONE', overviewlist=[2])
+ tmp_ds.WriteRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, src_data, buf_type=gdal.GDT_Byte
+ )
+ tmp_ds.BuildOverviews("cubic", overviewlist=[2])
+
+ tmp2_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/ovr32_byte.tif",
+ tmp_ds.RasterXSize,
+ tmp_ds.RasterYSize,
+ tmp_ds.RasterCount,
+ )
+ tmp2_ds.BuildOverviews("NONE", overviewlist=[2])
tmp2_ovr_ds = tmp2_ds.GetRasterBand(1).GetOverview(0).GetDataset()
tmp_ovr_ds = tmp_ds.GetRasterBand(1).GetOverview(0).GetDataset()
- src_data = tmp_ovr_ds.ReadRaster(0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, buf_type=gdal.GDT_Byte)
- tmp2_ovr_ds.WriteRaster(0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, src_data)
+ src_data = tmp_ovr_ds.ReadRaster(
+ 0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, buf_type=gdal.GDT_Byte
+ )
+ tmp2_ovr_ds.WriteRaster(
+ 0, 0, tmp_ovr_ds.RasterXSize, tmp_ovr_ds.RasterYSize, src_data
+ )
cs = tmp2_ds.GetRasterBand(1).GetOverview(0).Checksum()
# expected_cs = 21656
expected_cs = 21168
- assert cs == expected_cs, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs))
+ assert (
+ cs == expected_cs
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (cs, expected_cs)
src_ds = None
tmp_ds = None
tmp2_ds = None
- gdaltest.tiff_drv.Delete('/vsimem/ovr32_float.tif')
- gdaltest.tiff_drv.Delete('/vsimem/ovr32_byte.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/ovr32_float.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/ovr32_byte.tif")
# Same test with a compressed dataset
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
- ds = gdal.GetDriverByName('GTiff').CreateCopy('tmp/ovr32.tif', src_ds, options=['COMPRESS=DEFLATE'])
- ds.BuildOverviews('cubic', overviewlist=[2, 5])
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ "tmp/ovr32.tif", src_ds, options=["COMPRESS=DEFLATE"]
+ )
+ ds.BuildOverviews("cubic", overviewlist=[2, 5])
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
- assert cs == expected_cs_band1_overview0, \
- ('Checksum is %d. Expected checksum is %d for overview 0.' % (cs, expected_cs_band1_overview0))
+ assert (
+ cs == expected_cs_band1_overview0
+ ), "Checksum is %d. Expected checksum is %d for overview 0." % (
+ cs,
+ expected_cs_band1_overview0,
+ )
cs = ds.GetRasterBand(3).GetOverview(1).Checksum()
- assert cs == expected_cs_band3_overview1, \
- ('Checksum is %d. Expected checksum is %d for overview 1.' % (cs, expected_cs_band3_overview1))
+ assert (
+ cs == expected_cs_band3_overview1
+ ), "Checksum is %d. Expected checksum is %d for overview 1." % (
+ cs,
+ expected_cs_band3_overview1,
+ )
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr32.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr32.tif")
###############################################################################
# Test creation of overviews on a 1x1 dataset (fix for #3069)
+
def test_tiff_ovr_33(both_endian):
try:
- os.remove('tmp/ovr33.tif.ovr')
+ os.remove("tmp/ovr33.tif.ovr")
except OSError:
pass
- ds = gdaltest.tiff_drv.Create('tmp/ovr33.tif', 1, 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr33.tif", 1, 1, 1)
ds = None
- ds = gdal.Open('tmp/ovr33.tif')
- ds.BuildOverviews('NEAREST', overviewlist=[2, 4])
+ ds = gdal.Open("tmp/ovr33.tif")
+ ds.BuildOverviews("NEAREST", overviewlist=[2, 4])
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr33.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr33.tif")
###############################################################################
# Confirm that overviews are used on a Band.RasterIO().
+
def test_tiff_ovr_34(both_endian):
- ds_in = gdal.Open('data/byte.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr34.tif', ds_in)
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds_in = gdal.Open("data/byte.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/ovr34.tif", ds_in)
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds.GetRasterBand(1).GetOverview(0).Fill(32.0)
ds = None
ds_in = None
- ds = gdal.Open('tmp/ovr34.tif')
+ ds = gdal.Open("tmp/ovr34.tif")
data = ds.GetRasterBand(1).ReadRaster(0, 0, 20, 20, buf_xsize=5, buf_ysize=5)
ds = None
- if data != ' '.encode('ascii'):
- print('[%s]' % data)
- pytest.fail('did not get expected cleared overview.')
+ if data != " ".encode("ascii"):
+ print("[%s]" % data)
+ pytest.fail("did not get expected cleared overview.")
+
+ gdaltest.tiff_drv.Delete("tmp/ovr34.tif")
- gdaltest.tiff_drv.Delete('tmp/ovr34.tif')
###############################################################################
# Confirm that overviews are used on a Band.RasterIO().
@@ -1118,22 +1273,23 @@ def test_tiff_ovr_34(both_endian):
def test_tiff_ovr_35(both_endian):
- ds_in = gdal.Open('data/byte.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr35.tif', ds_in)
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds_in = gdal.Open("data/byte.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/ovr35.tif", ds_in)
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds.GetRasterBand(1).GetOverview(0).Fill(32.0)
ds = None
ds_in = None
- ds = gdal.Open('tmp/ovr35.tif')
+ ds = gdal.Open("tmp/ovr35.tif")
data = ds.ReadRaster(0, 0, 20, 20, buf_xsize=5, buf_ysize=5, band_list=[1])
ds = None
- if data != ' '.encode('ascii'):
- print('[%s]' % data)
- pytest.fail('did not get expected cleared overview.')
+ if data != " ".encode("ascii"):
+ print("[%s]" % data)
+ pytest.fail("did not get expected cleared overview.")
+
+ gdaltest.tiff_drv.Delete("tmp/ovr35.tif")
- gdaltest.tiff_drv.Delete('tmp/ovr35.tif')
###############################################################################
# Confirm that overviews are used on a Band.RasterIO() when using BlockBasedRasterIO() (#3124)
@@ -1141,37 +1297,39 @@ def test_tiff_ovr_35(both_endian):
def test_tiff_ovr_36(both_endian):
- with gdaltest.config_option('GDAL_FORCE_CACHING', 'YES'):
+ with gdaltest.config_option("GDAL_FORCE_CACHING", "YES"):
ret = test_tiff_ovr_35(both_endian)
return ret
+
###############################################################################
# Test PREDICTOR_OVERVIEW=2 option. (#3414)
def test_tiff_ovr_37(both_endian):
- shutil.copy('../gdrivers/data/n43.dt0', 'tmp/ovr37.dt0')
+ shutil.copy("../gdrivers/data/n43.dt0", "tmp/ovr37.dt0")
- ds = gdal.Open('tmp/ovr37.dt0')
+ ds = gdal.Open("tmp/ovr37.dt0")
- assert ds is not None, 'Failed to open test dataset.'
+ assert ds is not None, "Failed to open test dataset."
- with gdaltest.config_option('PREDICTOR_OVERVIEW', '2'):
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'LZW'):
- ds.BuildOverviews('NEAR', overviewlist=[2])
+ with gdaltest.config_option("PREDICTOR_OVERVIEW", "2"):
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "LZW"):
+ ds.BuildOverviews("NEAR", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr37.dt0')
+ ds = gdal.Open("tmp/ovr37.dt0")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
- assert cs == 45378, 'got wrong overview checksum.'
+ assert cs == 45378, "got wrong overview checksum."
ds = None
- predictor2_size = os.stat('tmp/ovr37.dt0.ovr')[stat.ST_SIZE]
+ predictor2_size = os.stat("tmp/ovr37.dt0.ovr")[stat.ST_SIZE]
# 3789 : on little-endian host
# 3738 : on big-endian host
- assert predictor2_size in (3789, 3738), 'did not get expected file size.'
+ assert predictor2_size in (3789, 3738), "did not get expected file size."
+
###############################################################################
# Test that the predictor flag gets well propagated to internal overviews
@@ -1179,14 +1337,17 @@ def test_tiff_ovr_37(both_endian):
def test_tiff_ovr_38(both_endian):
- src_ds = gdal.Open('../gdrivers/data/n43.dt0')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/ovr38.tif', src_ds, options=['COMPRESS=LZW', 'PREDICTOR=2'])
+ src_ds = gdal.Open("../gdrivers/data/n43.dt0")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/ovr38.tif", src_ds, options=["COMPRESS=LZW", "PREDICTOR=2"]
+ )
ds.BuildOverviews(overviewlist=[2, 4])
ds = None
- file_size = os.stat('tmp/ovr38.tif')[stat.ST_SIZE]
+ file_size = os.stat("tmp/ovr38.tif")[stat.ST_SIZE]
+
+ assert file_size <= 21000, "did not get expected file size."
- assert file_size <= 21000, 'did not get expected file size.'
###############################################################################
# Test external overviews on all datatypes
@@ -1194,35 +1355,41 @@ def test_tiff_ovr_38(both_endian):
def test_tiff_ovr_39(both_endian):
- for datatype in [gdal.GDT_Byte,
- gdal.GDT_Int16,
- gdal.GDT_UInt16,
- gdal.GDT_Int32,
- gdal.GDT_UInt32,
- gdal.GDT_Float32,
- gdal.GDT_Float64,
- gdal.GDT_CInt16,
- gdal.GDT_CInt32,
- gdal.GDT_CFloat32,
- gdal.GDT_CFloat64]:
-
- gdal.Translate('tmp/ovr39.tif', 'data/byte.tif', options='-ot ' + gdal.GetDataTypeName(datatype))
+ for datatype in [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ gdal.GDT_CInt16,
+ gdal.GDT_CInt32,
+ gdal.GDT_CFloat32,
+ gdal.GDT_CFloat64,
+ ]:
+
+ gdal.Translate(
+ "tmp/ovr39.tif",
+ "data/byte.tif",
+ options="-ot " + gdal.GetDataTypeName(datatype),
+ )
try:
- os.remove('tmp/ovr39.tif.ovr')
+ os.remove("tmp/ovr39.tif.ovr")
except OSError:
pass
- ds = gdal.Open('tmp/ovr39.tif')
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.Open("tmp/ovr39.tif")
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr39.tif.ovr')
+ ds = gdal.Open("tmp/ovr39.tif.ovr")
ovr_datatype = ds.GetRasterBand(1).DataType
ds = None
- assert datatype == ovr_datatype, 'did not get expected datatype'
+ assert datatype == ovr_datatype, "did not get expected datatype"
- ds = gdal.Open('tmp/ovr39.tif')
+ ds = gdal.Open("tmp/ovr39.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
ds = None
@@ -1231,8 +1398,11 @@ def test_tiff_ovr_39(both_endian):
else:
expected_cs = 1087
- assert cs == expected_cs, \
- ('did not get expected checksum for datatype %s' % gdal.GetDataTypeName(datatype))
+ assert (
+ cs == expected_cs
+ ), "did not get expected checksum for datatype %s" % gdal.GetDataTypeName(
+ datatype
+ )
###############################################################################
@@ -1241,21 +1411,22 @@ def test_tiff_ovr_39(both_endian):
def test_tiff_ovr_40(both_endian):
- shutil.copyfile('data/oddsize_1bit2b.tif', 'tmp/ovr40.tif')
+ shutil.copyfile("data/oddsize_1bit2b.tif", "tmp/ovr40.tif")
- wrk_ds = gdal.Open('tmp/ovr40.tif')
+ wrk_ds = gdal.Open("tmp/ovr40.tif")
- assert wrk_ds is not None, 'Failed to open test dataset.'
+ assert wrk_ds is not None, "Failed to open test dataset."
- wrk_ds.BuildOverviews('AVERAGE_BIT2GRAYSCALE', overviewlist=[2, 4])
+ wrk_ds.BuildOverviews("AVERAGE_BIT2GRAYSCALE", overviewlist=[2, 4])
wrk_ds = None
- wrk_ds = gdal.Open('tmp/ovr40.tif')
+ wrk_ds = gdal.Open("tmp/ovr40.tif")
ovband = wrk_ds.GetRasterBand(1).GetOverview(1)
md = ovband.GetMetadata()
- assert 'RESAMPLING' in md and md['RESAMPLING'] == 'AVERAGE_BIT2GRAYSCALE', \
- 'Did not get expected RESAMPLING metadata.'
+ assert (
+ "RESAMPLING" in md and md["RESAMPLING"] == "AVERAGE_BIT2GRAYSCALE"
+ ), "Did not get expected RESAMPLING metadata."
# compute average value of overview band image data.
ovimage = ovband.ReadRaster(0, 0, ovband.XSize, ovband.YSize)
@@ -1264,46 +1435,53 @@ def test_tiff_ovr_40(both_endian):
total = float(sum(ovimage))
average = total / pix_count
exp_average = 154.0992
- assert average == pytest.approx(exp_average, abs=0.1), 'got wrong average for overview image'
+ assert average == pytest.approx(
+ exp_average, abs=0.1
+ ), "got wrong average for overview image"
# Read base band as overview resolution and verify we aren't getting
# the grayscale image.
frband = wrk_ds.GetRasterBand(1)
- ovimage = frband.ReadRaster(0, 0, frband.XSize, frband.YSize,
- ovband.XSize, ovband.YSize)
+ ovimage = frband.ReadRaster(
+ 0, 0, frband.XSize, frband.YSize, ovband.XSize, ovband.YSize
+ )
pix_count = ovband.XSize * ovband.YSize
total = float(sum(ovimage))
average = total / pix_count
exp_average = 0.6096
- assert average == pytest.approx(exp_average, abs=0.01), 'got wrong average for downsampled image'
+ assert average == pytest.approx(
+ exp_average, abs=0.01
+ ), "got wrong average for downsampled image"
wrk_ds = None
+
###############################################################################
# Test external overviews on 1 bit datasets with NEAREST
def test_tiff_ovr_41(both_endian):
- shutil.copyfile('data/oddsize_1bit2b.tif', 'tmp/ovr41.tif')
+ shutil.copyfile("data/oddsize_1bit2b.tif", "tmp/ovr41.tif")
- ds = gdal.Open('tmp/ovr41.tif')
+ ds = gdal.Open("tmp/ovr41.tif")
# data = wrk_ds.GetRasterBand(1).ReadRaster(0,0,99,99,50,50)
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
# ds = gdaltest.tiff_drv.Create('tmp/ovr41.tif.handmade.ovr',50,50,1,options=['NBITS=1'])
# ds.GetRasterBand(1).WriteRaster(0,0,50,50,data)
# ds = None
- ds = gdal.Open('tmp/ovr41.tif')
+ ds = gdal.Open("tmp/ovr41.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
ds = None
- assert cs == 1496, 'did not get expected checksum'
+ assert cs == 1496, "did not get expected checksum"
+
###############################################################################
# Test external overviews on dataset with color table
@@ -1317,73 +1495,79 @@ def test_tiff_ovr_42(both_endian):
for i, data in enumerate(ct_data):
ct.SetColorEntry(i, data)
- ds = gdaltest.tiff_drv.Create('tmp/ovr42.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr42.tif", 1, 1)
ds.GetRasterBand(1).SetRasterColorTable(ct)
ds = None
- ds = gdal.Open('tmp/ovr42.tif')
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.Open("tmp/ovr42.tif")
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr42.tif.ovr')
+ ds = gdal.Open("tmp/ovr42.tif.ovr")
ct2 = ds.GetRasterBand(1).GetRasterColorTable()
- assert (ct2.GetCount() == 256 and \
- ct2.GetColorEntry(0) == (255, 0, 0, 255) and \
- ct2.GetColorEntry(1) == (0, 255, 0, 255) and \
- ct2.GetColorEntry(2) == (0, 0, 255, 255) and \
- ct2.GetColorEntry(3) == (255, 255, 255, 255)), 'Wrong color table entry.'
+ assert (
+ ct2.GetCount() == 256
+ and ct2.GetColorEntry(0) == (255, 0, 0, 255)
+ and ct2.GetColorEntry(1) == (0, 255, 0, 255)
+ and ct2.GetColorEntry(2) == (0, 0, 255, 255)
+ and ct2.GetColorEntry(3) == (255, 255, 255, 255)
+ ), "Wrong color table entry."
ds = None
+
###############################################################################
# Make sure that 16bit overviews with JPEG compression are handled using 12-bit
# jpeg-in-tiff (#3539)
-@pytest.mark.skipif('SKIP_TIFF_JPEG12' in os.environ, reason='Crashes on build-windows-msys2-mingw')
+@pytest.mark.skipif(
+ "SKIP_TIFF_JPEG12" in os.environ, reason="Crashes on build-windows-msys2-mingw"
+)
def test_tiff_ovr_43(both_endian):
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- with gdaltest.config_option('CPL_ACCUM_ERROR_MSG', 'ON'):
+ with gdaltest.config_option("CPL_ACCUM_ERROR_MSG", "ON"):
gdal.ErrorReset()
with gdaltest.error_handler():
try:
- ds = gdal.Open('data/mandrilmini_12bitjpeg.tif')
+ ds = gdal.Open("data/mandrilmini_12bitjpeg.tif")
ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1)
except:
ds = None
- if gdal.GetLastErrorMsg().find('Unsupported JPEG data precision 12') != -1:
- pytest.skip('12bit jpeg not available')
+ if gdal.GetLastErrorMsg().find("Unsupported JPEG data precision 12") != -1:
+ pytest.skip("12bit jpeg not available")
- ds = gdaltest.tiff_drv.Create('tmp/ovr43.tif', 16, 16, 1, gdal.GDT_UInt16)
+ ds = gdaltest.tiff_drv.Create("tmp/ovr43.tif", 16, 16, 1, gdal.GDT_UInt16)
ds.GetRasterBand(1).Fill(4000)
ds = None
try:
- os.remove('tmp/ovr43.tif.ovr')
+ os.remove("tmp/ovr43.tif.ovr")
except OSError:
pass
- ds = gdal.Open('tmp/ovr43.tif')
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'JPEG'):
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.Open("tmp/ovr43.tif")
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "JPEG"):
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr43.tif.ovr')
- md = ds.GetRasterBand(1).GetMetadata('IMAGE_STRUCTURE')
+ ds = gdal.Open("tmp/ovr43.tif.ovr")
+ md = ds.GetRasterBand(1).GetMetadata("IMAGE_STRUCTURE")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert 'NBITS' in md and md['NBITS'] == '12', 'did not get expected NBITS'
+ assert "NBITS" in md and md["NBITS"] == "12", "did not get expected NBITS"
- assert cs == 642, 'did not get expected checksum'
+ assert cs == 642, "did not get expected checksum"
+
+ gdaltest.tiff_drv.Delete("tmp/ovr43.tif")
- gdaltest.tiff_drv.Delete('tmp/ovr43.tif')
###############################################################################
# Test that we can change overview block size through GDAL_TIFF_OVR_BLOCKSIZE configuration
@@ -1392,23 +1576,24 @@ def test_tiff_ovr_43(both_endian):
def test_tiff_ovr_44(both_endian):
- shutil.copyfile('data/byte.tif', 'tmp/ovr44.tif')
- with gdaltest.config_option('GDAL_TIFF_OVR_BLOCKSIZE', '256'):
- ds = gdal.Open('tmp/ovr44.tif', gdal.GA_Update)
+ shutil.copyfile("data/byte.tif", "tmp/ovr44.tif")
+ with gdaltest.config_option("GDAL_TIFF_OVR_BLOCKSIZE", "256"):
+ ds = gdal.Open("tmp/ovr44.tif", gdal.GA_Update)
ds.BuildOverviews(overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr44.tif')
+ ds = gdal.Open("tmp/ovr44.tif")
ovr_band = ds.GetRasterBand(1).GetOverview(0)
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ovr_band.GetBlockSize()
- assert blockx == 256 and blocky == 256, 'did not get expected block size'
+ assert blockx == 256 and blocky == 256, "did not get expected block size"
cs = ovr_band.Checksum()
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr44.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr44.tif")
+
+ assert cs == 1087, "did not get expected checksum"
- assert cs == 1087, 'did not get expected checksum'
###############################################################################
# Same as tiff_ovr_44, but with external overviews
@@ -1416,37 +1601,43 @@ def test_tiff_ovr_44(both_endian):
def test_tiff_ovr_45(both_endian):
- shutil.copyfile('data/byte.tif', 'tmp/ovr45.tif')
- with gdaltest.config_option('GDAL_TIFF_OVR_BLOCKSIZE', '256'):
- ds = gdal.Open('tmp/ovr45.tif', gdal.GA_ReadOnly)
+ shutil.copyfile("data/byte.tif", "tmp/ovr45.tif")
+ with gdaltest.config_option("GDAL_TIFF_OVR_BLOCKSIZE", "256"):
+ ds = gdal.Open("tmp/ovr45.tif", gdal.GA_ReadOnly)
ds.BuildOverviews(overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/ovr45.tif.ovr')
+ ds = gdal.Open("tmp/ovr45.tif.ovr")
ovr_band = ds.GetRasterBand(1)
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(blockx, blocky) = ovr_band.GetBlockSize()
- assert blockx == 256 and blocky == 256, 'did not get expected block size'
+ assert blockx == 256 and blocky == 256, "did not get expected block size"
cs = ovr_band.Checksum()
ds = None
- gdaltest.tiff_drv.Delete('tmp/ovr45.tif')
+ gdaltest.tiff_drv.Delete("tmp/ovr45.tif")
+
+ assert cs == 1087, "did not get expected checksum"
- assert cs == 1087, 'did not get expected checksum'
###############################################################################
# Test that SPARSE_OK creation option propagates on internal overviews
-@pytest.mark.parametrize("apply_sparse", [False,True])
+@pytest.mark.parametrize("apply_sparse", [False, True])
def test_tiff_ovr_propagate_sparse_ok_creation_option(apply_sparse):
- filename = '/vsimem/test_tiff_ovr_propagate_sparse_ok_creation_option.tif'
- ds = gdaltest.tiff_drv.Create(filename, 100, 100, options=['SPARSE_OK=YES'] if apply_sparse else [])
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ filename = "/vsimem/test_tiff_ovr_propagate_sparse_ok_creation_option.tif"
+ ds = gdaltest.tiff_drv.Create(
+ filename, 100, 100, options=["SPARSE_OK=YES"] if apply_sparse else []
+ )
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
- has_block = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is not None
+ has_block = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
if apply_sparse:
assert not has_block
else:
@@ -1455,20 +1646,28 @@ def test_tiff_ovr_propagate_sparse_ok_creation_option(apply_sparse):
gdaltest.tiff_drv.Delete(filename)
+
###############################################################################
# Test that SPARSE_OK open option propagates on internal overviews
-@pytest.mark.parametrize("apply_sparse", [False,True])
+@pytest.mark.parametrize("apply_sparse", [False, True])
def test_tiff_ovr_propagate_sparse_ok_open_option_internal(apply_sparse):
- filename = '/vsimem/test_tiff_ovr_propagate_sparse_ok_open_option_internal.tif'
+ filename = "/vsimem/test_tiff_ovr_propagate_sparse_ok_open_option_internal.tif"
gdaltest.tiff_drv.Create(filename, 100, 100)
- ds = gdal.OpenEx(filename, gdal.OF_UPDATE | gdal.OF_RASTER, open_options=['SPARSE_OK=YES'] if apply_sparse else [])
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.OpenEx(
+ filename,
+ gdal.OF_UPDATE | gdal.OF_RASTER,
+ open_options=["SPARSE_OK=YES"] if apply_sparse else [],
+ )
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
- has_block = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is not None
+ has_block = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
if apply_sparse:
assert not has_block
else:
@@ -1477,20 +1676,24 @@ def test_tiff_ovr_propagate_sparse_ok_open_option_internal(apply_sparse):
gdaltest.tiff_drv.Delete(filename)
+
###############################################################################
# Test that SPARSE_OK open option propagates on internal overviews
-@pytest.mark.parametrize("apply_sparse", [False,True])
+@pytest.mark.parametrize("apply_sparse", [False, True])
def test_tiff_ovr_propagate_sparse_ok_open_option_external(apply_sparse):
- filename = '/vsimem/test_tiff_ovr_propagate_sparse_ok_open_option_external.tif'
+ filename = "/vsimem/test_tiff_ovr_propagate_sparse_ok_open_option_external.tif"
gdaltest.tiff_drv.Create(filename, 100, 100)
- ds = gdal.OpenEx(filename, open_options = ['SPARSE_OK=YES'] if apply_sparse else [])
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.OpenEx(filename, open_options=["SPARSE_OK=YES"] if apply_sparse else [])
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
- has_block = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is not None
+ has_block = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
if apply_sparse:
assert not has_block
else:
@@ -1499,21 +1702,25 @@ def test_tiff_ovr_propagate_sparse_ok_open_option_external(apply_sparse):
gdaltest.tiff_drv.Delete(filename)
+
###############################################################################
# Test SPARSE_OK_OVERVIEW on internal overview
-@pytest.mark.parametrize("apply_sparse", [False,True])
+@pytest.mark.parametrize("apply_sparse", [False, True])
def test_tiff_ovr_sparse_ok_internal_overview(apply_sparse):
- filename = '/vsimem/test_tiff_ovr_sparse_ok_internal_overview.tif'
+ filename = "/vsimem/test_tiff_ovr_sparse_ok_internal_overview.tif"
gdaltest.tiff_drv.Create(filename, 100, 100)
ds = gdal.Open(filename, gdal.GA_Update)
- with gdaltest.config_options({'SPARSE_OK_OVERVIEW': 'YES'} if apply_sparse else {}):
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ with gdaltest.config_options({"SPARSE_OK_OVERVIEW": "YES"} if apply_sparse else {}):
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
- has_block = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is not None
+ has_block = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
if apply_sparse:
assert not has_block
else:
@@ -1522,21 +1729,25 @@ def test_tiff_ovr_sparse_ok_internal_overview(apply_sparse):
gdaltest.tiff_drv.Delete(filename)
+
###############################################################################
# Test SPARSE_OK_OVERVIEW on external overview
-@pytest.mark.parametrize("apply_sparse", [False,True])
+@pytest.mark.parametrize("apply_sparse", [False, True])
def test_tiff_ovr_sparse_ok_external_overview(apply_sparse):
- filename = '/vsimem/test_tiff_ovr_sparse_ok_external_overview.tif'
+ filename = "/vsimem/test_tiff_ovr_sparse_ok_external_overview.tif"
gdaltest.tiff_drv.Create(filename, 100, 100)
ds = gdal.Open(filename)
- with gdaltest.config_options({'SPARSE_OK_OVERVIEW': 'YES'} if apply_sparse else {}):
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ with gdaltest.config_options({"SPARSE_OK_OVERVIEW": "YES"} if apply_sparse else {}):
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
- has_block = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is not None
+ has_block = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ is not None
+ )
if apply_sparse:
assert not has_block
else:
@@ -1556,86 +1767,103 @@ def test_tiff_ovr_46():
pytest.skip()
# Test NEAREST
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test AVERAGE in optimized case (x2 reduction)
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test AVERAGE in un-optimized case (x3 reduction)
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('AVERAGE', overviewlist=[3])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("AVERAGE", overviewlist=[3])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test AVERAGE in un-optimized case (color table)
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 0, 0))
ds.GetRasterBand(1).SetRasterColorTable(ct)
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test GAUSS
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('GAUSS', overviewlist=[2])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("GAUSS", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test GAUSS with color table
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 0, 0))
ds.GetRasterBand(1).SetRasterColorTable(ct)
- ds.BuildOverviews('GAUSS', overviewlist=[2])
+ ds.BuildOverviews("GAUSS", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test MODE
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('MODE', overviewlist=[2])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("MODE", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
# Test CUBIC
- with gdaltest.config_option('GTIFF_DONT_WRITE_BLOCKS', 'YES'):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_ovr_46.tif', 50000, 50000, options=['SPARSE_OK=YES'])
- ds.BuildOverviews('CUBIC', overviewlist=[2])
+ with gdaltest.config_option("GTIFF_DONT_WRITE_BLOCKS", "YES"):
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_ovr_46.tif", 50000, 50000, options=["SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("CUBIC", overviewlist=[2])
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_ovr_46.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_ovr_46.tif")
+
###############################################################################
# Test workaround with libtiff 3.X when creating interleaved overviews
def test_tiff_ovr_47(both_endian):
- mem_drv = gdal.GetDriverByName('MEM')
- mem_ds = mem_drv.Create('', 852, 549, 3)
+ mem_drv = gdal.GetDriverByName("MEM")
+ mem_ds = mem_drv.Create("", 852, 549, 3)
for i in range(1, 4):
band = mem_ds.GetRasterBand(i)
@@ -1653,7 +1881,8 @@ def test_tiff_ovr_47(both_endian):
gdal.Unlink("/vsimem/tiff_ovr_47.tif")
- assert cs == 35721, 'did not get expected checksum'
+ assert cs == 35721, "did not get expected checksum"
+
###############################################################################
# Test that we don't average 0's in alpha band
@@ -1661,25 +1890,25 @@ def test_tiff_ovr_47(both_endian):
def test_tiff_ovr_48(both_endian):
- shutil.copy('data/rgba_with_alpha_0_and_255.tif', 'tmp')
- ds = gdal.Open('tmp/rgba_with_alpha_0_and_255.tif')
- ds.BuildOverviews('AVERAGE', [2])
+ shutil.copy("data/rgba_with_alpha_0_and_255.tif", "tmp")
+ ds = gdal.Open("tmp/rgba_with_alpha_0_and_255.tif")
+ ds.BuildOverviews("AVERAGE", [2])
ds = None
- ds = gdal.Open('tmp/rgba_with_alpha_0_and_255.tif.ovr')
+ ds = gdal.Open("tmp/rgba_with_alpha_0_and_255.tif.ovr")
for i in range(4):
cs = ds.GetRasterBand(i + 1).Checksum()
assert cs == 3, i
# But if we define GDAL_OVR_PROPAGATE_NODATA, a nodata value in source
# samples will cause the target pixel to be zeroed.
- shutil.copy('data/rgba_with_alpha_0_and_255.tif', 'tmp')
- ds = gdal.Open('tmp/rgba_with_alpha_0_and_255.tif')
- with gdaltest.config_option('GDAL_OVR_PROPAGATE_NODATA', 'YES'):
- ds.BuildOverviews('AVERAGE', [2])
+ shutil.copy("data/rgba_with_alpha_0_and_255.tif", "tmp")
+ ds = gdal.Open("tmp/rgba_with_alpha_0_and_255.tif")
+ with gdaltest.config_option("GDAL_OVR_PROPAGATE_NODATA", "YES"):
+ ds.BuildOverviews("AVERAGE", [2])
ds = None
- ds = gdal.Open('tmp/rgba_with_alpha_0_and_255.tif.ovr')
+ ds = gdal.Open("tmp/rgba_with_alpha_0_and_255.tif.ovr")
for i in range(4):
cs = ds.GetRasterBand(i + 1).Checksum()
assert cs == 0, i
@@ -1691,21 +1920,22 @@ def test_tiff_ovr_48(both_endian):
def test_tiff_ovr_49(both_endian):
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_ovr_49.tif', 1023, 1023, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_ovr_49.tif", 1023, 1023, 1)
ds.GetRasterBand(1).Fill(0)
- c = '\xFF'
+ c = "\xFF"
# Fails on 1.11.1 with col = 255 or col = 1019
col = 1019
ds.GetRasterBand(1).WriteRaster(col, 0, 1, 1023, c, 1, 1)
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_49.tif')
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds = gdal.Open("/vsimem/tiff_ovr_49.tif")
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_49.tif.ovr')
+ ds = gdal.Open("/vsimem/tiff_ovr_49.tif.ovr")
assert ds.GetRasterBand(1).Checksum() != 0
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_49.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_49.tif")
+
###############################################################################
# Test overviews when X dimension is smaller than Y (#5794)
@@ -1713,14 +1943,16 @@ def test_tiff_ovr_49(both_endian):
def test_tiff_ovr_50(both_endian):
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_ovr_50.tif', 6, 8192, 3,
- options=['COMPRESS=DEFLATE'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_ovr_50.tif", 6, 8192, 3, options=["COMPRESS=DEFLATE"]
+ )
ds.GetRasterBand(1).Fill(255)
# We just check that it doesn't crash
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4, 8, 16, 32])
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4, 8, 16, 32])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4, 8, 16, 32])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4, 8, 16, 32])
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_50.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_50.tif")
+
###############################################################################
# Test average overview on a color palette with nodata values (#6371)
@@ -1728,20 +1960,21 @@ def test_tiff_ovr_50(both_endian):
def test_tiff_ovr_51():
- src_ds = gdal.Open('data/stefan_full_rgba_pct32.png')
+ src_ds = gdal.Open("data/stefan_full_rgba_pct32.png")
if src_ds is None:
pytest.skip()
- ds = gdal.GetDriverByName('PNG').CreateCopy('/vsimem/tiff_ovr_51.png', src_ds)
- ds.BuildOverviews('AVERAGE', [2])
+ ds = gdal.GetDriverByName("PNG").CreateCopy("/vsimem/tiff_ovr_51.png", src_ds)
+ ds.BuildOverviews("AVERAGE", [2])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_51.png.ovr')
+ ds = gdal.Open("/vsimem/tiff_ovr_51.png.ovr")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 24518
ds = None
- gdal.GetDriverByName('PNG').Delete('/vsimem/tiff_ovr_51.png')
+ gdal.GetDriverByName("PNG").Delete("/vsimem/tiff_ovr_51.png")
+
###############################################################################
# Test unsorted external overview building (#6617)
@@ -1749,44 +1982,45 @@ def test_tiff_ovr_51():
def test_tiff_ovr_52():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
if src_ds is None:
pytest.skip()
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_52.tif', src_ds)
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- with gdaltest.config_option('INTERLEAVE_OVERVIEW', 'PIXEL'):
- ds = gdal.Open('/vsimem/tiff_ovr_52.tif')
- ds.BuildOverviews('NEAR', [4])
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_52.tif", src_ds)
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ with gdaltest.config_option("INTERLEAVE_OVERVIEW", "PIXEL"):
+ ds = gdal.Open("/vsimem/tiff_ovr_52.tif")
+ ds.BuildOverviews("NEAR", [4])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_52.tif')
- ds.BuildOverviews('NEAR', [2])
+ ds = gdal.Open("/vsimem/tiff_ovr_52.tif")
+ ds.BuildOverviews("NEAR", [2])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_52.tif')
+ ds = gdal.Open("/vsimem/tiff_ovr_52.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 328
cs = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs == 1087
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_52.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_52.tif")
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_52.tif', src_ds)
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- with gdaltest.config_option('INTERLEAVE_OVERVIEW', 'PIXEL'):
- ds = gdal.Open('/vsimem/tiff_ovr_52.tif')
- ds.BuildOverviews('NEAR', [4, 2])
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_52.tif", src_ds)
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ with gdaltest.config_option("INTERLEAVE_OVERVIEW", "PIXEL"):
+ ds = gdal.Open("/vsimem/tiff_ovr_52.tif")
+ ds.BuildOverviews("NEAR", [4, 2])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_52.tif')
+ ds = gdal.Open("/vsimem/tiff_ovr_52.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 328
cs = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs == 1087
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_52.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_52.tif")
+
###############################################################################
# Test external overviews building in several steps
@@ -1794,50 +2028,51 @@ def test_tiff_ovr_52():
def test_tiff_ovr_53():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
if src_ds is None:
pytest.skip()
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_53.tif', src_ds)
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
- ds.BuildOverviews('NEAR', [2])
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_53.tif", src_ds)
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
+ ds.BuildOverviews("NEAR", [2])
ds = None
# Note: currently this will compute it from the base raster and not
# ov_factor=2 !
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
- ds.BuildOverviews('NEAR', [4])
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
+ ds.BuildOverviews("NEAR", [4])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 1087
cs = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs == 328
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_53.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_53.tif")
# Compressed code path
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_53.tif', src_ds)
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'DEFLATE'):
- with gdaltest.config_option('INTERLEAVE_OVERVIEW', 'PIXEL'):
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
- ds.BuildOverviews('NEAR', [2])
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_53.tif", src_ds)
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "DEFLATE"):
+ with gdaltest.config_option("INTERLEAVE_OVERVIEW", "PIXEL"):
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
+ ds.BuildOverviews("NEAR", [2])
ds = None
# Note: currently this will compute it from the base raster and not
# ov_factor=2 !
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
- ds.BuildOverviews('NEAR', [4])
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
+ ds.BuildOverviews("NEAR", [4])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_53.tif')
+ ds = gdal.Open("/vsimem/tiff_ovr_53.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 1087
cs = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert cs == 328
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_53.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_53.tif")
+
###############################################################################
# Test external overviews building in several steps with jpeg compression
@@ -1845,52 +2080,58 @@ def test_tiff_ovr_53():
def test_tiff_ovr_54():
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
md = drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.Open('../gdrivers/data/small_world.tif')
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_54.tif', src_ds)
-
- with gdaltest.config_options({'COMPRESS_OVERVIEW': 'JPEG',
- 'PHOTOMETRIC_OVERVIEW': 'YCBCR',
- 'INTERLEAVE_OVERVIEW': 'PIXEL'}):
- ds = gdal.Open('/vsimem/tiff_ovr_54.tif')
- ds.BuildOverviews('AVERAGE', [2])
+ src_ds = gdal.Open("../gdrivers/data/small_world.tif")
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_54.tif", src_ds)
+
+ with gdaltest.config_options(
+ {
+ "COMPRESS_OVERVIEW": "JPEG",
+ "PHOTOMETRIC_OVERVIEW": "YCBCR",
+ "INTERLEAVE_OVERVIEW": "PIXEL",
+ }
+ ):
+ ds = gdal.Open("/vsimem/tiff_ovr_54.tif")
+ ds.BuildOverviews("AVERAGE", [2])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_54.tif')
- ds.BuildOverviews('AVERAGE', [4])
+ ds = gdal.Open("/vsimem/tiff_ovr_54.tif")
+ ds.BuildOverviews("AVERAGE", [4])
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_54.tif')
+ ds = gdal.Open("/vsimem/tiff_ovr_54.tif")
cs0 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs1 = ds.GetRasterBand(1).GetOverview(1).Checksum()
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_54.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_54.tif")
assert not (cs0 == 0 or cs1 == 0)
+
###############################################################################
# Test average overview generation with nodata.
+
def test_tiff_ovr_55(both_endian):
- src_ds = gdal.Open('../gdrivers/data/int16.tif')
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/tiff_ovr_55.tif', src_ds)
+ src_ds = gdal.Open("../gdrivers/data/int16.tif")
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/tiff_ovr_55.tif", src_ds)
- wrk_ds = gdal.Open('/vsimem/tiff_ovr_55.tif')
- assert wrk_ds is not None, 'Failed to open test dataset.'
+ wrk_ds = gdal.Open("/vsimem/tiff_ovr_55.tif")
+ assert wrk_ds is not None, "Failed to open test dataset."
- wrk_ds.BuildOverviews('RMS', overviewlist=[2])
+ wrk_ds.BuildOverviews("RMS", overviewlist=[2])
wrk_ds = None
- wrk_ds = gdal.Open('/vsimem/tiff_ovr_55.tif')
+ wrk_ds = gdal.Open("/vsimem/tiff_ovr_55.tif")
cs = wrk_ds.GetRasterBand(1).GetOverview(0).Checksum()
exp_cs = 1172
- assert cs == exp_cs, 'got wrong overview checksum.'
+ assert cs == exp_cs, "got wrong overview checksum."
###############################################################################
@@ -1898,86 +2139,107 @@ def test_tiff_ovr_55(both_endian):
def test_tiff_ovr_too_many_levels_contig():
- src_ds = gdal.Open('data/byte.tif')
- tmpfilename = '/vsimem/tiff_ovr_too_many_levels_contig.tif'
- ds = gdal.GetDriverByName('GTiff').CreateCopy(tmpfilename, src_ds)
- ds.BuildOverviews('AVERAGE', [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
+ src_ds = gdal.Open("data/byte.tif")
+ tmpfilename = "/vsimem/tiff_ovr_too_many_levels_contig.tif"
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(tmpfilename, src_ds)
+ ds.BuildOverviews("AVERAGE", [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
assert ds.GetRasterBand(1).GetOverviewCount() == 5
- ds.BuildOverviews('AVERAGE', [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
+ ds.BuildOverviews("AVERAGE", [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
assert ds.GetRasterBand(1).GetOverviewCount() == 5
ds = None
- gdal.GetDriverByName('GTiff').Delete(tmpfilename)
+ gdal.GetDriverByName("GTiff").Delete(tmpfilename)
+
###############################################################################
def test_tiff_ovr_too_many_levels_separate():
- src_ds = gdal.Open('data/separate_tiled.tif')
- tmpfilename = '/vsimem/tiff_ovr_too_many_levels_separate.tif'
- ds = gdal.GetDriverByName('GTiff').CreateCopy(tmpfilename, src_ds)
- ds.BuildOverviews('AVERAGE', [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
+ src_ds = gdal.Open("data/separate_tiled.tif")
+ tmpfilename = "/vsimem/tiff_ovr_too_many_levels_separate.tif"
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(tmpfilename, src_ds)
+ ds.BuildOverviews("AVERAGE", [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
assert ds.GetRasterBand(1).GetOverviewCount() == 6
assert ds.GetRasterBand(1).GetOverviewCount() == 6
ds = None
- gdal.GetDriverByName('GTiff').Delete(tmpfilename)
+ gdal.GetDriverByName("GTiff").Delete(tmpfilename)
+
###############################################################################
def test_tiff_ovr_too_many_levels_external():
- src_ds = gdal.Open('data/byte.tif')
- tmpfilename = '/vsimem/tiff_ovr_too_many_levels_contig.tif'
- gdal.GetDriverByName('GTiff').CreateCopy(tmpfilename, src_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ tmpfilename = "/vsimem/tiff_ovr_too_many_levels_contig.tif"
+ gdal.GetDriverByName("GTiff").CreateCopy(tmpfilename, src_ds)
ds = gdal.Open(tmpfilename)
- ds.BuildOverviews('AVERAGE', [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
+ ds.BuildOverviews("AVERAGE", [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
assert ds.GetRasterBand(1).GetOverviewCount() == 5
- ds.BuildOverviews('AVERAGE', [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
+ ds.BuildOverviews("AVERAGE", [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096])
assert ds.GetRasterBand(1).GetOverviewCount() == 5
ds = None
- gdal.GetDriverByName('GTiff').Delete(tmpfilename)
+ gdal.GetDriverByName("GTiff").Delete(tmpfilename)
+
###############################################################################
def test_tiff_ovr_average_multiband_vs_singleband():
- gdal.Translate('/vsimem/tiff_ovr_average_multiband_band.tif', 'data/reproduce_average_issue.tif', creationOptions=['INTERLEAVE=BAND'])
- gdal.Translate('/vsimem/tiff_ovr_average_multiband_pixel.tif', 'data/reproduce_average_issue.tif', creationOptions=['INTERLEAVE=PIXEL'])
+ gdal.Translate(
+ "/vsimem/tiff_ovr_average_multiband_band.tif",
+ "data/reproduce_average_issue.tif",
+ creationOptions=["INTERLEAVE=BAND"],
+ )
+ gdal.Translate(
+ "/vsimem/tiff_ovr_average_multiband_pixel.tif",
+ "data/reproduce_average_issue.tif",
+ creationOptions=["INTERLEAVE=PIXEL"],
+ )
- ds = gdal.Open('/vsimem/tiff_ovr_average_multiband_band.tif', gdal.GA_Update)
- ds.BuildOverviews('AVERAGE', [2])
- cs_band = [ds.GetRasterBand(i+1).GetOverview(0).Checksum() for i in range(3)]
+ ds = gdal.Open("/vsimem/tiff_ovr_average_multiband_band.tif", gdal.GA_Update)
+ ds.BuildOverviews("AVERAGE", [2])
+ cs_band = [ds.GetRasterBand(i + 1).GetOverview(0).Checksum() for i in range(3)]
ds = None
- ds = gdal.Open('/vsimem/tiff_ovr_average_multiband_pixel.tif', gdal.GA_Update)
- ds.BuildOverviews('AVERAGE', [2])
- cs_pixel = [ds.GetRasterBand(i+1).GetOverview(0).Checksum() for i in range(3)]
+ ds = gdal.Open("/vsimem/tiff_ovr_average_multiband_pixel.tif", gdal.GA_Update)
+ ds.BuildOverviews("AVERAGE", [2])
+ cs_pixel = [ds.GetRasterBand(i + 1).GetOverview(0).Checksum() for i in range(3)]
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_average_multiband_band.tif')
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_ovr_average_multiband_pixel.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_average_multiband_band.tif")
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_ovr_average_multiband_pixel.tif")
assert cs_band == cs_pixel
+
###############################################################################
def test_tiff_ovr_multithreading_multiband():
# Test multithreading through GDALRegenerateOverviewsMultiBand
- ds = gdal.Translate('/vsimem/test.tif', 'data/stefan_full_rgba.tif',
- creationOptions=['COMPRESS=LZW', 'TILED=YES',
- 'BLOCKXSIZE=16', 'BLOCKYSIZE=16'])
- with gdaltest.config_options({'GDAL_NUM_THREADS': '8',
- 'GDAL_OVR_CHUNK_MAX_SIZE': '100'}):
- ds.BuildOverviews('AVERAGE', [2])
+ ds = gdal.Translate(
+ "/vsimem/test.tif",
+ "data/stefan_full_rgba.tif",
+ creationOptions=["COMPRESS=LZW", "TILED=YES", "BLOCKXSIZE=16", "BLOCKYSIZE=16"],
+ )
+ with gdaltest.config_options(
+ {"GDAL_NUM_THREADS": "8", "GDAL_OVR_CHUNK_MAX_SIZE": "100"}
+ ):
+ ds.BuildOverviews("AVERAGE", [2])
ds = None
- ds = gdal.Open('/vsimem/test.tif')
- assert [ds.GetRasterBand(i+1).Checksum() for i in range(4)] == [12603, 58561, 36064, 10807]
+ ds = gdal.Open("/vsimem/test.tif")
+ assert [ds.GetRasterBand(i + 1).Checksum() for i in range(4)] == [
+ 12603,
+ 58561,
+ 36064,
+ 10807,
+ ]
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
@@ -1985,113 +2247,148 @@ def test_tiff_ovr_multithreading_multiband():
def test_tiff_ovr_multithreading_singleband():
# Test multithreading through GDALRegenerateOverviews
- ds = gdal.Translate('/vsimem/test.tif', 'data/stefan_full_rgba.tif',
- creationOptions=['INTERLEAVE=BAND'])
- with gdaltest.config_options({'GDAL_NUM_THREADS': '8',
- 'GDAL_OVR_CHUNKYSIZE': '1'}):
- ds.BuildOverviews('AVERAGE', [2, 4])
+ ds = gdal.Translate(
+ "/vsimem/test.tif",
+ "data/stefan_full_rgba.tif",
+ creationOptions=["INTERLEAVE=BAND"],
+ )
+ with gdaltest.config_options({"GDAL_NUM_THREADS": "8", "GDAL_OVR_CHUNKYSIZE": "1"}):
+ ds.BuildOverviews("AVERAGE", [2, 4])
ds = None
- ds = gdal.Open('/vsimem/test.tif')
- assert [ds.GetRasterBand(i+1).Checksum() for i in range(4)] == [12603, 58561, 36064, 10807]
+ ds = gdal.Open("/vsimem/test.tif")
+ assert [ds.GetRasterBand(i + 1).Checksum() for i in range(4)] == [
+ 12603,
+ 58561,
+ 36064,
+ 10807,
+ ]
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
def test_tiff_ovr_multiband_code_path_degenerate():
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 5, 6)
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 5, 6)
ds.GetRasterBand(1).Fill(255)
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
- with gdaltest.config_option('COMPRESS_OVERVIEW', 'LZW'):
- ds.BuildOverviews('nearest', overviewlist=[2, 4, 8])
+ with gdaltest.config_option("COMPRESS_OVERVIEW", "LZW"):
+ ds.BuildOverviews("nearest", overviewlist=[2, 4, 8])
assert ds.GetRasterBand(1).GetOverview(0).Checksum() != 0
assert ds.GetRasterBand(1).GetOverview(1).Checksum() != 0
assert ds.GetRasterBand(1).GetOverview(2).Checksum() != 0
del ds
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
+
###############################################################################
def test_tiff_ovr_color_table_bug_3336():
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 242, 10442)
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 242, 10442)
ct = gdal.ColorTable()
- ct.SetColorEntry(255, (255,2552,55))
+ ct.SetColorEntry(255, (255, 2552, 55))
ds.GetRasterBand(1).SetRasterColorTable(ct)
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
- assert ds.BuildOverviews('nearest', overviewlist=[32]) == 0
+ assert ds.BuildOverviews("nearest", overviewlist=[32]) == 0
del ds
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
+
###############################################################################
def test_tiff_ovr_color_table_bug_3336_bis():
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 128, 12531)
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 128, 12531)
ct = gdal.ColorTable()
- ct.SetColorEntry(255, (255,2552,55))
+ ct.SetColorEntry(255, (255, 2552, 55))
ds.GetRasterBand(1).SetRasterColorTable(ct)
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
- assert ds.BuildOverviews('nearest', overviewlist=[128]) == 0
+ assert ds.BuildOverviews("nearest", overviewlist=[128]) == 0
del ds
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
+
###############################################################################
def test_tiff_ovr_nodata_multiband():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 4, 4, 2, gdal.GDT_Float32)
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 4, 4, 2, gdal.GDT_Float32)
ds.GetRasterBand(1).SetNoDataValue(-10000)
ds.GetRasterBand(1).WriteArray(numpy.array([[0.5, 1.0], [4.5, -10000]]))
ds.GetRasterBand(2).SetNoDataValue(-10000)
ds.GetRasterBand(2).WriteArray(numpy.array([[-10000, 4.0], [4.5, 0.5]]))
ds.FlushCache()
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
ds.FlushCache()
- assert ds.GetRasterBand(1).GetOverviewCount() == 1, \
- 'Overview could not be generated'
+ assert (
+ ds.GetRasterBand(1).GetOverviewCount() == 1
+ ), "Overview could not be generated"
pix = ds.GetRasterBand(1).GetOverview(0).ReadAsArray(win_xsize=1, win_ysize=1)
- assert pix[0,0] == 2.0
+ assert pix[0, 0] == 2.0
pix = ds.GetRasterBand(2).GetOverview(0).ReadAsArray(win_xsize=1, win_ysize=1)
- assert pix[0,0] == 3.0
+ assert pix[0, 0] == 3.0
ds = None
+
###############################################################################
-@pytest.mark.parametrize("external_ovr", [False,True])
-def test_tiff_ovr_nodata_multiband_interleave_band_non_default_color_interp(external_ovr):
+
+@pytest.mark.parametrize("external_ovr", [False, True])
+def test_tiff_ovr_nodata_multiband_interleave_band_non_default_color_interp(
+ external_ovr,
+):
nodatavalue = -10000
- data = struct.pack('f' * 4 * 4,
- 0.5, 0.2, 0.5, 0.2,
- 0.2, nodatavalue, 0.2, nodatavalue,
- 0.5, 0.2, nodatavalue, nodatavalue,
- 0.2, nodatavalue, nodatavalue, nodatavalue)
+ data = struct.pack(
+ "f" * 4 * 4,
+ 0.5,
+ 0.2,
+ 0.5,
+ 0.2,
+ 0.2,
+ nodatavalue,
+ 0.2,
+ nodatavalue,
+ 0.5,
+ 0.2,
+ nodatavalue,
+ nodatavalue,
+ 0.2,
+ nodatavalue,
+ nodatavalue,
+ nodatavalue,
+ )
numbands = 5
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(
- temp_path, 4, 4, numbands, gdal.GDT_Float32,
- options=['INTERLEAVE=BAND', 'PHOTOMETRIC=MINISBLACK', 'ALPHA=YES'])
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(
+ temp_path,
+ 4,
+ 4,
+ numbands,
+ gdal.GDT_Float32,
+ options=["INTERLEAVE=BAND", "PHOTOMETRIC=MINISBLACK", "ALPHA=YES"],
+ )
for i in range(1, numbands):
ds.GetRasterBand(i).SetColorInterpretation(gdal.GCI_GreenBand)
ds.GetRasterBand(i).SetNoDataValue(nodatavalue)
@@ -2099,48 +2396,83 @@ def test_tiff_ovr_nodata_multiband_interleave_band_non_default_color_interp(exte
ds.GetRasterBand(numbands).SetColorInterpretation(gdal.GCI_AlphaBand)
ds.GetRasterBand(numbands).SetNoDataValue(nodatavalue)
- ds.GetRasterBand(numbands).WriteRaster(0, 0, 4, 4, struct.pack('f' * 4 * 4,
- 255, 255, 255, 255,
- 255, 255, 255, 255,
- 255, 0, 0, 0,
- 0, 0, 0, 0))
+ ds.GetRasterBand(numbands).WriteRaster(
+ 0,
+ 0,
+ 4,
+ 4,
+ struct.pack(
+ "f" * 4 * 4,
+ 255,
+ 255,
+ 255,
+ 255,
+ 255,
+ 255,
+ 255,
+ 255,
+ 255,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ),
+ )
if external_ovr:
ds = None
ds = gdal.Open(temp_path)
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
- assert ds.GetRasterBand(1).GetOverview(0).GetColorInterpretation() == gdal.GCI_GreenBand
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
+ assert (
+ ds.GetRasterBand(1).GetOverview(0).GetColorInterpretation()
+ == gdal.GCI_GreenBand
+ )
ds = None
ds = gdal.Open(temp_path)
- assert ds.GetRasterBand(1).GetOverviewCount() == 2, 'Overview could not be generated'
- assert ds.GetRasterBand(1).GetOverview(0).GetColorInterpretation() == gdal.GCI_GreenBand
+ assert (
+ ds.GetRasterBand(1).GetOverviewCount() == 2
+ ), "Overview could not be generated"
+ assert (
+ ds.GetRasterBand(1).GetOverview(0).GetColorInterpretation()
+ == gdal.GCI_GreenBand
+ )
for i in range(1, numbands):
- pix = struct.unpack('f', ds.GetRasterBand(i).GetOverview(1).ReadRaster(0,0,1,1))[0]
- assert abs(pix - 0.3) < 0.01, 'Error in band ' + str(i)
+ pix = struct.unpack(
+ "f", ds.GetRasterBand(i).GetOverview(1).ReadRaster(0, 0, 1, 1)
+ )[0]
+ assert abs(pix - 0.3) < 0.01, "Error in band " + str(i)
- pix = struct.unpack('f', ds.GetRasterBand(numbands).GetOverview(1).ReadRaster(0,0,1,1))[0]
- assert pix == 255, 'Error in alpha band '
+ pix = struct.unpack(
+ "f", ds.GetRasterBand(numbands).GetOverview(1).ReadRaster(0, 0, 1, 1)
+ )[0]
+ assert pix == 255, "Error in alpha band "
ds = None
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
+
###############################################################################
-@pytest.mark.parametrize("external_ovr_and_msk", [False,True])
+@pytest.mark.parametrize("external_ovr_and_msk", [False, True])
def test_tiff_ovr_clean_with_mask(external_ovr_and_msk):
- """ Test fix for https://github.com/OSGeo/gdal/issues/1047 """
+ """Test fix for https://github.com/OSGeo/gdal/issues/1047"""
- filename = '/vsimem/test_tiff_ovr_clean_with_mask.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 10, 10)
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'NO' if external_ovr_and_msk else 'YES'):
+ filename = "/vsimem/test_tiff_ovr_clean_with_mask.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 10, 10)
+ with gdaltest.config_option(
+ "GDAL_TIFF_INTERNAL_MASK", "NO" if external_ovr_and_msk else "YES"
+ ):
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
if external_ovr_and_msk:
ds = None
ds = gdal.Open(filename)
- ds.BuildOverviews('NEAR', [2])
+ ds.BuildOverviews("NEAR", [2])
ds = None
# Clear overviews
@@ -2150,8 +2482,8 @@ def test_tiff_ovr_clean_with_mask(external_ovr_and_msk):
assert ds.GetRasterBand(1).GetMaskBand().GetOverviewCount() == 0
ds = None
- assert gdal.VSIStatL(filename + '.ovr') is None
- assert gdal.VSIStatL(filename + '.msk.ovr') is None
+ assert gdal.VSIStatL(filename + ".ovr") is None
+ assert gdal.VSIStatL(filename + ".msk.ovr") is None
# Check after reopening
ds = gdal.Open(filename)
@@ -2159,7 +2491,7 @@ def test_tiff_ovr_clean_with_mask(external_ovr_and_msk):
assert ds.GetRasterBand(1).GetMaskBand().GetOverviewCount() == 0
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -2170,11 +2502,14 @@ def test_tiff_ovr_clean_with_mask(external_ovr_and_msk):
def test_tiff_ovr_fallback_to_multiband_overview_generate():
- filename = '/vsimem/test_tiff_ovr_issue_4932_src.tif'
- ds = gdal.Translate(filename, 'data/byte.tif',
- options='-b 1 -b 1 -b 1 -co INTERLEAVE=BAND -co TILED=YES -outsize 1024 1024')
- with gdaltest.config_option('GDAL_OVR_CHUNK_MAX_SIZE', '1000'):
- ds.BuildOverviews('NEAR', overviewlist=[2, 4, 8])
+ filename = "/vsimem/test_tiff_ovr_issue_4932_src.tif"
+ ds = gdal.Translate(
+ filename,
+ "data/byte.tif",
+ options="-b 1 -b 1 -b 1 -co INTERLEAVE=BAND -co TILED=YES -outsize 1024 1024",
+ )
+ with gdaltest.config_option("GDAL_OVR_CHUNK_MAX_SIZE", "1000"):
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4, 8])
ds = None
ds = gdal.Open(filename)
@@ -2182,7 +2517,7 @@ def test_tiff_ovr_fallback_to_multiband_overview_generate():
assert cs == 37308
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -2190,19 +2525,22 @@ def test_tiff_ovr_fallback_to_multiband_overview_generate():
def test_tiff_ovr_int64():
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 2, 1, 1, gdal.GDT_Int64)
- ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1,
- struct.pack('q' * 2, -10000000000, -10000000000))
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 2, 1, 1, gdal.GDT_Int64)
+ ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 2, 1, struct.pack("q" * 2, -10000000000, -10000000000)
+ )
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
assert ds.GetRasterBand(1).DataType == gdal.GDT_Int64
- assert ds.BuildOverviews('nearest', overviewlist=[2]) == 0
+ assert ds.BuildOverviews("nearest", overviewlist=[2]) == 0
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
- assert struct.unpack('q', ds.GetRasterBand(1).GetOverview(0).ReadRaster()) == (-10000000000,)
+ assert struct.unpack("q", ds.GetRasterBand(1).GetOverview(0).ReadRaster()) == (
+ -10000000000,
+ )
del ds
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
###############################################################################
@@ -2210,54 +2548,58 @@ def test_tiff_ovr_int64():
def test_tiff_ovr_uint64():
- temp_path = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(temp_path, 2, 1, 1, gdal.GDT_UInt64)
- ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1,
- struct.pack('Q' * 2, 10000000000, 10000000000))
+ temp_path = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(temp_path, 2, 1, 1, gdal.GDT_UInt64)
+ ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 2, 1, struct.pack("Q" * 2, 10000000000, 10000000000)
+ )
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
assert ds.GetRasterBand(1).DataType == gdal.GDT_UInt64
- assert ds.BuildOverviews('nearest', overviewlist=[2]) == 0
+ assert ds.BuildOverviews("nearest", overviewlist=[2]) == 0
del ds
ds = gdal.OpenEx(temp_path, gdal.GA_ReadOnly)
- assert struct.unpack('Q', ds.GetRasterBand(1).GetOverview(0).ReadRaster()) == (10000000000,)
+ assert struct.unpack("Q", ds.GetRasterBand(1).GetOverview(0).ReadRaster()) == (
+ 10000000000,
+ )
del ds
- gdal.GetDriverByName('GTiff').Delete(temp_path)
+ gdal.GetDriverByName("GTiff").Delete(temp_path)
###############################################################################
# Cleanup
+
def test_tiff_ovr_cleanup():
- gdaltest.tiff_drv.Delete('tmp/mfloat32.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr4.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr5.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr6.tif')
- gdaltest.tiff_drv.Delete('tmp/test_average_palette.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr9.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr10.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr11.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr12.tif')
- gdaltest.tiff_drv.Delete('tmp/test_gauss_palette.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr15.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr16.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr17.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr18.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr19.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr20.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr21.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr22.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr23.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr24.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr25.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr26.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr27.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr30.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr31.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr37.dt0')
- gdaltest.tiff_drv.Delete('tmp/ovr38.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr39.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr40.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr41.tif')
- gdaltest.tiff_drv.Delete('tmp/ovr42.tif')
- gdaltest.tiff_drv.Delete('tmp/rgba_with_alpha_0_and_255.tif')
+ gdaltest.tiff_drv.Delete("tmp/mfloat32.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr4.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr5.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr6.tif")
+ gdaltest.tiff_drv.Delete("tmp/test_average_palette.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr9.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr10.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr11.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr12.tif")
+ gdaltest.tiff_drv.Delete("tmp/test_gauss_palette.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr15.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr16.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr17.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr18.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr19.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr20.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr21.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr22.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr23.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr24.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr25.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr26.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr27.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr30.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr31.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr37.dt0")
+ gdaltest.tiff_drv.Delete("tmp/ovr38.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr39.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr40.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr41.tif")
+ gdaltest.tiff_drv.Delete("tmp/ovr42.tif")
+ gdaltest.tiff_drv.Delete("tmp/rgba_with_alpha_0_and_255.tif")
diff --git a/autotest/gcore/tiff_read.py b/autotest/gcore/tiff_read.py
index 20e8b86be204..73688108097a 100755
--- a/autotest/gcore/tiff_read.py
+++ b/autotest/gcore/tiff_read.py
@@ -28,59 +28,58 @@
###############################################################################
import os
-import sys
import shutil
import struct
+import sys
+import gdaltest
import pytest
-
import webserver
-import gdaltest
from osgeo import gdal, osr
init_list = [
- ('byte.tif', 1, 4672),
- ('uint16_sgilog.tif', 1, 4672),
- ('next_literalrow.tif', 1, 4),
- ('next_literalspan.tif', 1, 4),
- ('next_default_case.tif', 1, 4),
- ('thunder.tif', 1, 3),
- ('int10.tif', 1, 4672),
- ('int12.tif', 1, 4672),
- ('int16.tif', 1, 4672),
- ('uint16.tif', 1, 4672),
- ('int24.tif', 1, 4672),
- ('int32.tif', 1, 4672),
- ('uint32.tif', 1, 4672),
- ('float16.tif', 1, 4672),
- ('float24.tif', 1, 4672),
- ('float32.tif', 1, 4672),
- ('float32_minwhite.tif', 1, 1),
- ('float64.tif', 1, 4672),
- ('cint16.tif', 1, 5028),
- ('cint32.tif', 1, 5028),
- ('cfloat32.tif', 1, 5028),
- ('cfloat64.tif', 1, 5028),
+ ("byte.tif", 1, 4672),
+ ("uint16_sgilog.tif", 1, 4672),
+ ("next_literalrow.tif", 1, 4),
+ ("next_literalspan.tif", 1, 4),
+ ("next_default_case.tif", 1, 4),
+ ("thunder.tif", 1, 3),
+ ("int10.tif", 1, 4672),
+ ("int12.tif", 1, 4672),
+ ("int16.tif", 1, 4672),
+ ("uint16.tif", 1, 4672),
+ ("int24.tif", 1, 4672),
+ ("int32.tif", 1, 4672),
+ ("uint32.tif", 1, 4672),
+ ("float16.tif", 1, 4672),
+ ("float24.tif", 1, 4672),
+ ("float32.tif", 1, 4672),
+ ("float32_minwhite.tif", 1, 1),
+ ("float64.tif", 1, 4672),
+ ("cint16.tif", 1, 5028),
+ ("cint32.tif", 1, 5028),
+ ("cfloat32.tif", 1, 5028),
+ ("cfloat64.tif", 1, 5028),
# The following four related partial final strip/tiles (#1179)
- ('separate_tiled.tif', 2, 15234),
- ('seperate_strip.tif', 2, 15234), # TODO: Spelling.
- ('contig_tiled.tif', 2, 15234),
- ('contig_strip.tif', 2, 15234),
- ('empty1bit.tif', 1, 0),
- ('gtiff/int64_full_range.tif', 1, 65535),
- ('gtiff/uint64_full_range.tif', 1, 1),
+ ("separate_tiled.tif", 2, 15234),
+ ("seperate_strip.tif", 2, 15234), # TODO: Spelling.
+ ("contig_tiled.tif", 2, 15234),
+ ("contig_strip.tif", 2, 15234),
+ ("empty1bit.tif", 1, 0),
+ ("gtiff/int64_full_range.tif", 1, 65535),
+ ("gtiff/uint64_full_range.tif", 1, 1),
]
@pytest.mark.parametrize(
- 'filename,band,checksum',
+ "filename,band,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('GTiff')
+@pytest.mark.require_driver("GTiff")
def test_tiff_open(filename, band, checksum):
- ut = gdaltest.GDALTest('GTiff', filename, band, checksum)
+ ut = gdaltest.GDALTest("GTiff", filename, band, checksum)
ut.testOpen()
@@ -91,49 +90,55 @@ def test_tiff_open(filename, band, checksum):
def test_tiff_read_off():
# Test absolute/offset directory access.
- ds = gdal.Open('GTIFF_DIR:off:408:data/byte.tif')
+ ds = gdal.Open("GTIFF_DIR:off:408:data/byte.tif")
assert ds.GetRasterBand(1).Checksum() == 4672
# Same with GTIFF_RAW: prefix
- ds = gdal.Open('GTIFF_RAW:GTIFF_DIR:off:408:data/byte.tif')
+ ds = gdal.Open("GTIFF_RAW:GTIFF_DIR:off:408:data/byte.tif")
assert ds.GetRasterBand(1).Checksum() == 4672
# Test index directory access
- ds = gdal.Open('GTIFF_DIR:1:data/byte.tif')
+ ds = gdal.Open("GTIFF_DIR:1:data/byte.tif")
assert ds.GetRasterBand(1).Checksum() == 4672
# Check that georeferencing is read properly when accessing
# "GTIFF_DIR" subdatasets (#3478)
gt = ds.GetGeoTransform()
- assert gt == (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0), \
- 'did not get expected geotransform'
+ assert gt == (
+ 440720.0,
+ 60.0,
+ 0.0,
+ 3751320.0,
+ 0.0,
+ -60.0,
+ ), "did not get expected geotransform"
# Error cases
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:')
+ ds = gdal.Open("GTIFF_DIR:")
assert ds is None
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:1')
+ ds = gdal.Open("GTIFF_DIR:1")
assert ds is None
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:1:')
+ ds = gdal.Open("GTIFF_DIR:1:")
assert ds is None
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:1:/vsimem/i_dont_exist.tif')
+ ds = gdal.Open("GTIFF_DIR:1:/vsimem/i_dont_exist.tif")
assert ds is None
# Requested directory not found
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:2:data/byte.tif')
+ ds = gdal.Open("GTIFF_DIR:2:data/byte.tif")
assert ds is None
# Opening a specific TIFF directory is not supported in update mode.
# Switching to read-only
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:1:data/byte.tif', gdal.GA_Update)
+ ds = gdal.Open("GTIFF_DIR:1:data/byte.tif", gdal.GA_Update)
assert ds is not None
@@ -141,20 +146,22 @@ def test_tiff_read_off():
# Confirm we interpret bands as alpha when we should, and not when we
# should not.
+
def test_tiff_check_alpha():
# Grey + alpha
- ds = gdal.Open('data/stefan_full_greyalpha.tif')
+ ds = gdal.Open("data/stefan_full_greyalpha.tif")
- assert ds.GetRasterBand(2).GetRasterColorInterpretation() == gdal.GCI_AlphaBand, \
- 'Wrong color interpretation (stefan_full_greyalpha).'
+ assert (
+ ds.GetRasterBand(2).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
+ ), "Wrong color interpretation (stefan_full_greyalpha)."
ds = None
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/stefan_full_greyalpha.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/stefan_full_greyalpha.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
gdaltest.supports_force_rgba = False
if ds.RasterCount == 4:
gdaltest.supports_force_rgba = True
@@ -165,17 +172,18 @@ def test_tiff_check_alpha():
# RGB + alpha
- ds = gdal.Open('data/stefan_full_rgba.tif')
+ ds = gdal.Open("data/stefan_full_rgba.tif")
- assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand, \
- 'Wrong color interpretation (stefan_full_rgba).'
+ assert (
+ ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
+ ), "Wrong color interpretation (stefan_full_rgba)."
ds = None
if gdaltest.supports_force_rgba:
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/stefan_full_rgba.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/stefan_full_rgba.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
# FIXME? Not the same as without GTIFF_FORCE_RGBA=YES
assert got_cs == [11547, 57792, 35643, 10807]
@@ -183,42 +191,48 @@ def test_tiff_check_alpha():
# RGB + undefined
- ds = gdal.Open('data/stefan_full_rgba_photometric_rgb.tif')
+ ds = gdal.Open("data/stefan_full_rgba_photometric_rgb.tif")
- assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_Undefined, \
- 'Wrong color interpretation (stefan_full_rgba_photometric_rgb).'
+ assert (
+ ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_Undefined
+ ), "Wrong color interpretation (stefan_full_rgba_photometric_rgb)."
ds = None
if gdaltest.supports_force_rgba:
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/stefan_full_rgba_photometric_rgb.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/stefan_full_rgba_photometric_rgb.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [12603, 58561, 36064, 10807]
ds = None
-
###############################################################################
# Test reading a CMYK tiff as RGBA image
+
def test_tiff_read_cmyk_rgba():
- ds = gdal.Open('data/rgbsmall_cmyk.tif')
+ ds = gdal.Open("data/rgbsmall_cmyk.tif")
+
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ assert (
+ "SOURCE_COLOR_SPACE" in md and md["SOURCE_COLOR_SPACE"] == "CMYK"
+ ), "bad value for IMAGE_STRUCTURE[SOURCE_COLOR_SPACE]"
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- assert 'SOURCE_COLOR_SPACE' in md and md['SOURCE_COLOR_SPACE'] == 'CMYK', \
- 'bad value for IMAGE_STRUCTURE[SOURCE_COLOR_SPACE]'
+ assert (
+ ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_RedBand
+ ), "Wrong color interpretation."
- assert ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_RedBand, \
- 'Wrong color interpretation.'
+ assert (
+ ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
+ ), "Wrong color interpretation (alpha)."
- assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand, \
- 'Wrong color interpretation (alpha).'
+ assert (
+ ds.GetRasterBand(1).Checksum() == 23303
+ ), "Expected checksum = %d. Got = %d" % (23303, ds.GetRasterBand(1).Checksum())
- assert ds.GetRasterBand(1).Checksum() == 23303, \
- ('Expected checksum = %d. Got = %d' % (23303, ds.GetRasterBand(1).Checksum()))
###############################################################################
# Test reading a CMYK tiff as a raw image
@@ -226,13 +240,16 @@ def test_tiff_read_cmyk_rgba():
def test_tiff_read_cmyk_raw():
- ds = gdal.Open('GTIFF_RAW:data/rgbsmall_cmyk.tif')
+ ds = gdal.Open("GTIFF_RAW:data/rgbsmall_cmyk.tif")
- assert ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand, \
- 'Wrong color interpretation.'
+ assert (
+ ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand
+ ), "Wrong color interpretation."
+
+ assert (
+ ds.GetRasterBand(1).Checksum() == 29430
+ ), "Expected checksum = %d. Got = %d" % (29430, ds.GetRasterBand(1).Checksum())
- assert ds.GetRasterBand(1).Checksum() == 29430, \
- ('Expected checksum = %d. Got = %d' % (29430, ds.GetRasterBand(1).Checksum()))
###############################################################################
# Test reading a OJPEG image
@@ -240,32 +257,37 @@ def test_tiff_read_cmyk_raw():
def test_tiff_read_ojpeg():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/zackthecat.tif')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/zackthecat.tif")
gdal.PopErrorHandler()
if ds is None:
- if gdal.GetLastErrorMsg().find('Cannot open TIFF file due to missing codec') == 0:
+ if (
+ gdal.GetLastErrorMsg().find("Cannot open TIFF file due to missing codec")
+ == 0
+ ):
pytest.skip()
pytest.fail(gdal.GetLastErrorMsg())
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
got_cs = ds.GetRasterBand(1).Checksum()
gdal.PopErrorHandler()
expected_cs = 61570
- assert got_cs == expected_cs, \
- ('Expected checksum = %d. Got = %d' % (expected_cs, got_cs))
+ assert got_cs == expected_cs, "Expected checksum = %d. Got = %d" % (
+ expected_cs,
+ got_cs,
+ )
#
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/zackthecat_corrupted.tif')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/zackthecat_corrupted.tif")
cs = ds.GetRasterBand(1).Checksum()
gdal.PopErrorHandler()
if cs != 0:
- print('Should be 0 with internal libtiff')
+ print("Should be 0 with internal libtiff")
###############################################################################
@@ -275,110 +297,128 @@ def test_tiff_read_ojpeg():
def test_tiff_read_gzip():
try:
- os.remove('data/byte.tif.gz.properties')
+ os.remove("data/byte.tif.gz.properties")
except OSError:
pass
- ds = gdal.Open('/vsigzip/./data/byte.tif.gz')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsigzip/./data/byte.tif.gz")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
try:
- os.stat('data/byte.tif.gz.properties')
- pytest.fail('did not expect data/byte.tif.gz.properties')
+ os.stat("data/byte.tif.gz.properties")
+ pytest.fail("did not expect data/byte.tif.gz.properties")
except OSError:
return
+
###############################################################################
# Read a .tif.zip file (with explicit filename)
def test_tiff_read_zip_1():
- ds = gdal.Open('/vsizip/./data/byte.tif.zip/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/./data/byte.tif.zip/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tif.zip file (with implicit filename)
def test_tiff_read_zip_2():
- ds = gdal.Open('/vsizip/./data/byte.tif.zip')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/./data/byte.tif.zip")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tif.zip file with a single file in a subdirectory (with explicit filename)
def test_tiff_read_zip_3():
- ds = gdal.Open('/vsizip/./data/onefileinsubdir.zip/onefileinsubdir/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/./data/onefileinsubdir.zip/onefileinsubdir/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tif.zip file with a single file in a subdirectory(with implicit filename)
def test_tiff_read_zip_4():
- ds = gdal.Open('/vsizip/./data/onefileinsubdir.zip')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/./data/onefileinsubdir.zip")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tif.zip file with 2 files in a subdirectory
def test_tiff_read_zip_5():
- ds = gdal.Open('/vsizip/./data/twofileinsubdir.zip/twofileinsubdir/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/./data/twofileinsubdir.zip/twofileinsubdir/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tar file (with explicit filename)
def test_tiff_read_tar_1():
- ds = gdal.Open('/vsitar/./data/byte.tar/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsitar/./data/byte.tar/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tar file (with implicit filename)
def test_tiff_read_tar_2():
- ds = gdal.Open('/vsitar/./data/byte.tar')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsitar/./data/byte.tar")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Read a .tgz file (with explicit filename)
def test_tiff_read_tgz_1():
- ds = gdal.Open('/vsitar/./data/byte.tgz/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsitar/./data/byte.tgz/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
- gdal.Unlink('data/byte.tgz.properties')
+ gdal.Unlink("data/byte.tgz.properties")
+
###############################################################################
# Read a .tgz file (with implicit filename)
@@ -386,12 +426,14 @@ def test_tiff_read_tgz_1():
def test_tiff_read_tgz_2():
- ds = gdal.Open('/vsitar/./data/byte.tgz')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsitar/./data/byte.tgz")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
- gdal.Unlink('data/byte.tgz.properties')
+ gdal.Unlink("data/byte.tgz.properties")
+
###############################################################################
# Check handling of non-degree angular units (#601)
@@ -399,11 +441,13 @@ def test_tiff_read_tgz_2():
def test_tiff_grads():
- ds = gdal.Open('data/test_gf.tif')
+ ds = gdal.Open("data/test_gf.tif")
srs = ds.GetProjectionRef()
- assert srs.find('PARAMETER["latitude_of_origin",52]') != -1, \
- ('Did not get expected latitude of origin: wkt=%s' % srs)
+ assert srs.find('PARAMETER["latitude_of_origin",52]') != -1, (
+ "Did not get expected latitude of origin: wkt=%s" % srs
+ )
+
###############################################################################
# Check Erdas Citation Parsing for coordinate system.
@@ -411,18 +455,18 @@ def test_tiff_grads():
def test_tiff_citation():
- build_info = gdal.VersionInfo('BUILD_INFO')
- if build_info.find('ESRI_BUILD=YES') == -1:
+ build_info = gdal.VersionInfo("BUILD_INFO")
+ if build_info.find("ESRI_BUILD=YES") == -1:
pytest.skip()
- ds = gdal.Open('data/citation_mixedcase.tif')
+ ds = gdal.Open("data/citation_mixedcase.tif")
wkt = ds.GetProjectionRef()
expected_wkt = """PROJCS["NAD_1983_HARN_StatePlane_Oregon_North_FIPS_3601_Feet_Intl",GEOGCS["GCS_North_American_1983_HARN",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",8202099.737532808],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-120.5],PARAMETER["Standard_Parallel_1",44.33333333333334],PARAMETER["Standard_Parallel_2",46.0],PARAMETER["Latitude_Of_Origin",43.66666666666666],UNIT["Foot",0.3048]]"""
if wkt != expected_wkt:
- print('got: ', wkt)
- pytest.fail('Erdas citation processing failing?')
+ print("got: ", wkt)
+ pytest.fail("Erdas citation processing failing?")
###############################################################################
@@ -433,36 +477,43 @@ def test_tiff_linearparmunits():
# Test the file with the correct formulation.
- ds = gdal.Open('data/spaf27_correct.tif')
+ ds = gdal.Open("data/spaf27_correct.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(2000000.0, abs=0.001), 'did not get expected false easting (1)'
+ assert fe == pytest.approx(
+ 2000000.0, abs=0.001
+ ), "did not get expected false easting (1)"
# Test the file with the old (broken) GDAL formulation.
- ds = gdal.Open('data/spaf27_brokengdal.tif')
+ ds = gdal.Open("data/spaf27_brokengdal.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(609601.219202438, abs=0.001), 'did not get expected false easting (2)'
+ assert fe == pytest.approx(
+ 609601.219202438, abs=0.001
+ ), "did not get expected false easting (2)"
# Test the file when using an EPSG code.
- ds = gdal.Open('data/spaf27_epsg.tif')
+ ds = gdal.Open("data/spaf27_epsg.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(2000000.0, abs=0.001), 'did not get expected false easting (3)'
+ assert fe == pytest.approx(
+ 2000000.0, abs=0.001
+ ), "did not get expected false easting (3)"
+
###############################################################################
# Check that the GTIFF_LINEAR_UNITS handling works properly (#3901)
@@ -470,42 +521,49 @@ def test_tiff_linearparmunits():
def test_tiff_linearparmunits2():
- gdal.SetConfigOption('GTIFF_LINEAR_UNITS', 'BROKEN')
+ gdal.SetConfigOption("GTIFF_LINEAR_UNITS", "BROKEN")
# Test the file with the correct formulation.
- ds = gdal.Open('data/spaf27_correct.tif')
+ ds = gdal.Open("data/spaf27_correct.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(6561666.66667, abs=0.001), 'did not get expected false easting (1)'
+ assert fe == pytest.approx(
+ 6561666.66667, abs=0.001
+ ), "did not get expected false easting (1)"
# Test the file with the correct formulation that is marked as correct.
- ds = gdal.Open('data/spaf27_markedcorrect.tif')
+ ds = gdal.Open("data/spaf27_markedcorrect.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(2000000.0, abs=0.001), 'did not get expected false easting (2)'
+ assert fe == pytest.approx(
+ 2000000.0, abs=0.001
+ ), "did not get expected false easting (2)"
# Test the file with the old (broken) GDAL formulation.
- ds = gdal.Open('data/spaf27_brokengdal.tif')
+ ds = gdal.Open("data/spaf27_brokengdal.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(2000000.0, abs=0.001), 'did not get expected false easting (3)'
+ assert fe == pytest.approx(
+ 2000000.0, abs=0.001
+ ), "did not get expected false easting (3)"
+
+ gdal.SetConfigOption("GTIFF_LINEAR_UNITS", "DEFAULT")
- gdal.SetConfigOption('GTIFF_LINEAR_UNITS', 'DEFAULT')
###############################################################################
# Test GTiffSplitBitmapBand to treat one row 1bit files as scanline blocks (#2622)
@@ -513,14 +571,15 @@ def test_tiff_linearparmunits2():
def test_tiff_g4_split():
- ds = gdal.Open('data/slim_g4.tif')
+ ds = gdal.Open("data/slim_g4.tif")
(_, blocky) = ds.GetRasterBand(1).GetBlockSize()
- assert blocky == 1, 'Did not get scanline sized blocks.'
+ assert blocky == 1, "Did not get scanline sized blocks."
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 3322, 'Got wrong checksum'
+ assert cs == 3322, "Got wrong checksum"
+
###############################################################################
# Test reading a tiff with multiple images in it
@@ -529,28 +588,33 @@ def test_tiff_g4_split():
def test_tiff_multi_images():
# Implicitly get the content of the first image (backward compatibility).
- ds = gdal.Open('data/twoimages.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, ('Expected checksum = %d. Got = %d' %
- (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("data/twoimages.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
- md = ds.GetMetadata('SUBDATASETS')
- assert md['SUBDATASET_1_NAME'] == 'GTIFF_DIR:1:data/twoimages.tif', \
- 'did not get expected subdatasets metadata.'
+ md = ds.GetMetadata("SUBDATASETS")
+ assert (
+ md["SUBDATASET_1_NAME"] == "GTIFF_DIR:1:data/twoimages.tif"
+ ), "did not get expected subdatasets metadata."
ds = None
# Explicitly get the content of the first image.
- ds = gdal.Open('GTIFF_DIR:1:data/twoimages.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("GTIFF_DIR:1:data/twoimages.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
# Explicitly get the content of the second image.
- ds = gdal.Open('GTIFF_DIR:2:data/twoimages.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("GTIFF_DIR:2:data/twoimages.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds = None
+
###############################################################################
# Test reading a tiff from a memory buffer (#2931)
@@ -562,30 +626,36 @@ def test_tiff_vsimem():
except AttributeError:
pytest.skip()
- content = open('data/byte.tif', mode='rb').read()
+ content = open("data/byte.tif", mode="rb").read()
# Create in-memory file
- gdal.FileFromMemBuffer('/vsimem/tiffinmem', content)
+ gdal.FileFromMemBuffer("/vsimem/tiffinmem", content)
- ds = gdal.Open('/vsimem/tiffinmem', gdal.GA_Update)
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsimem/tiffinmem", gdal.GA_Update)
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
ds.GetRasterBand(1).Fill(0)
ds = None
- ds = gdal.Open('/vsimem/tiffinmem')
- assert ds.GetRasterBand(1).Checksum() == 0, \
- ('Expected checksum = %d. Got = %d' % (0, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsimem/tiffinmem")
+ assert ds.GetRasterBand(1).Checksum() == 0, "Expected checksum = %d. Got = %d" % (
+ 0,
+ ds.GetRasterBand(1).Checksum(),
+ )
ds = None
# Also test with anti-slash
- ds = gdal.Open('/vsimem\\tiffinmem')
- assert ds.GetRasterBand(1).Checksum() == 0, \
- ('Expected checksum = %d. Got = %d' % (0, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsimem\\tiffinmem")
+ assert ds.GetRasterBand(1).Checksum() == 0, "Expected checksum = %d. Got = %d" % (
+ 0,
+ ds.GetRasterBand(1).Checksum(),
+ )
ds = None
# Release memory associated to the in-memory file
- gdal.Unlink('/vsimem/tiffinmem')
+ gdal.Unlink("/vsimem/tiffinmem")
+
###############################################################################
# Test reading a tiff from inside a zip in a memory buffer !
@@ -598,17 +668,19 @@ def test_tiff_vsizip_and_mem():
except AttributeError:
pytest.skip()
- content = open('data/byte.tif.zip', mode='rb').read()
+ content = open("data/byte.tif.zip", mode="rb").read()
# Create in-memory file
- gdal.FileFromMemBuffer('/vsimem/tiffinmem.zip', content)
+ gdal.FileFromMemBuffer("/vsimem/tiffinmem.zip", content)
- ds = gdal.Open('/vsizip/vsimem/tiffinmem.zip/byte.tif')
- assert ds.GetRasterBand(1).Checksum() == 4672, \
- ('Expected checksum = %d. Got = %d' % (4672, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsizip/vsimem/tiffinmem.zip/byte.tif")
+ assert (
+ ds.GetRasterBand(1).Checksum() == 4672
+ ), "Expected checksum = %d. Got = %d" % (4672, ds.GetRasterBand(1).Checksum())
# Release memory associated to the in-memory file
- gdal.Unlink('/vsimem/tiffinmem.zip')
+ gdal.Unlink("/vsimem/tiffinmem.zip")
+
###############################################################################
# Test reading a GeoTIFF with only ProjectedCSTypeGeoKey defined (ticket #3019)
@@ -616,58 +688,67 @@ def test_tiff_vsizip_and_mem():
def test_tiff_ProjectedCSTypeGeoKey_only():
- ds = gdal.Open('data/ticket3019.tif')
- assert ds.GetProjectionRef().find('WGS 84 / UTM zone 31N') != -1
+ ds = gdal.Open("data/ticket3019.tif")
+ assert ds.GetProjectionRef().find("WGS 84 / UTM zone 31N") != -1
ds = None
+
###############################################################################
# Test reading a GeoTIFF with only GTModelTypeGeoKey defined
def test_tiff_GTModelTypeGeoKey_only():
- ds = gdal.Open('data/GTModelTypeGeoKey_only.tif')
- assert ds.GetProjectionRef() in ('LOCAL_CS["unnamed"]', 'LOCAL_CS["unnamed",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]')
+ ds = gdal.Open("data/GTModelTypeGeoKey_only.tif")
+ assert ds.GetProjectionRef() in (
+ 'LOCAL_CS["unnamed"]',
+ 'LOCAL_CS["unnamed",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]',
+ )
ds = None
+
###############################################################################
# Test reading a 12bit jpeg compressed geotiff.
-@pytest.mark.skipif('SKIP_TIFF_JPEG12' in os.environ, reason='Crashes on build-windows-msys2-mingw')
+@pytest.mark.skipif(
+ "SKIP_TIFF_JPEG12" in os.environ, reason="Crashes on build-windows-msys2-mingw"
+)
def test_tiff_12bitjpeg():
- old_accum = gdal.GetConfigOption('CPL_ACCUM_ERROR_MSG', 'OFF')
- gdal.SetConfigOption('CPL_ACCUM_ERROR_MSG', 'ON')
+ old_accum = gdal.GetConfigOption("CPL_ACCUM_ERROR_MSG", "OFF")
+ gdal.SetConfigOption("CPL_ACCUM_ERROR_MSG", "ON")
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
- gdal.Unlink('data/mandrilmini_12bitjpeg.tif.aux.xml')
+ gdal.Unlink("data/mandrilmini_12bitjpeg.tif.aux.xml")
try:
- ds = gdal.Open('data/mandrilmini_12bitjpeg.tif')
+ ds = gdal.Open("data/mandrilmini_12bitjpeg.tif")
ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1)
except:
ds = None
gdal.PopErrorHandler()
- gdal.SetConfigOption('CPL_ACCUM_ERROR_MSG', old_accum)
+ gdal.SetConfigOption("CPL_ACCUM_ERROR_MSG", old_accum)
- if gdal.GetLastErrorMsg().find('Unsupported JPEG data precision 12') != -1:
- pytest.skip('12bit jpeg not available')
+ if gdal.GetLastErrorMsg().find("Unsupported JPEG data precision 12") != -1:
+ pytest.skip("12bit jpeg not available")
elif ds is None:
- pytest.fail('failed to open 12bit jpeg file with unexpected error')
+ pytest.fail("failed to open 12bit jpeg file with unexpected error")
try:
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
except:
pass
- assert not (stats[2] < 2150 or stats[2] > 2180 or str(stats[2]) == 'nan'), \
- 'did not get expected mean for band1.'
+ assert not (
+ stats[2] < 2150 or stats[2] > 2180 or str(stats[2]) == "nan"
+ ), "did not get expected mean for band1."
ds = None
- os.unlink('data/mandrilmini_12bitjpeg.tif.aux.xml')
+ os.unlink("data/mandrilmini_12bitjpeg.tif.aux.xml")
+
###############################################################################
# Test that statistics for TIFF files are stored and correctly read from .aux.xml
@@ -676,13 +757,13 @@ def test_tiff_12bitjpeg():
def test_tiff_read_stats_from_pam():
try:
- os.remove('data/byte.tif.aux.xml')
+ os.remove("data/byte.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
md = ds.GetRasterBand(1).GetMetadata()
- assert 'STATISTICS_MINIMUM' not in md, 'Unexpected presence of STATISTICS_MINIMUM'
+ assert "STATISTICS_MINIMUM" not in md, "Unexpected presence of STATISTICS_MINIMUM"
# Force statistics computation
stats = ds.GetRasterBand(1).GetStatistics(0, 1)
@@ -690,18 +771,18 @@ def test_tiff_read_stats_from_pam():
ds = None
try:
- os.stat('data/byte.tif.aux.xml')
+ os.stat("data/byte.tif.aux.xml")
except OSError:
- pytest.fail('Expected generation of data/byte.tif.aux.xml')
+ pytest.fail("Expected generation of data/byte.tif.aux.xml")
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
# Just read statistics (from PAM) without forcing their computation
stats = ds.GetRasterBand(1).GetStatistics(0, 0)
assert stats[0] == 74.0 and stats[1] == 255.0
ds = None
try:
- os.remove('data/byte.tif.aux.xml')
+ os.remove("data/byte.tif.aux.xml")
except OSError:
pass
@@ -712,11 +793,12 @@ def test_tiff_read_stats_from_pam():
def test_tiff_read_from_tab():
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_read_from_tab.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("tmp/tiff_read_from_tab.tif", 1, 1)
ds = None
- f = open('tmp/tiff_read_from_tab.tab', 'wt')
- f.write("""!table
+ f = open("tmp/tiff_read_from_tab.tab", "wt")
+ f.write(
+ """!table
!version 300
!charset WindowsLatin1
@@ -729,22 +811,30 @@ def test_tiff_read_from_tab():
(400000,1300000) (0,0) Label "Pt 4"
CoordSys Earth Projection 8, 79, "m", -2, 49, 0.9996012717, 400000, -100000
Units "m"
-""")
+"""
+ )
f.close()
- ds = gdal.Open('tmp/tiff_read_from_tab.tif')
+ ds = gdal.Open("tmp/tiff_read_from_tab.tif")
gt = ds.GetGeoTransform()
wkt = ds.GetProjectionRef()
ds = None
- gdal.GetDriverByName('GTiff').Delete('tmp/tiff_read_from_tab.tif')
+ gdal.GetDriverByName("GTiff").Delete("tmp/tiff_read_from_tab.tif")
- assert not os.path.exists('tmp/tiff_read_from_tab.tab')
+ assert not os.path.exists("tmp/tiff_read_from_tab.tab")
- assert gt == (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0), \
- 'did not get expected geotransform'
+ assert gt == (
+ 400000.0,
+ 25.0,
+ 0.0,
+ 1300000.0,
+ 0.0,
+ -25.0,
+ ), "did not get expected geotransform"
+
+ assert "_1936" in wkt, "did not get expected SRS"
- assert '_1936' in wkt, 'did not get expected SRS'
###############################################################################
# Test reading PixelIsPoint file.
@@ -752,28 +842,30 @@ def test_tiff_read_from_tab():
def test_tiff_read_pixelispoint():
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'FALSE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "FALSE")
- ds = gdal.Open('data/byte_point.tif')
+ ds = gdal.Open("data/byte_point.tif")
gt = ds.GetGeoTransform()
ds = None
gt_expected = (440690.0, 60.0, 0.0, 3751350.0, 0.0, -60.0)
- assert gt == gt_expected, 'did not get expected geotransform'
+ assert gt == gt_expected, "did not get expected geotransform"
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'TRUE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "TRUE")
- ds = gdal.Open('data/byte_point.tif')
+ ds = gdal.Open("data/byte_point.tif")
gt = ds.GetGeoTransform()
ds = None
gt_expected = (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)
- assert gt == gt_expected, \
- 'did not get expected geotransform with GTIFF_POINT_GEO_IGNORE TRUE'
+ assert (
+ gt == gt_expected
+ ), "did not get expected geotransform with GTIFF_POINT_GEO_IGNORE TRUE"
+
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", None)
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', None)
###############################################################################
# Test reading a GeoTIFF file with a geomatrix in PixelIsPoint format.
@@ -781,28 +873,30 @@ def test_tiff_read_pixelispoint():
def test_tiff_read_geomatrix():
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'FALSE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "FALSE")
- ds = gdal.Open('data/geomatrix.tif')
+ ds = gdal.Open("data/geomatrix.tif")
gt = ds.GetGeoTransform()
ds = None
gt_expected = (1841001.75, 1.5, -5.0, 1144003.25, -5.0, -1.5)
- assert gt == gt_expected, 'did not get expected geotransform'
+ assert gt == gt_expected, "did not get expected geotransform"
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'TRUE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "TRUE")
- ds = gdal.Open('data/geomatrix.tif')
+ ds = gdal.Open("data/geomatrix.tif")
gt = ds.GetGeoTransform()
ds = None
gt_expected = (1841000.0, 1.5, -5.0, 1144000.0, -5.0, -1.5)
- assert gt == gt_expected, \
- 'did not get expected geotransform with GTIFF_POINT_GEO_IGNORE TRUE'
+ assert (
+ gt == gt_expected
+ ), "did not get expected geotransform with GTIFF_POINT_GEO_IGNORE TRUE"
+
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", None)
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', None)
###############################################################################
# Test reading a GeoTIFF file with tiepoints in PixelIsPoint format.
@@ -810,26 +904,31 @@ def test_tiff_read_geomatrix():
def test_tiff_read_tiepoints_pixelispoint():
- ds = gdal.Open('data/byte_gcp_pixelispoint.tif')
- assert ds.GetMetadataItem('AREA_OR_POINT') == 'Point'
+ ds = gdal.Open("data/byte_gcp_pixelispoint.tif")
+ assert ds.GetMetadataItem("AREA_OR_POINT") == "Point"
assert ds.GetGCPCount() == 4
gcp = ds.GetGCPs()[0]
- assert (gcp.GCPPixel == pytest.approx(0.5, abs=1e-5) and \
- gcp.GCPLine == pytest.approx(0.5, abs=1e-5) and \
- gcp.GCPX == pytest.approx(-180, abs=1e-5) and \
- gcp.GCPY == pytest.approx(90, abs=1e-5) and \
- gcp.GCPZ == pytest.approx(0, abs=1e-5))
-
- with gdaltest.config_option('GTIFF_POINT_GEO_IGNORE', 'YES'):
- ds = gdal.Open('data/byte_gcp_pixelispoint.tif')
- assert ds.GetMetadataItem('AREA_OR_POINT') == 'Point'
+ assert (
+ gcp.GCPPixel == pytest.approx(0.5, abs=1e-5)
+ and gcp.GCPLine == pytest.approx(0.5, abs=1e-5)
+ and gcp.GCPX == pytest.approx(-180, abs=1e-5)
+ and gcp.GCPY == pytest.approx(90, abs=1e-5)
+ and gcp.GCPZ == pytest.approx(0, abs=1e-5)
+ )
+
+ with gdaltest.config_option("GTIFF_POINT_GEO_IGNORE", "YES"):
+ ds = gdal.Open("data/byte_gcp_pixelispoint.tif")
+ assert ds.GetMetadataItem("AREA_OR_POINT") == "Point"
assert ds.GetGCPCount() == 4
gcp = ds.GetGCPs()[0]
- assert (gcp.GCPPixel == pytest.approx(0, abs=1e-5) and \
- gcp.GCPLine == pytest.approx(0, abs=1e-5) and \
- gcp.GCPX == pytest.approx(-180, abs=1e-5) and \
- gcp.GCPY == pytest.approx(90, abs=1e-5) and \
- gcp.GCPZ == pytest.approx(0, abs=1e-5))
+ assert (
+ gcp.GCPPixel == pytest.approx(0, abs=1e-5)
+ and gcp.GCPLine == pytest.approx(0, abs=1e-5)
+ and gcp.GCPX == pytest.approx(-180, abs=1e-5)
+ and gcp.GCPY == pytest.approx(90, abs=1e-5)
+ and gcp.GCPZ == pytest.approx(0, abs=1e-5)
+ )
+
###############################################################################
# Test that we don't crash when reading a TIFF with corrupted GeoTIFF tags
@@ -837,15 +936,17 @@ def test_tiff_read_tiepoints_pixelispoint():
def test_tiff_read_corrupted_gtiff():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/corrupted_gtiff_tags.tif')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/corrupted_gtiff_tags.tif")
gdal.PopErrorHandler()
del ds
err_msg = gdal.GetLastErrorMsg()
- assert (not (err_msg.find('IO error during') == -1 and \
- err_msg.find('Error fetching data for field') == -1)), \
- 'did not get expected error message'
+ assert not (
+ err_msg.find("IO error during") == -1
+ and err_msg.find("Error fetching data for field") == -1
+ ), "did not get expected error message"
+
###############################################################################
# Test that we don't crash when reading a TIFF with corrupted GeoTIFF tags
@@ -854,59 +955,65 @@ def test_tiff_read_corrupted_gtiff():
def test_tiff_read_tag_without_null_byte():
gdal.ErrorReset()
- oldval = gdal.GetConfigOption('CPL_DEBUG')
- gdal.SetConfigOption('CPL_DEBUG', 'OFF')
- ds = gdal.Open('data/tag_without_null_byte.tif')
- gdal.SetConfigOption('CPL_DEBUG', oldval)
- assert gdal.GetLastErrorType() == 0, \
- 'should have not emitted a warning, but only a CPLDebug() message'
+ oldval = gdal.GetConfigOption("CPL_DEBUG")
+ gdal.SetConfigOption("CPL_DEBUG", "OFF")
+ ds = gdal.Open("data/tag_without_null_byte.tif")
+ gdal.SetConfigOption("CPL_DEBUG", oldval)
+ assert (
+ gdal.GetLastErrorType() == 0
+ ), "should have not emitted a warning, but only a CPLDebug() message"
del ds
###############################################################################
# Test the effect of the GTIFF_IGNORE_READ_ERRORS configuration option (#3994)
+
def test_tiff_read_buggy_packbits():
- old_val = gdal.GetConfigOption('GTIFF_IGNORE_READ_ERRORS')
- gdal.SetConfigOption('GTIFF_IGNORE_READ_ERRORS', None)
- ds = gdal.Open('data/byte_buggy_packbits.tif')
- gdal.SetConfigOption('GTIFF_IGNORE_READ_ERRORS', old_val)
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ old_val = gdal.GetConfigOption("GTIFF_IGNORE_READ_ERRORS")
+ gdal.SetConfigOption("GTIFF_IGNORE_READ_ERRORS", None)
+ ds = gdal.Open("data/byte_buggy_packbits.tif")
+ gdal.SetConfigOption("GTIFF_IGNORE_READ_ERRORS", old_val)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ret = ds.ReadRaster(0, 0, 20, 20)
gdal.PopErrorHandler()
- assert ret is None, 'did not expected a valid result'
+ assert ret is None, "did not expected a valid result"
ds = None
- gdal.SetConfigOption('GTIFF_IGNORE_READ_ERRORS', 'YES')
- ds = gdal.Open('data/byte_buggy_packbits.tif')
- gdal.SetConfigOption('GTIFF_IGNORE_READ_ERRORS', old_val)
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.SetConfigOption("GTIFF_IGNORE_READ_ERRORS", "YES")
+ ds = gdal.Open("data/byte_buggy_packbits.tif")
+ gdal.SetConfigOption("GTIFF_IGNORE_READ_ERRORS", old_val)
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ret = ds.ReadRaster(0, 0, 20, 20)
gdal.PopErrorHandler()
- assert ret is not None, 'expected a valid result'
+ assert ret is not None, "expected a valid result"
ds = None
###############################################################################
# Test reading a GeoEye _rpc.txt (#3639)
+
def test_tiff_read_rpc_txt():
- shutil.copy('data/byte.tif', 'tmp/test.tif')
- shutil.copy('data/test_rpc.txt', 'tmp/test_rpc.txt')
- ds = gdal.Open('tmp/test.tif')
- rpc_md = ds.GetMetadata('RPC')
+ shutil.copy("data/byte.tif", "tmp/test.tif")
+ shutil.copy("data/test_rpc.txt", "tmp/test_rpc.txt")
+ ds = gdal.Open("tmp/test.tif")
+ rpc_md = ds.GetMetadata("RPC")
ds = None
- os.remove('tmp/test.tif')
- os.remove('tmp/test_rpc.txt')
+ os.remove("tmp/test.tif")
+ os.remove("tmp/test_rpc.txt")
- assert rpc_md['HEIGHT_OFF'] == '+0300.000 meters', \
- ('HEIGHT_OFF wrong:"' + rpc_md['HEIGHT_OFF'] + '"')
+ assert rpc_md["HEIGHT_OFF"] == "+0300.000 meters", (
+ 'HEIGHT_OFF wrong:"' + rpc_md["HEIGHT_OFF"] + '"'
+ )
+
+ assert (
+ rpc_md["LINE_DEN_COEFF"].find("+1.000000000000000E+00 -5.207696939454288E-03")
+ == 0
+ ), "LINE_DEN_COEFF wrong"
- assert (rpc_md['LINE_DEN_COEFF'].find(
- '+1.000000000000000E+00 -5.207696939454288E-03') == 0), \
- 'LINE_DEN_COEFF wrong'
###############################################################################
# Test reading a TIFF with the RPC tag per
@@ -915,14 +1022,16 @@ def test_tiff_read_rpc_txt():
def test_tiff_read_rpc_tif():
- ds = gdal.Open('data/byte_rpc.tif')
- rpc_md = ds.GetMetadata('RPC')
+ ds = gdal.Open("data/byte_rpc.tif")
+ rpc_md = ds.GetMetadata("RPC")
ds = None
- assert rpc_md['HEIGHT_OFF'] == '300', ('HEIGHT_OFF wrong:' + rpc_md['HEIGHT_OFF'])
+ assert rpc_md["HEIGHT_OFF"] == "300", "HEIGHT_OFF wrong:" + rpc_md["HEIGHT_OFF"]
+
+ assert (
+ rpc_md["LINE_DEN_COEFF"].find("1 -0.00520769693945429") == 0
+ ), "LINE_DEN_COEFF wrong"
- assert rpc_md['LINE_DEN_COEFF'].find('1 -0.00520769693945429') == 0, \
- 'LINE_DEN_COEFF wrong'
###############################################################################
# Test a very small TIFF with only 4 tags :
@@ -936,17 +1045,20 @@ def test_tiff_read_rpc_tif():
def test_tiff_small():
- content = '\x49\x49\x2A\x00\x08\x00\x00\x00\x04\x00\x00\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x17\x01\x04\x00\x01\x00\x00\x00\x01\x00\x00\x00'
+ content = "\x49\x49\x2A\x00\x08\x00\x00\x00\x04\x00\x00\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x17\x01\x04\x00\x01\x00\x00\x00\x01\x00\x00\x00"
# Create in-memory file
- gdal.FileFromMemBuffer('/vsimem/small.tif', content)
+ gdal.FileFromMemBuffer("/vsimem/small.tif", content)
- ds = gdal.Open('/vsimem/small.tif')
- assert ds.GetRasterBand(1).Checksum() == 0, \
- ('Expected checksum = %d. Got = %d' % (0, ds.GetRasterBand(1).Checksum()))
+ ds = gdal.Open("/vsimem/small.tif")
+ assert ds.GetRasterBand(1).Checksum() == 0, "Expected checksum = %d. Got = %d" % (
+ 0,
+ ds.GetRasterBand(1).Checksum(),
+ )
# Release memory associated to the in-memory file
- gdal.Unlink('/vsimem/small.tif')
+ gdal.Unlink("/vsimem/small.tif")
+
###############################################################################
# Test that we can workaround a DoS with
@@ -954,101 +1066,115 @@ def test_tiff_small():
def test_tiff_dos_strip_chop():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/tiff_dos_strip_chop.tif')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/tiff_dos_strip_chop.tif")
gdal.PopErrorHandler()
del ds
+
###############################################################################
# Test reading EXIF and GPS metadata
def test_tiff_read_exif_and_gps():
- ds = gdal.Open('data/exif_and_gps.tif')
- exif_md = ds.GetMetadata('EXIF')
+ ds = gdal.Open("data/exif_and_gps.tif")
+ exif_md = ds.GetMetadata("EXIF")
ds = None
assert exif_md is not None and exif_md
- ds = gdal.Open('data/exif_and_gps.tif')
- EXIF_GPSVersionID = ds.GetMetadataItem('EXIF_GPSVersionID', 'EXIF')
+ ds = gdal.Open("data/exif_and_gps.tif")
+ EXIF_GPSVersionID = ds.GetMetadataItem("EXIF_GPSVersionID", "EXIF")
ds = None
assert EXIF_GPSVersionID is not None
# We should not get any EXIF metadata with that file
- ds = gdal.Open('data/byte.tif')
- exif_md = ds.GetMetadata('EXIF')
+ ds = gdal.Open("data/byte.tif")
+ exif_md = ds.GetMetadata("EXIF")
ds = None
- assert (exif_md is None or not exif_md)
+ assert exif_md is None or not exif_md
+
###############################################################################
# Test reading a pixel interleaved RGBA JPEG-compressed TIFF
def test_tiff_jpeg_rgba_pixel_interleaved():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdal.Open('data/stefan_full_rgba_jpeg_contig.tif')
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- assert md['INTERLEAVE'] == 'PIXEL'
+ ds = gdal.Open("data/stefan_full_rgba_jpeg_contig.tif")
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ assert md["INTERLEAVE"] == "PIXEL"
expected_cs = [16404, 62700, 37913, 14174]
for i in range(4):
cs = ds.GetRasterBand(i + 1).Checksum()
assert cs == expected_cs[i]
- assert ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == gdal.GCI_RedBand + i
+ assert (
+ ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == gdal.GCI_RedBand + i
+ )
ds = None
+
###############################################################################
# Test reading a band interleaved RGBA JPEG-compressed TIFF
def test_tiff_jpeg_rgba_band_interleaved():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdal.Open('data/stefan_full_rgba_jpeg_separate.tif')
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- assert md['INTERLEAVE'] == 'BAND'
+ ds = gdal.Open("data/stefan_full_rgba_jpeg_separate.tif")
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ assert md["INTERLEAVE"] == "BAND"
expected_cs = [16404, 62700, 37913, 14174]
for i in range(4):
cs = ds.GetRasterBand(i + 1).Checksum()
assert cs == expected_cs[i]
- assert ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == gdal.GCI_RedBand + i
+ assert (
+ ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == gdal.GCI_RedBand + i
+ )
ds = None
+
###############################################################################
# Test reading a YCbCr JPEG all-in-one-strip multiband TIFF (#3259, #3894)
def test_tiff_read_online_1():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- if not gdaltest.download_file('http://trac.osgeo.org/gdal/raw-attachment/ticket/3259/imgpb17.tif', 'imgpb17.tif'):
+ if not gdaltest.download_file(
+ "http://trac.osgeo.org/gdal/raw-attachment/ticket/3259/imgpb17.tif",
+ "imgpb17.tif",
+ ):
pytest.skip()
- ds = gdal.Open('tmp/cache/imgpb17.tif')
+ ds = gdal.Open("tmp/cache/imgpb17.tif")
gdal.ErrorReset()
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
assert cs == 62628 or cs == 28554
+
###############################################################################
# Use GTIFF_DIRECT_IO=YES option combined with /vsicurl to test for multi-range
# support
@@ -1056,13 +1182,15 @@ def test_tiff_read_online_1():
def test_tiff_read_vsicurl_multirange():
- if gdal.GetDriverByName('HTTP') is None:
+ if gdal.GetDriverByName("HTTP") is None:
pytest.skip()
webserver_process = None
webserver_port = 0
- (webserver_process, webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (webserver_process, webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if webserver_port == 0:
pytest.skip()
@@ -1071,74 +1199,82 @@ def test_tiff_read_vsicurl_multirange():
try:
filesize = 262976
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/utm.tif', 200, {'Content-Length': '%d' % filesize})
+ handler.add("HEAD", "/utm.tif", 200, {"Content-Length": "%d" % filesize})
+
def method(request):
- #sys.stderr.write('%s\n' % str(request.headers))
+ # sys.stderr.write('%s\n' % str(request.headers))
- if request.headers['Range'].startswith('bytes='):
- rng = request.headers['Range'][len('bytes='):]
- assert len(rng.split('-')) == 2
- start = int(rng.split('-')[0])
- end = int(rng.split('-')[1])
+ if request.headers["Range"].startswith("bytes="):
+ rng = request.headers["Range"][len("bytes=") :]
+ assert len(rng.split("-")) == 2
+ start = int(rng.split("-")[0])
+ end = int(rng.split("-")[1])
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(206)
- request.send_header('Content-type', 'application/octet-stream')
- request.send_header('Content-Range', 'bytes %d-%d/%d' % (start, end, filesize))
- request.send_header('Content-Length', end - start + 1)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "application/octet-stream")
+ request.send_header(
+ "Content-Range", "bytes %d-%d/%d" % (start, end, filesize)
+ )
+ request.send_header("Content-Length", end - start + 1)
+ request.send_header("Connection", "close")
request.end_headers()
- with open('../gdrivers/data/utm.tif', 'rb') as f:
+ with open("../gdrivers/data/utm.tif", "rb") as f:
f.seek(start, 0)
request.wfile.write(f.read(end - start + 1))
for i in range(6):
- handler.add('GET', '/utm.tif', custom_method=method)
+ handler.add("GET", "/utm.tif", custom_method=method)
with webserver.install_http_handler(handler):
- with gdaltest.config_options({ 'GTIFF_DIRECT_IO': 'YES',
- 'CPL_VSIL_CURL_ALLOWED_EXTENSIONS': '.tif',
- 'GDAL_DISABLE_READDIR_ON_OPEN': 'EMPTY_DIR' }):
- ds = gdal.Open('/vsicurl/http://127.0.0.1:%d/utm.tif' % webserver_port)
- assert ds is not None, 'could not open dataset'
+ with gdaltest.config_options(
+ {
+ "GTIFF_DIRECT_IO": "YES",
+ "CPL_VSIL_CURL_ALLOWED_EXTENSIONS": ".tif",
+ "GDAL_DISABLE_READDIR_ON_OPEN": "EMPTY_DIR",
+ }
+ ):
+ ds = gdal.Open("/vsicurl/http://127.0.0.1:%d/utm.tif" % webserver_port)
+ assert ds is not None, "could not open dataset"
# Read subsampled data
subsampled_data = ds.ReadRaster(0, 0, 512, 32, 128, 4)
ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 128, 4)
+ ds = gdal.GetDriverByName("MEM").Create("", 128, 4)
ds.WriteRaster(0, 0, 128, 4, subsampled_data)
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 6429, 'wrong checksum'
+ assert cs == 6429, "wrong checksum"
finally:
webserver.server_stop(webserver_process, webserver_port)
gdal.VSICurlClearCache()
+
###############################################################################
# Test reading a TIFF made of a single-strip that is more than 2GB (#5403)
def test_tiff_read_huge4GB():
- if not gdaltest.filesystem_supports_sparse_files('tmp'):
- ds = gdal.Open('data/huge4GB.tif')
+ if not gdaltest.filesystem_supports_sparse_files("tmp"):
+ ds = gdal.Open("data/huge4GB.tif")
assert ds is not None
else:
- shutil.copy('data/huge4GB.tif', 'tmp/huge4GB.tif')
- f = open('tmp/huge4GB.tif', 'rb+')
+ shutil.copy("data/huge4GB.tif", "tmp/huge4GB.tif")
+ f = open("tmp/huge4GB.tif", "rb+")
f.seek(65535 * 65535 + 401)
- f.write(' '.encode('ascii'))
+ f.write(" ".encode("ascii"))
f.close()
- ds = gdal.Open('tmp/huge4GB.tif')
+ ds = gdal.Open("tmp/huge4GB.tif")
if ds is None:
- os.remove('tmp/huge4GB.tif')
+ os.remove("tmp/huge4GB.tif")
pytest.fail()
ds = None
- os.remove('tmp/huge4GB.tif')
+ os.remove("tmp/huge4GB.tif")
###############################################################################
@@ -1147,34 +1283,36 @@ def test_tiff_read_huge4GB():
def test_tiff_read_bigtiff():
- ds = gdal.Open('data/byte_bigtiff_strip5lines.tif')
+ ds = gdal.Open("data/byte_bigtiff_strip5lines.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == 4672
+
###############################################################################
# Test reading in TIFF metadata domain
def test_tiff_read_tiff_metadata():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdal.Open('data/stefan_full_rgba_jpeg_contig.tif')
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') == '254'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_0', 'TIFF') == '770'
- assert ds.GetRasterBand(1).GetMetadataItem('JPEGTABLES', 'TIFF').find('FFD8') == 0
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_100_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_100', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_100_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_100', 'TIFF') is None
+ ds = gdal.Open("data/stefan_full_rgba_jpeg_contig.tif")
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") == "254"
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_0", "TIFF") == "770"
+ assert ds.GetRasterBand(1).GetMetadataItem("JPEGTABLES", "TIFF").find("FFD8") == 0
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_100_0", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_100", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_100_0", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_100", "TIFF") is None
+
+ ds = gdal.Open("data/stefan_full_rgba_jpeg_separate.tif")
+ assert ds.GetRasterBand(4).GetMetadataItem("BLOCK_OFFSET_0_2", "TIFF") == "11071"
+ assert ds.GetRasterBand(4).GetMetadataItem("BLOCK_SIZE_0_2", "TIFF") == "188"
- ds = gdal.Open('data/stefan_full_rgba_jpeg_separate.tif')
- assert ds.GetRasterBand(4).GetMetadataItem('BLOCK_OFFSET_0_2', 'TIFF') == '11071'
- assert ds.GetRasterBand(4).GetMetadataItem('BLOCK_SIZE_0_2', 'TIFF') == '188'
###############################################################################
# Test reading a JPEG-in-TIFF with tiles of irregular size (corrupted image)
@@ -1182,24 +1320,25 @@ def test_tiff_read_tiff_metadata():
def test_tiff_read_irregular_tile_size_jpeg_in_tiff():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdal.Open('data/irregular_tile_size_jpeg_in_tiff.tif')
+ ds = gdal.Open("data/irregular_tile_size_jpeg_in_tiff.tif")
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ds.GetRasterBand(1).Checksum()
gdal.PopErrorHandler()
assert gdal.GetLastErrorType() != 0
gdal.ErrorReset()
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ds.GetRasterBand(1).GetOverview(0).Checksum()
gdal.PopErrorHandler()
assert gdal.GetLastErrorType() != 0
gdal.ErrorReset()
+
###############################################################################
# Test GTIFF_DIRECT_IO and GTIFF_VIRTUAL_MEM_IO optimizations
@@ -1209,96 +1348,175 @@ def test_tiff_direct_and_virtual_mem_io():
# Test with pixel-interleaved and band-interleaved datasets
for dt in [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_CInt16]:
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
dt_size = 1
if dt == gdal.GDT_Int16:
dt_size = 2
- mem_ds = gdal.GetDriverByName('MEM').Create('', src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, dt)
- data = src_ds.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, buf_type=dt)
+ mem_ds = gdal.GetDriverByName("MEM").Create(
+ "", src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, dt
+ )
+ data = src_ds.ReadRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, buf_type=dt
+ )
new_vals = []
for i in range(4 * src_ds.RasterXSize * src_ds.RasterYSize):
- new_vals.append(chr(data[2 * i]).encode('latin1'))
- new_vals.append(chr(255 - data[2 * i]).encode('latin1'))
- data = b''.join(new_vals)
- mem_ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data, buf_type=dt)
+ new_vals.append(chr(data[2 * i]).encode("latin1"))
+ new_vals.append(chr(255 - data[2 * i]).encode("latin1"))
+ data = b"".join(new_vals)
+ mem_ds.WriteRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data, buf_type=dt
+ )
src_ds = mem_ds
elif dt == gdal.GDT_CInt16:
dt_size = 4
- mem_ds = gdal.GetDriverByName('MEM').Create('', src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, dt)
- data = src_ds.ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, buf_type=dt)
+ mem_ds = gdal.GetDriverByName("MEM").Create(
+ "", src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, dt
+ )
+ data = src_ds.ReadRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, buf_type=dt
+ )
new_vals = []
for i in range(4 * src_ds.RasterXSize * src_ds.RasterYSize):
- new_vals.append(chr(data[4 * i]).encode('latin1'))
- new_vals.append(chr(data[4 * i]).encode('latin1'))
- new_vals.append(chr(255 - data[4 * i]).encode('latin1'))
- new_vals.append(chr(255 - data[4 * i]).encode('latin1'))
- data = b''.join(new_vals)
- mem_ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data, buf_type=dt)
+ new_vals.append(chr(data[4 * i]).encode("latin1"))
+ new_vals.append(chr(data[4 * i]).encode("latin1"))
+ new_vals.append(chr(255 - data[4 * i]).encode("latin1"))
+ new_vals.append(chr(255 - data[4 * i]).encode("latin1"))
+ data = b"".join(new_vals)
+ mem_ds.WriteRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data, buf_type=dt
+ )
src_ds = mem_ds
for truncated in [False, True]:
if truncated:
nitermax = 4
- options = [('GTIFF_DIRECT_IO', '/vsimem'), ('GTIFF_VIRTUAL_MEM_IO', '/vsimem')]
+ options = [
+ ("GTIFF_DIRECT_IO", "/vsimem"),
+ ("GTIFF_VIRTUAL_MEM_IO", "/vsimem"),
+ ]
else:
nitermax = 8
- options = [('GTIFF_DIRECT_IO', '/vsimem'), ('GTIFF_VIRTUAL_MEM_IO', '/vsimem'), ('GTIFF_VIRTUAL_MEM_IO', 'tmp')]
+ options = [
+ ("GTIFF_DIRECT_IO", "/vsimem"),
+ ("GTIFF_VIRTUAL_MEM_IO", "/vsimem"),
+ ("GTIFF_VIRTUAL_MEM_IO", "tmp"),
+ ]
for (option, prefix) in options:
if dt == gdal.GDT_CInt16:
niter = 3
- elif prefix == 'tmp':
+ elif prefix == "tmp":
niter = 4
else:
niter = nitermax
for i in range(niter):
if i == 0:
- filename = '%s/tiff_direct_io_contig.tif' % prefix
+ filename = "%s/tiff_direct_io_contig.tif" % prefix
creation_options = []
- if (dt == gdal.GDT_CInt16 or dt == gdal.GDT_Int16):
- creation_options += ['ENDIANNESS=INVERTED']
- out_ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=creation_options)
+ if dt == gdal.GDT_CInt16 or dt == gdal.GDT_Int16:
+ creation_options += ["ENDIANNESS=INVERTED"]
+ out_ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename, src_ds, options=creation_options
+ )
out_ds.FlushCache()
out_ds = None
elif i == 1:
- filename = '%s/tiff_direct_io_separate.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=['INTERLEAVE=BAND'])
+ filename = "%s/tiff_direct_io_separate.tif" % prefix
+ out_ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename, src_ds, options=["INTERLEAVE=BAND"]
+ )
out_ds.FlushCache()
out_ds = None
elif i == 2:
- filename = '%s/tiff_direct_io_tiled_contig.tif' % prefix
- creation_options = ['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=16']
- if (dt == gdal.GDT_CInt16 or dt == gdal.GDT_Int16):
- creation_options += ['ENDIANNESS=INVERTED']
- if option == 'GTIFF_VIRTUAL_MEM_IO' and prefix == '/vsimem':
- gdal.Translate(filename, src_ds, bandList=[1, 2, 3], creationOptions=creation_options)
+ filename = "%s/tiff_direct_io_tiled_contig.tif" % prefix
+ creation_options = [
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=16",
+ ]
+ if dt == gdal.GDT_CInt16 or dt == gdal.GDT_Int16:
+ creation_options += ["ENDIANNESS=INVERTED"]
+ if option == "GTIFF_VIRTUAL_MEM_IO" and prefix == "/vsimem":
+ gdal.Translate(
+ filename,
+ src_ds,
+ bandList=[1, 2, 3],
+ creationOptions=creation_options,
+ )
else:
- out_ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=creation_options)
+ out_ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename, src_ds, options=creation_options
+ )
out_ds.FlushCache()
out_ds = None
elif i == 3:
- filename = '%s/tiff_direct_io_tiled_separate.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=16', 'INTERLEAVE=BAND'])
+ filename = "%s/tiff_direct_io_tiled_separate.tif" % prefix
+ out_ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename,
+ src_ds,
+ options=[
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=16",
+ "INTERLEAVE=BAND",
+ ],
+ )
out_ds.FlushCache()
out_ds = None
elif i == 4:
- filename = '%s/tiff_direct_io_sparse.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').Create(filename, 165, 150, 4, dt, options=['SPARSE_OK=YES'])
+ filename = "%s/tiff_direct_io_sparse.tif" % prefix
+ out_ds = gdal.GetDriverByName("GTiff").Create(
+ filename, 165, 150, 4, dt, options=["SPARSE_OK=YES"]
+ )
out_ds.FlushCache()
out_ds = None
elif i == 5:
- filename = '%s/tiff_direct_io_sparse_separate.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').Create(filename, 165, 150, 4, dt, options=['SPARSE_OK=YES', 'INTERLEAVE=BAND'])
+ filename = "%s/tiff_direct_io_sparse_separate.tif" % prefix
+ out_ds = gdal.GetDriverByName("GTiff").Create(
+ filename,
+ 165,
+ 150,
+ 4,
+ dt,
+ options=["SPARSE_OK=YES", "INTERLEAVE=BAND"],
+ )
out_ds.FlushCache()
out_ds = None
elif i == 6:
- filename = '%s/tiff_direct_io_sparse_tiled.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').Create(filename, 165, 150, 4, dt, options=['SPARSE_OK=YES', 'TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=16'])
+ filename = "%s/tiff_direct_io_sparse_tiled.tif" % prefix
+ out_ds = gdal.GetDriverByName("GTiff").Create(
+ filename,
+ 165,
+ 150,
+ 4,
+ dt,
+ options=[
+ "SPARSE_OK=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=16",
+ ],
+ )
out_ds.FlushCache()
out_ds = None
else:
- filename = '%s/tiff_direct_io_sparse_tiled_separate.tif' % prefix
- out_ds = gdal.GetDriverByName('GTiff').Create(filename, 165, 150, 4, dt, options=['SPARSE_OK=YES', 'TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=16', 'INTERLEAVE=BAND'])
+ filename = (
+ "%s/tiff_direct_io_sparse_tiled_separate.tif" % prefix
+ )
+ out_ds = gdal.GetDriverByName("GTiff").Create(
+ filename,
+ 165,
+ 150,
+ 4,
+ dt,
+ options=[
+ "SPARSE_OK=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=16",
+ "INTERLEAVE=BAND",
+ ],
+ )
out_ds.FlushCache()
out_ds = None
@@ -1308,13 +1526,20 @@ def test_tiff_direct_and_virtual_mem_io():
nxsize = ds.RasterXSize
nysize = ds.RasterYSize
(nblockxsize, nblockysize) = ds.GetRasterBand(1).GetBlockSize()
- band_interleaved = ds.GetMetadataItem('INTERLEAVE', 'IMAGE_STRUCTURE') == 'BAND'
+ band_interleaved = (
+ ds.GetMetadataItem("INTERLEAVE", "IMAGE_STRUCTURE")
+ == "BAND"
+ )
ds = None
padding = 0
if nblockxsize < nxsize:
if (nysize % nblockysize) != 0:
- padding = ((nxsize + nblockxsize - 1) / nblockxsize * nblockxsize) * (nblockysize - (nysize % nblockysize))
+ padding = (
+ (nxsize + nblockxsize - 1)
+ / nblockxsize
+ * nblockxsize
+ ) * (nblockysize - (nysize % nblockysize))
if (nxsize % nblockxsize) != 0:
padding += nblockxsize - (nxsize % nblockxsize)
padding *= dt_size
@@ -1326,10 +1551,10 @@ def test_tiff_direct_and_virtual_mem_io():
if not band_interleaved:
to_remove += (nbands - 1) * dt_size
- f = gdal.VSIFOpenL(filename, 'rb')
+ f = gdal.VSIFOpenL(filename, "rb")
data = gdal.VSIFReadL(1, 1000000, f)
gdal.VSIFCloseL(f)
- f = gdal.VSIFOpenL(filename, 'wb')
+ f = gdal.VSIFOpenL(filename, "wb")
gdal.VSIFWriteL(data, 1, len(data) - padding - to_remove, f)
gdal.VSIFCloseL(f)
@@ -1343,29 +1568,150 @@ def test_tiff_direct_and_virtual_mem_io():
if truncated:
gdal.PushErrorHandler()
- ref_data_native_type = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize)
+ ref_data_native_type = ds.GetRasterBand(1).ReadRaster(
+ xoff, yoff, xsize, ysize
+ )
ref_data_native_type_whole = ds.GetRasterBand(1).ReadRaster()
- ref_data_native_type_downsampled = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2))
- ref_data_native_type_downsampled_not_nearest = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), resample_alg=gdal.GRIORA_Bilinear)
- ref_data_native_type_upsampled = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=nbands * xsize, buf_ysize=nbands * ysize)
- ref_data_native_type_custom_spacings = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size)
- ref_data_float32 = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32)
- ref_nbands_data_native_type = ds.ReadRaster(xoff, yoff, xsize, ysize)
+ ref_data_native_type_downsampled = ds.GetRasterBand(1).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ )
+ ref_data_native_type_downsampled_not_nearest = ds.GetRasterBand(
+ 1
+ ).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ resample_alg=gdal.GRIORA_Bilinear,
+ )
+ ref_data_native_type_upsampled = ds.GetRasterBand(1).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=nbands * xsize,
+ buf_ysize=nbands * ysize,
+ )
+ ref_data_native_type_custom_spacings = ds.GetRasterBand(
+ 1
+ ).ReadRaster(
+ xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size
+ )
+ ref_data_float32 = ds.GetRasterBand(1).ReadRaster(
+ xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32
+ )
+ ref_nbands_data_native_type = ds.ReadRaster(
+ xoff, yoff, xsize, ysize
+ )
ref_nbands_data_native_type_whole = ds.ReadRaster()
- ref_nbands_data_native_type_downsampled = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2))
- ref_nbands_data_native_type_downsampled_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- ref_nbands_data_native_type_downsampled_not_nearest = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), resample_alg=gdal.GRIORA_Bilinear)
- ref_nbands_data_native_type_upsampled = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=4 * xsize, buf_ysize=4 * ysize)
- ref_nbands_data_native_type_downsampled_x_upsampled_y = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=32 * ysize)
- ref_nbands_data_native_type_unordered_list = ds.ReadRaster(xoff, yoff, xsize, ysize, band_list=[nbands - i for i in range(nbands)])
- ref_nbands_data_native_type_pixel_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- ref_nbands_data_native_type_pixel_interleaved_whole = ds.ReadRaster(buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- ref_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space = ds.ReadRaster(xoff, yoff, xsize, ysize, band_list=[i + 1 for i in range(nbands - 1)], buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- ref_nbands_data_float32 = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32)
- ref_nbands_data_float32_pixel_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32, buf_pixel_space=nbands * sizeof_float, buf_band_space=1 * sizeof_float)
- ref_nbands_data_native_type_custom_spacings = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=2 * nbands * dt_size, buf_band_space=dt_size)
+ ref_nbands_data_native_type_downsampled = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ )
+ ref_nbands_data_native_type_downsampled_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ ref_nbands_data_native_type_downsampled_not_nearest = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ resample_alg=gdal.GRIORA_Bilinear,
+ )
+ ref_nbands_data_native_type_upsampled = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=4 * xsize,
+ buf_ysize=4 * ysize,
+ )
+ ref_nbands_data_native_type_downsampled_x_upsampled_y = (
+ ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=32 * ysize,
+ )
+ )
+ ref_nbands_data_native_type_unordered_list = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ band_list=[nbands - i for i in range(nbands)],
+ )
+ ref_nbands_data_native_type_pixel_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ ref_nbands_data_native_type_pixel_interleaved_whole = ds.ReadRaster(
+ buf_pixel_space=nbands * dt_size, buf_band_space=dt_size
+ )
+ ref_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ band_list=[i + 1 for i in range(nbands - 1)],
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ ref_nbands_data_float32 = ds.ReadRaster(
+ xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32
+ )
+ ref_nbands_data_float32_pixel_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_type=gdal.GDT_Float32,
+ buf_pixel_space=nbands * sizeof_float,
+ buf_band_space=1 * sizeof_float,
+ )
+ ref_nbands_data_native_type_custom_spacings = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=2 * nbands * dt_size,
+ buf_band_space=dt_size,
+ )
if nbands == 3:
- ref_nbands_data_native_type_custom_spacings_2 = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=4 * dt_size, buf_band_space=dt_size)
+ ref_nbands_data_native_type_custom_spacings_2 = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=4 * dt_size,
+ buf_band_space=dt_size,
+ )
if truncated:
gdal.PopErrorHandler()
ds = None
@@ -1373,33 +1719,167 @@ def test_tiff_direct_and_virtual_mem_io():
if truncated:
gdal.PushErrorHandler()
old_val = gdal.GetConfigOption(option)
- gdal.SetConfigOption(option, 'YES')
+ gdal.SetConfigOption(option, "YES")
ds = gdal.Open(filename)
- band_interleaved = ds.GetMetadataItem('INTERLEAVE', 'IMAGE_STRUCTURE') == 'BAND'
- got_data_native_type = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize)
+ band_interleaved = (
+ ds.GetMetadataItem("INTERLEAVE", "IMAGE_STRUCTURE") == "BAND"
+ )
+ got_data_native_type = ds.GetRasterBand(1).ReadRaster(
+ xoff, yoff, xsize, ysize
+ )
got_data_native_type_whole = ds.GetRasterBand(1).ReadRaster()
- got_data_native_type_downsampled = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2))
- got_data_native_type_downsampled_not_nearest = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), resample_alg=gdal.GRIORA_Bilinear)
- got_data_native_type_upsampled = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=nbands * xsize, buf_ysize=nbands * ysize)
- got_data_native_type_custom_spacings = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size)
- got_data_float32 = ds.GetRasterBand(1).ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32)
- got_nbands_data_native_type = ds.ReadRaster(xoff, yoff, xsize, ysize)
+ got_data_native_type_downsampled = ds.GetRasterBand(1).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ )
+ got_data_native_type_downsampled_not_nearest = ds.GetRasterBand(
+ 1
+ ).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ resample_alg=gdal.GRIORA_Bilinear,
+ )
+ got_data_native_type_upsampled = ds.GetRasterBand(1).ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=nbands * xsize,
+ buf_ysize=nbands * ysize,
+ )
+ got_data_native_type_custom_spacings = ds.GetRasterBand(
+ 1
+ ).ReadRaster(
+ xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size
+ )
+ got_data_float32 = ds.GetRasterBand(1).ReadRaster(
+ xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32
+ )
+ got_nbands_data_native_type = ds.ReadRaster(
+ xoff, yoff, xsize, ysize
+ )
got_nbands_data_native_type_whole = ds.ReadRaster()
- got_nbands_data_native_type_bottom_right_downsampled = ds.ReadRaster(ds.RasterXSize - 2, ds.RasterYSize - 1, 2, 1, buf_xsize=1, buf_ysize=1, buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- got_nbands_data_native_type_downsampled = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2))
- got_nbands_data_native_type_downsampled_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- got_nbands_data_native_type_downsampled_not_nearest = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=int(ysize / 2), resample_alg=gdal.GRIORA_Bilinear)
- got_nbands_data_native_type_upsampled = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=4 * xsize, buf_ysize=4 * ysize)
- got_nbands_data_native_type_downsampled_x_upsampled_y = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_xsize=int(xsize / 2), buf_ysize=32 * ysize)
- got_nbands_data_native_type_unordered_list = ds.ReadRaster(xoff, yoff, xsize, ysize, band_list=[nbands - i for i in range(nbands)])
- got_nbands_data_native_type_pixel_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- got_nbands_data_native_type_pixel_interleaved_whole = ds.ReadRaster(buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- got_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space = ds.ReadRaster(xoff, yoff, xsize, ysize, band_list=[i + 1 for i in range(nbands - 1)], buf_pixel_space=nbands * dt_size, buf_band_space=dt_size)
- got_nbands_data_float32 = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32)
- got_nbands_data_float32_pixel_interleaved = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32, buf_pixel_space=nbands * sizeof_float, buf_band_space=1 * sizeof_float)
- got_nbands_data_native_type_custom_spacings = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=2 * nbands * dt_size, buf_band_space=dt_size)
+ got_nbands_data_native_type_bottom_right_downsampled = (
+ ds.ReadRaster(
+ ds.RasterXSize - 2,
+ ds.RasterYSize - 1,
+ 2,
+ 1,
+ buf_xsize=1,
+ buf_ysize=1,
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ )
+ got_nbands_data_native_type_downsampled = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ )
+ got_nbands_data_native_type_downsampled_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ got_nbands_data_native_type_downsampled_not_nearest = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=int(ysize / 2),
+ resample_alg=gdal.GRIORA_Bilinear,
+ )
+ got_nbands_data_native_type_upsampled = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=4 * xsize,
+ buf_ysize=4 * ysize,
+ )
+ got_nbands_data_native_type_downsampled_x_upsampled_y = (
+ ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_xsize=int(xsize / 2),
+ buf_ysize=32 * ysize,
+ )
+ )
+ got_nbands_data_native_type_unordered_list = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ band_list=[nbands - i for i in range(nbands)],
+ )
+ got_nbands_data_native_type_pixel_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ got_nbands_data_native_type_pixel_interleaved_whole = ds.ReadRaster(
+ buf_pixel_space=nbands * dt_size, buf_band_space=dt_size
+ )
+ got_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ band_list=[i + 1 for i in range(nbands - 1)],
+ buf_pixel_space=nbands * dt_size,
+ buf_band_space=dt_size,
+ )
+ got_nbands_data_float32 = ds.ReadRaster(
+ xoff, yoff, xsize, ysize, buf_type=gdal.GDT_Float32
+ )
+ got_nbands_data_float32_pixel_interleaved = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_type=gdal.GDT_Float32,
+ buf_pixel_space=nbands * sizeof_float,
+ buf_band_space=1 * sizeof_float,
+ )
+ got_nbands_data_native_type_custom_spacings = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=2 * nbands * dt_size,
+ buf_band_space=dt_size,
+ )
if nbands == 3:
- got_nbands_data_native_type_custom_spacings_2 = ds.ReadRaster(xoff, yoff, xsize, ysize, buf_pixel_space=4 * dt_size, buf_band_space=dt_size)
+ got_nbands_data_native_type_custom_spacings_2 = ds.ReadRaster(
+ xoff,
+ yoff,
+ xsize,
+ ysize,
+ buf_pixel_space=4 * dt_size,
+ buf_band_space=dt_size,
+ )
ds = None
gdal.SetConfigOption(option, old_val)
if truncated:
@@ -1422,11 +1902,18 @@ def test_tiff_direct_and_virtual_mem_io():
print(i)
pytest.fail(option)
- if ref_data_native_type_downsampled != got_data_native_type_downsampled:
+ if (
+ ref_data_native_type_downsampled
+ != got_data_native_type_downsampled
+ ):
print(option)
pytest.fail(i)
- if not truncated and ref_data_native_type_downsampled_not_nearest != got_data_native_type_downsampled_not_nearest:
+ if (
+ not truncated
+ and ref_data_native_type_downsampled_not_nearest
+ != got_data_native_type_downsampled_not_nearest
+ ):
print(band_interleaved)
print(option)
pytest.fail(i)
@@ -1438,19 +1925,48 @@ def test_tiff_direct_and_virtual_mem_io():
for y in range(ysize):
for x in range(xsize):
for k in range(dt_size):
- if ref_data_native_type_custom_spacings[(y * xsize + x) * nbands * dt_size + k] != got_data_native_type_custom_spacings[(y * xsize + x) * nbands * dt_size + k]:
+ if (
+ ref_data_native_type_custom_spacings[
+ (y * xsize + x) * nbands * dt_size + k
+ ]
+ != got_data_native_type_custom_spacings[
+ (y * xsize + x) * nbands * dt_size + k
+ ]
+ ):
print(gdal.GetDataTypeName(dt))
print(option)
pytest.fail(i)
if not truncated:
for band in range(nbands):
- if ref_nbands_data_native_type_custom_spacings[(y * xsize + x) * 2 * nbands * dt_size + band * dt_size + k] != got_nbands_data_native_type_custom_spacings[(y * xsize + x) * 2 * nbands * dt_size + band * dt_size + k]:
+ if (
+ ref_nbands_data_native_type_custom_spacings[
+ (y * xsize + x) * 2 * nbands * dt_size
+ + band * dt_size
+ + k
+ ]
+ != got_nbands_data_native_type_custom_spacings[
+ (y * xsize + x) * 2 * nbands * dt_size
+ + band * dt_size
+ + k
+ ]
+ ):
print(gdal.GetDataTypeName(dt))
print(option)
pytest.fail(i)
if nbands == 3:
for band in range(nbands):
- if ref_nbands_data_native_type_custom_spacings_2[(y * xsize + x) * 4 * dt_size + band * dt_size + k] != got_nbands_data_native_type_custom_spacings_2[(y * xsize + x) * 4 * dt_size + band * dt_size + k]:
+ if (
+ ref_nbands_data_native_type_custom_spacings_2[
+ (y * xsize + x) * 4 * dt_size
+ + band * dt_size
+ + k
+ ]
+ != got_nbands_data_native_type_custom_spacings_2[
+ (y * xsize + x) * 4 * dt_size
+ + band * dt_size
+ + k
+ ]
+ ):
print(gdal.GetDataTypeName(dt))
print(option)
pytest.fail(i)
@@ -1460,7 +1976,10 @@ def test_tiff_direct_and_virtual_mem_io():
print(option)
pytest.fail(i)
- if not truncated and ref_nbands_data_native_type != got_nbands_data_native_type:
+ if (
+ not truncated
+ and ref_nbands_data_native_type != got_nbands_data_native_type
+ ):
print(band_interleaved)
print(option)
pytest.fail(i)
@@ -1470,20 +1989,33 @@ def test_tiff_direct_and_virtual_mem_io():
print(gdal.GetDataTypeName(dt))
print(option)
pytest.fail(i)
- elif ref_nbands_data_native_type_whole != got_nbands_data_native_type_whole:
+ elif (
+ ref_nbands_data_native_type_whole
+ != got_nbands_data_native_type_whole
+ ):
print(option)
print(i)
pytest.fail(gdal.GetDataTypeName(dt))
if truncated:
- if got_nbands_data_native_type_pixel_interleaved_whole is not None:
+ if (
+ got_nbands_data_native_type_pixel_interleaved_whole
+ is not None
+ ):
print(option)
pytest.fail(i)
- elif ref_nbands_data_native_type_pixel_interleaved_whole != got_nbands_data_native_type_pixel_interleaved_whole:
+ elif (
+ ref_nbands_data_native_type_pixel_interleaved_whole
+ != got_nbands_data_native_type_pixel_interleaved_whole
+ ):
print(i)
pytest.fail(option)
- if truncated and got_nbands_data_native_type_bottom_right_downsampled is not None:
+ if (
+ truncated
+ and got_nbands_data_native_type_bottom_right_downsampled
+ is not None
+ ):
print(gdal.GetDataTypeName(dt))
print(option)
pytest.fail(i)
@@ -1491,19 +2023,31 @@ def test_tiff_direct_and_virtual_mem_io():
if truncated:
continue
- if ref_nbands_data_native_type_downsampled != got_nbands_data_native_type_downsampled:
+ if (
+ ref_nbands_data_native_type_downsampled
+ != got_nbands_data_native_type_downsampled
+ ):
print(option)
pytest.fail(i)
- if ref_nbands_data_native_type_downsampled_interleaved != got_nbands_data_native_type_downsampled_interleaved:
+ if (
+ ref_nbands_data_native_type_downsampled_interleaved
+ != got_nbands_data_native_type_downsampled_interleaved
+ ):
print(option)
pytest.fail(i)
- if ref_nbands_data_native_type_downsampled_not_nearest != got_nbands_data_native_type_downsampled_not_nearest:
+ if (
+ ref_nbands_data_native_type_downsampled_not_nearest
+ != got_nbands_data_native_type_downsampled_not_nearest
+ ):
print(option)
pytest.fail(i)
- if ref_nbands_data_native_type_upsampled != got_nbands_data_native_type_upsampled:
+ if (
+ ref_nbands_data_native_type_upsampled
+ != got_nbands_data_native_type_upsampled
+ ):
print(option)
# import struct
# f1 = open('out1.txt', 'wb')
@@ -1514,7 +2058,10 @@ def test_tiff_direct_and_virtual_mem_io():
# f2.write('%s\n' % str(struct.unpack('B' * 4 * xsize, got_nbands_data_native_type_upsampled[(b * 4 * ysize + y) * 4 * xsize : (b * 4 * ysize + y + 1) * 4 * xsize])))
pytest.fail(i)
- if ref_nbands_data_native_type_downsampled_x_upsampled_y != got_nbands_data_native_type_downsampled_x_upsampled_y:
+ if (
+ ref_nbands_data_native_type_downsampled_x_upsampled_y
+ != got_nbands_data_native_type_downsampled_x_upsampled_y
+ ):
print(option)
# import struct
# f1 = open('out1.txt', 'wb')
@@ -1525,11 +2072,17 @@ def test_tiff_direct_and_virtual_mem_io():
# f2.write('%s\n' % str(struct.unpack('B' * int(xsize/2), got_nbands_data_native_type_downsampled_x_upsampled_y[(b * 32 * ysize + y) * int(xsize/2) : (b * 32 * ysize + y + 1) * int(xsize/2)])))
pytest.fail(i)
- if ref_nbands_data_native_type_unordered_list != got_nbands_data_native_type_unordered_list:
+ if (
+ ref_nbands_data_native_type_unordered_list
+ != got_nbands_data_native_type_unordered_list
+ ):
print(option)
pytest.fail(i)
- if ref_nbands_data_native_type_pixel_interleaved != got_nbands_data_native_type_pixel_interleaved:
+ if (
+ ref_nbands_data_native_type_pixel_interleaved
+ != got_nbands_data_native_type_pixel_interleaved
+ ):
print(option)
pytest.fail(i)
@@ -1537,7 +2090,14 @@ def test_tiff_direct_and_virtual_mem_io():
for x in range(xsize):
for b in range(nbands - 1):
for k in range(dt_size):
- if ref_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space[((y * xsize + x) * nbands + b) * dt_size + k] != got_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space[((y * xsize + x) * nbands + b) * dt_size + k]:
+ if (
+ ref_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space[
+ ((y * xsize + x) * nbands + b) * dt_size + k
+ ]
+ != got_nbands_m_1_data_native_type_pixel_interleaved_with_extra_space[
+ ((y * xsize + x) * nbands + b) * dt_size + k
+ ]
+ ):
print(option)
pytest.fail(i)
@@ -1545,16 +2105,19 @@ def test_tiff_direct_and_virtual_mem_io():
print(option)
pytest.fail(i)
- if ref_nbands_data_float32_pixel_interleaved != got_nbands_data_float32_pixel_interleaved:
+ if (
+ ref_nbands_data_float32_pixel_interleaved
+ != got_nbands_data_float32_pixel_interleaved
+ ):
print(option)
pytest.fail(i)
- ds = gdal.Open('data/byte.tif') # any GTiff file will do
- unreached = ds.GetMetadataItem('UNREACHED_VIRTUALMEMIO_CODE_PATH', '_DEBUG_')
+ ds = gdal.Open("data/byte.tif") # any GTiff file will do
+ unreached = ds.GetMetadataItem("UNREACHED_VIRTUALMEMIO_CODE_PATH", "_DEBUG_")
ds = None
if unreached:
- print('unreached = %s' % unreached)
- pytest.fail('missing code coverage in VirtualMemIO()')
+ print("unreached = %s" % unreached)
+ pytest.fail("missing code coverage in VirtualMemIO()")
###############################################################################
@@ -1564,31 +2127,34 @@ def test_tiff_direct_and_virtual_mem_io():
def test_tiff_read_md1():
try:
- os.remove('data/md_dg.tif.aux.xml')
+ os.remove("data/md_dg.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_dg.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_dg.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2010-04-01 12:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2010-04-01 12:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_dg.tif.aux.xml')
+ assert not os.path.exists("data/md_dg.tif.aux.xml")
+
###############################################################################
# Test CPLKeywordParser on non-conformant .IMD files
@@ -1597,15 +2163,17 @@ def test_tiff_read_md1():
def test_tiff_read_non_conformant_imd():
- gdal.FileFromMemBuffer('/vsimem/test.imd',
- """BEGIN_GROUP = foo\n\tkey = value with space ' not quoted;\n\tkey2 = another one ;\r\nEND_GROUP\nEND\n""");
- gdal.FileFromMemBuffer('/vsimem/test.tif', open('data/byte.tif', 'rb').read())
- ds = gdal.Open('/vsimem/test.tif')
- md = ds.GetMetadata('IMD')
- gdal.Unlink('/vsimem/test.imd')
- gdal.Unlink('/vsimem/test.tif')
- assert md == { 'foo.key': "value with space ' not quoted",
- 'foo.key2': "another one" }
+ gdal.FileFromMemBuffer(
+ "/vsimem/test.imd",
+ """BEGIN_GROUP = foo\n\tkey = value with space ' not quoted;\n\tkey2 = another one ;\r\nEND_GROUP\nEND\n""",
+ )
+ gdal.FileFromMemBuffer("/vsimem/test.tif", open("data/byte.tif", "rb").read())
+ ds = gdal.Open("/vsimem/test.tif")
+ md = ds.GetMetadata("IMD")
+ gdal.Unlink("/vsimem/test.imd")
+ gdal.Unlink("/vsimem/test.tif")
+ assert md == {"foo.key": "value with space ' not quoted", "foo.key2": "another one"}
+
###############################################################################
# Check read Digital Globe metadata XML format
@@ -1614,31 +2182,33 @@ def test_tiff_read_non_conformant_imd():
def test_tiff_read_md2():
try:
- os.remove('data/md_dg_2.tif.aux.xml')
+ os.remove("data/md_dg_2.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_dg_2.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_dg_2.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 2, 'did not get expected file list.'
+ assert len(filelist) == 2, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2011-05-01 13:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2011-05-01 13:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_dg_2.tif.aux.xml')
+ assert not os.path.exists("data/md_dg_2.tif.aux.xml")
###############################################################################
@@ -1648,31 +2218,33 @@ def test_tiff_read_md2():
def test_tiff_read_md3():
try:
- os.remove('data/md_ge_rgb_0010000.tif.aux.xml')
+ os.remove("data/md_ge_rgb_0010000.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_ge_rgb_0010000.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_ge_rgb_0010000.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2012-06-01 14:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2012-06-01 14:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_ge_rgb_0010000.tif.aux.xml')
+ assert not os.path.exists("data/md_ge_rgb_0010000.tif.aux.xml")
###############################################################################
@@ -1682,31 +2254,33 @@ def test_tiff_read_md3():
def test_tiff_read_md4():
try:
- os.remove('data/md_ov.tif.aux.xml')
+ os.remove("data/md_ov.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_ov.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_ov.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2013-07-01 15:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2013-07-01 15:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_ov.tif.aux.xml')
+ assert not os.path.exists("data/md_ov.tif.aux.xml")
###############################################################################
@@ -1716,31 +2290,33 @@ def test_tiff_read_md4():
def test_tiff_read_md5():
try:
- os.remove('data/md_rdk1.tif.aux.xml')
+ os.remove("data/md_rdk1.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_rdk1.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_rdk1.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 2, 'did not get expected file list.'
+ assert len(filelist) == 2, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 5, 'did not get expected metadata list.'
+ assert len(metadata) == 5, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2014-08-01 16:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2014-08-01 16:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_rdk1.tif.aux.xml')
+ assert not os.path.exists("data/md_rdk1.tif.aux.xml")
###############################################################################
@@ -1750,31 +2326,33 @@ def test_tiff_read_md5():
def test_tiff_read_md6():
try:
- os.remove('data/md_ls_b1.tif.aux.xml')
+ os.remove("data/md_ls_b1.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_ls_b1.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_ls_b1.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 2, 'did not get expected file list.'
+ assert len(filelist) == 2, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 5, 'did not get expected metadata list.'
+ assert len(metadata) == 5, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2015-09-01 17:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2015-09-01 17:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_ls_b1.tif.aux.xml')
+ assert not os.path.exists("data/md_ls_b1.tif.aux.xml")
###############################################################################
@@ -1784,31 +2362,33 @@ def test_tiff_read_md6():
def test_tiff_read_md7():
try:
- os.remove('data/spot/md_spot.tif.aux.xml')
+ os.remove("data/spot/md_spot.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/spot/md_spot.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/spot/md_spot.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 2, 'did not get expected file list.'
+ assert len(filelist) == 2, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 5, 'did not get expected metadata list.'
+ assert len(metadata) == 5, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2001-03-01 00:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2001-03-01 00:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/spot/md_spot.tif.aux.xml')
+ assert not os.path.exists("data/spot/md_spot.tif.aux.xml")
###############################################################################
@@ -1818,31 +2398,33 @@ def test_tiff_read_md7():
def test_tiff_read_md8():
try:
- os.remove('data/md_re.tif.aux.xml')
+ os.remove("data/md_re.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_re.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_re.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 2, 'did not get expected file list.'
+ assert len(filelist) == 2, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 5, 'did not get expected metadata list.'
+ assert len(metadata) == 5, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2010-02-01 12:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2010-02-01 12:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_re.tif.aux.xml')
+ assert not os.path.exists("data/md_re.tif.aux.xml")
###############################################################################
@@ -1852,30 +2434,32 @@ def test_tiff_read_md8():
def test_tiff_read_md9():
try:
- os.remove('data/alos/IMG-md_alos.tif.aux.xml')
+ os.remove("data/alos/IMG-md_alos.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/alos/IMG-md_alos.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/alos/IMG-md_alos.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2010-07-01 00:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2010-07-01 00:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/alos/IMG-md_alos.tif.aux.xml')
+ assert not os.path.exists("data/alos/IMG-md_alos.tif.aux.xml")
###############################################################################
@@ -1885,31 +2469,33 @@ def test_tiff_read_md9():
def test_tiff_read_md10():
try:
- os.remove('data/md_eros.tif.aux.xml')
+ os.remove("data/md_eros.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_eros.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_eros.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2013-04-01 11:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2013-04-01 11:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_eros.tif.aux.xml')
+ assert not os.path.exists("data/md_eros.tif.aux.xml")
###############################################################################
@@ -1919,31 +2505,33 @@ def test_tiff_read_md10():
def test_tiff_read_md11():
try:
- os.remove('data/md_kompsat.tif.aux.xml')
+ os.remove("data/md_kompsat.tif.aux.xml")
except OSError:
pass
- ds = gdal.Open('data/md_kompsat.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_kompsat.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2007-05-01 07:00:00', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2007-05-01 07:00:00"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
ds = None
- assert not os.path.exists('data/md_kompsat.tif.aux.xml')
+ assert not os.path.exists("data/md_kompsat.tif.aux.xml")
###############################################################################
@@ -1952,44 +2540,56 @@ def test_tiff_read_md11():
def test_tiff_read_md12():
- ds = gdal.Open('../gdrivers/data/dimap2/single_component/IMG_foo_R2C1.TIF', gdal.GA_ReadOnly)
+ ds = gdal.Open(
+ "../gdrivers/data/dimap2/single_component/IMG_foo_R2C1.TIF", gdal.GA_ReadOnly
+ )
filelist = ds.GetFileList()
- assert len(filelist) == 3, 'did not get expected file list.'
+ assert len(filelist) == 3, "did not get expected file list."
metadata = ds.GetMetadataDomainList()
- assert len(metadata) == 6, 'did not get expected metadata list.'
+ assert len(metadata) == 6, "did not get expected metadata list."
- md = ds.GetMetadata('IMAGERY')
- assert 'SATELLITEID' in md, 'SATELLITEID not present in IMAGERY Domain'
- assert 'CLOUDCOVER' in md, 'CLOUDCOVER not present in IMAGERY Domain'
- assert 'ACQUISITIONDATETIME' in md, \
- 'ACQUISITIONDATETIME not present in IMAGERY Domain'
+ md = ds.GetMetadata("IMAGERY")
+ assert "SATELLITEID" in md, "SATELLITEID not present in IMAGERY Domain"
+ assert "CLOUDCOVER" in md, "CLOUDCOVER not present in IMAGERY Domain"
+ assert (
+ "ACQUISITIONDATETIME" in md
+ ), "ACQUISITIONDATETIME not present in IMAGERY Domain"
# Test UTC date
- assert md['ACQUISITIONDATETIME'] == '2016-06-17 12:34:56', \
- 'bad value for IMAGERY[ACQUISITIONDATETIME]'
+ assert (
+ md["ACQUISITIONDATETIME"] == "2016-06-17 12:34:56"
+ ), "bad value for IMAGERY[ACQUISITIONDATETIME]"
# Test RPC and that we have a LINE_OFF shift
- rpc = ds.GetMetadata('RPC')
- assert rpc['LINE_OFF'] == '-11', 'RPC wrong.'
+ rpc = ds.GetMetadata("RPC")
+ assert rpc["LINE_OFF"] == "-11", "RPC wrong."
ds = None
- assert not os.path.exists('data/md_kompsat.tif.aux.xml')
+ assert not os.path.exists("data/md_kompsat.tif.aux.xml")
# Test not valid DIMAP product [https://github.com/OSGeo/gdal/issues/431]
- shutil.copy('../gdrivers/data/dimap2/single_component/IMG_foo_R2C1.TIF', 'tmp/IMG_foo_temp.TIF')
- shutil.copy('../gdrivers/data/dimap2/single_component/DIM_foo.XML', 'tmp/DIM_foo.XML')
- shutil.copy('../gdrivers/data/dimap2/single_component/RPC_foo.XML', 'tmp/RPC_foo.XML')
- ds = gdal.Open('tmp/IMG_foo_temp.TIF', gdal.GA_ReadOnly)
+ shutil.copy(
+ "../gdrivers/data/dimap2/single_component/IMG_foo_R2C1.TIF",
+ "tmp/IMG_foo_temp.TIF",
+ )
+ shutil.copy(
+ "../gdrivers/data/dimap2/single_component/DIM_foo.XML", "tmp/DIM_foo.XML"
+ )
+ shutil.copy(
+ "../gdrivers/data/dimap2/single_component/RPC_foo.XML", "tmp/RPC_foo.XML"
+ )
+ ds = gdal.Open("tmp/IMG_foo_temp.TIF", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
ds = None
- gdal.Unlink('tmp/IMG_foo_temp.TIF')
- gdal.Unlink('tmp/DIM_foo.XML')
- gdal.Unlink('tmp/RPC_foo.XML')
+ gdal.Unlink("tmp/IMG_foo_temp.TIF")
+ gdal.Unlink("tmp/DIM_foo.XML")
+ gdal.Unlink("tmp/RPC_foo.XML")
+
+ assert len(filelist) <= 1, "did not get expected file list."
- assert len(filelist) <= 1, 'did not get expected file list.'
###############################################################################
# Test reading a TIFFTAG_GDAL_NODATA with empty text
@@ -1997,24 +2597,25 @@ def test_tiff_read_md12():
def test_tiff_read_empty_nodata_tag():
- ds = gdal.Open('data/empty_nodata.tif')
+ ds = gdal.Open("data/empty_nodata.tif")
assert ds.GetRasterBand(1).GetNoDataValue() is None
###############################################################################
# Check that no auxiliary files are read with a simple Open(), reading
# imagery and getting IMAGE_STRUCTURE metadata
-@pytest.mark.skipif(sys.platform != 'linux', reason='Incorrect platform')
+@pytest.mark.skipif(sys.platform != "linux", reason="Incorrect platform")
def test_tiff_read_strace_check():
python_exe = sys.executable
- cmd = "strace -f %s -c \"from osgeo import gdal; " % python_exe + (
+ cmd = 'strace -f %s -c "from osgeo import gdal; ' % python_exe + (
"gdal.SetConfigOption('CPL_DEBUG', 'OFF');"
"ds = gdal.Open('../gcore/data/byte.tif');"
"ds.ReadRaster();"
"ds.GetMetadata('IMAGE_STRUCTURE');"
"ds.GetRasterBand(1).GetMetadata('IMAGE_STRUCTURE');"
- " \" ")
+ ' " '
+ )
try:
(_, err) = gdaltest.runexternal_out_and_err(cmd)
except:
@@ -2022,26 +2623,28 @@ def test_tiff_read_strace_check():
pytest.skip()
lines_with_dotdot_gcore = []
- for line in err.split('\n'):
- if '../gcore' in line:
+ for line in err.split("\n"):
+ if "../gcore" in line:
lines_with_dotdot_gcore += [line]
assert len(lines_with_dotdot_gcore) == 1
+
###############################################################################
# Test GDAL_READDIR_LIMIT_ON_OPEN
def test_tiff_read_readdir_limit_on_open():
- gdal.SetConfigOption('GDAL_READDIR_LIMIT_ON_OPEN', '1')
+ gdal.SetConfigOption("GDAL_READDIR_LIMIT_ON_OPEN", "1")
- ds = gdal.Open('data/md_kompsat.tif', gdal.GA_ReadOnly)
+ ds = gdal.Open("data/md_kompsat.tif", gdal.GA_ReadOnly)
filelist = ds.GetFileList()
- gdal.SetConfigOption('GDAL_READDIR_LIMIT_ON_OPEN', None)
+ gdal.SetConfigOption("GDAL_READDIR_LIMIT_ON_OPEN", None)
+
+ assert len(filelist) == 3, "did not get expected file list."
- assert len(filelist) == 3, 'did not get expected file list.'
###############################################################################
#
@@ -2052,13 +2655,14 @@ def test_tiff_read_minisblack_as_rgba():
if not gdaltest.supports_force_rgba:
pytest.skip()
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/byte.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/byte.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [4672, 4672, 4672, 4873]
ds = None
+
###############################################################################
#
@@ -2068,13 +2672,14 @@ def test_tiff_read_colortable_as_rgba():
if not gdaltest.supports_force_rgba:
pytest.skip()
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/test_average_palette.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/test_average_palette.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [2433, 2433, 2433, 4873]
ds = None
+
###############################################################################
#
@@ -2084,14 +2689,15 @@ def test_tiff_read_logl_as_rgba():
if not gdaltest.supports_force_rgba:
pytest.skip()
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('data/uint16_sgilog.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("data/uint16_sgilog.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
# I'm pretty sure this isn't the expected result...
assert got_cs == [0, 0, 0, 4873]
ds = None
+
###############################################################################
#
@@ -2102,31 +2708,38 @@ def test_tiff_read_strip_separate_as_rgba():
pytest.skip()
# 3 band
- gdal.Translate('/vsimem/tiff_read_strip_separate_as_rgba.tif',
- 'data/rgbsmall.tif', options='-co INTERLEAVE=BAND')
-
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('/vsimem/tiff_read_strip_separate_as_rgba.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.Translate(
+ "/vsimem/tiff_read_strip_separate_as_rgba.tif",
+ "data/rgbsmall.tif",
+ options="-co INTERLEAVE=BAND",
+ )
+
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("/vsimem/tiff_read_strip_separate_as_rgba.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [21212, 21053, 21349, 30658]
ds = None
- gdal.Unlink('/vsimem/tiff_read_strip_separate_as_rgba.tif')
+ gdal.Unlink("/vsimem/tiff_read_strip_separate_as_rgba.tif")
# 3 band with PHOTOMETRIC_MINISBLACK to trigger gtStripSeparate() to
# use the single band code path
- gdal.Translate('/vsimem/tiff_read_strip_separate_as_rgba.tif',
- 'data/rgbsmall.tif', options='-co INTERLEAVE=BAND -co PHOTOMETRIC=MINISBLACK')
-
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('/vsimem/tiff_read_strip_separate_as_rgba.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.Translate(
+ "/vsimem/tiff_read_strip_separate_as_rgba.tif",
+ "data/rgbsmall.tif",
+ options="-co INTERLEAVE=BAND -co PHOTOMETRIC=MINISBLACK",
+ )
+
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("/vsimem/tiff_read_strip_separate_as_rgba.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [21212, 21212, 21212, 30658]
ds = None
- gdal.Unlink('/vsimem/tiff_read_strip_separate_as_rgba.tif')
+ gdal.Unlink("/vsimem/tiff_read_strip_separate_as_rgba.tif")
+
###############################################################################
#
@@ -2138,30 +2751,37 @@ def test_tiff_read_tiled_separate_as_rgba():
pytest.skip()
# 3 band
- gdal.Translate('/vsimem/tiff_read_tiled_separate_as_rgba.tif',
- 'data/rgbsmall.tif', options='-co TILED=YES -co INTERLEAVE=BAND')
-
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('/vsimem/tiff_read_tiled_separate_as_rgba.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.Translate(
+ "/vsimem/tiff_read_tiled_separate_as_rgba.tif",
+ "data/rgbsmall.tif",
+ options="-co TILED=YES -co INTERLEAVE=BAND",
+ )
+
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("/vsimem/tiff_read_tiled_separate_as_rgba.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [21212, 21053, 21349, 30658]
ds = None
- gdal.Unlink('/vsimem/tiff_read_tiled_separate_as_rgba.tif')
+ gdal.Unlink("/vsimem/tiff_read_tiled_separate_as_rgba.tif")
# Single band
- gdal.Translate('/vsimem/tiff_read_tiled_separate_as_rgba.tif',
- 'data/byte.tif', options='-co TILED=YES -co INTERLEAVE=BAND')
-
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', 'YES')
- ds = gdal.Open('/vsimem/tiff_read_tiled_separate_as_rgba.tif')
- gdal.SetConfigOption('GTIFF_FORCE_RGBA', None)
+ gdal.Translate(
+ "/vsimem/tiff_read_tiled_separate_as_rgba.tif",
+ "data/byte.tif",
+ options="-co TILED=YES -co INTERLEAVE=BAND",
+ )
+
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", "YES")
+ ds = gdal.Open("/vsimem/tiff_read_tiled_separate_as_rgba.tif")
+ gdal.SetConfigOption("GTIFF_FORCE_RGBA", None)
got_cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(ds.RasterCount)]
assert got_cs == [4672, 4672, 4672, 4873]
ds = None
- gdal.Unlink('/vsimem/tiff_read_tiled_separate_as_rgba.tif')
+ gdal.Unlink("/vsimem/tiff_read_tiled_separate_as_rgba.tif")
+
###############################################################################
#
@@ -2170,12 +2790,13 @@ def test_tiff_read_tiled_separate_as_rgba():
def test_tiff_read_scanline_more_than_2GB():
with gdaltest.error_handler():
- ds = gdal.Open('data/scanline_more_than_2GB.tif')
+ ds = gdal.Open("data/scanline_more_than_2GB.tif")
if sys.maxsize > 2**32:
assert ds is not None
else:
assert ds is None
+
###############################################################################
# Test that we are at least robust to wrong number of ExtraSamples and warn
# about it
@@ -2185,63 +2806,175 @@ def test_tiff_read_wrong_number_extrasamples():
gdal.ErrorReset()
with gdaltest.error_handler():
- ds = gdal.Open('data/6band_wrong_number_extrasamples.tif')
- assert gdal.GetLastErrorMsg().find('Wrong number of ExtraSamples') >= 0
+ ds = gdal.Open("data/6band_wrong_number_extrasamples.tif")
+ assert gdal.GetLastErrorMsg().find("Wrong number of ExtraSamples") >= 0
assert ds.GetRasterBand(6).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
+
###############################################################################
# Test that we can read a one-trip TIFF without StripByteCounts tag
def test_tiff_read_one_strip_no_bytecount():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdal.Open('data/one_strip_nobytecount.tif')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdal.Open("data/one_strip_nobytecount.tif")
gdal.PopErrorHandler()
assert ds.GetRasterBand(1).Checksum() == 1
+
###############################################################################
# Test GDAL_GEOREF_SOURCES
def test_tiff_read_nogeoref():
- tests = [(None, True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, False, True, True, '_1936', (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0)),
- (None, True, False, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, False, True, False, '', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- (None, False, False, False, '', (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
- ('INTERNAL', True, True, False, '', (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
- ('INTERNAL,PAM', True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('INTERNAL,WORLDFILE', True, True, True, '', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('INTERNAL,PAM,WORLDFILE', True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('INTERNAL,WORLDFILE,PAM', True, True, True, 'LOCAL_CS["PAM"]', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('WORLDFILE,PAM,INTERNAL', False, False, True, '', (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
- ('PAM,WORLDFILE,INTERNAL', False, False, True, '', (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
- ('TABFILE,WORLDFILE,INTERNAL', True, True, True, '_1936', (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0)),
- ('PAM', True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('PAM,WORLDFILE', True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('WORLDFILE', True, True, False, '', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('WORLDFILE,PAM', True, True, False, 'LOCAL_CS["PAM"]', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('WORLDFILE,INTERNAL', True, True, False, '', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('WORLDFILE,PAM,INTERNAL', True, True, False, 'LOCAL_CS["PAM"]', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('WORLDFILE,INTERNAL,PAM', True, True, False, 'LOCAL_CS["PAM"]', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('NONE', True, True, False, '', (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
- ]
-
- for (config_option_value, copy_pam, copy_worldfile, copy_tabfile, expected_srs, expected_gt) in tests:
+ tests = [
+ (None, True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (
+ None,
+ False,
+ True,
+ True,
+ "_1936",
+ (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0),
+ ),
+ (None, True, False, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (None, False, True, False, "", (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
+ (None, False, False, False, "", (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
+ ("INTERNAL", True, True, False, "", (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
+ (
+ "INTERNAL,PAM",
+ True,
+ True,
+ True,
+ 'LOCAL_CS["PAM"]',
+ (1.0, 2.0, 3.0, 4.0, 5.0, 6.0),
+ ),
+ (
+ "INTERNAL,WORLDFILE",
+ True,
+ True,
+ True,
+ "",
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ (
+ "INTERNAL,PAM,WORLDFILE",
+ True,
+ True,
+ True,
+ 'LOCAL_CS["PAM"]',
+ (1.0, 2.0, 3.0, 4.0, 5.0, 6.0),
+ ),
+ (
+ "INTERNAL,WORLDFILE,PAM",
+ True,
+ True,
+ True,
+ 'LOCAL_CS["PAM"]',
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ (
+ "WORLDFILE,PAM,INTERNAL",
+ False,
+ False,
+ True,
+ "",
+ (0.0, 1.0, 0.0, 0.0, 0.0, 1.0),
+ ),
+ (
+ "PAM,WORLDFILE,INTERNAL",
+ False,
+ False,
+ True,
+ "",
+ (0.0, 1.0, 0.0, 0.0, 0.0, 1.0),
+ ),
+ (
+ "TABFILE,WORLDFILE,INTERNAL",
+ True,
+ True,
+ True,
+ "_1936",
+ (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0),
+ ),
+ ("PAM", True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (
+ "PAM,WORLDFILE",
+ True,
+ True,
+ False,
+ 'LOCAL_CS["PAM"]',
+ (1.0, 2.0, 3.0, 4.0, 5.0, 6.0),
+ ),
+ ("WORLDFILE", True, True, False, "", (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
+ (
+ "WORLDFILE,PAM",
+ True,
+ True,
+ False,
+ 'LOCAL_CS["PAM"]',
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ (
+ "WORLDFILE,INTERNAL",
+ True,
+ True,
+ False,
+ "",
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ (
+ "WORLDFILE,PAM,INTERNAL",
+ True,
+ True,
+ False,
+ 'LOCAL_CS["PAM"]',
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ (
+ "WORLDFILE,INTERNAL,PAM",
+ True,
+ True,
+ False,
+ 'LOCAL_CS["PAM"]',
+ (99.5, 1.0, 0.0, 200.5, 0.0, -1.0),
+ ),
+ ("NONE", True, True, False, "", (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
+ ]
+
+ for (
+ config_option_value,
+ copy_pam,
+ copy_worldfile,
+ copy_tabfile,
+ expected_srs,
+ expected_gt,
+ ) in tests:
for iteration in range(2):
- gdal.SetConfigOption('GDAL_GEOREF_SOURCES', config_option_value)
- gdal.FileFromMemBuffer('/vsimem/byte_nogeoref.tif', open('data/byte_nogeoref.tif', 'rb').read())
+ gdal.SetConfigOption("GDAL_GEOREF_SOURCES", config_option_value)
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_nogeoref.tif", open("data/byte_nogeoref.tif", "rb").read()
+ )
if copy_pam:
- gdal.FileFromMemBuffer('/vsimem/byte_nogeoref.tif.aux.xml', open('data/byte_nogeoref.tif.aux.xml', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_nogeoref.tif.aux.xml",
+ open("data/byte_nogeoref.tif.aux.xml", "rb").read(),
+ )
if copy_worldfile:
- gdal.FileFromMemBuffer('/vsimem/byte_nogeoref.tfw', open('data/byte_nogeoref.tfw', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_nogeoref.tfw",
+ open("data/byte_nogeoref.tfw", "rb").read(),
+ )
if copy_tabfile:
- gdal.FileFromMemBuffer('/vsimem/byte_nogeoref.tab', open('data/byte_nogeoref.tab', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_nogeoref.tab",
+ open("data/byte_nogeoref.tab", "rb").read(),
+ )
- ds = gdal.Open('/vsimem/byte_nogeoref.tif')
+ ds = gdal.Open("/vsimem/byte_nogeoref.tif")
if iteration == 0:
gt = ds.GetGeoTransform()
srs_wkt = ds.GetProjectionRef()
@@ -2249,23 +2982,47 @@ def test_tiff_read_nogeoref():
srs_wkt = ds.GetProjectionRef()
gt = ds.GetGeoTransform()
ds = None
- gdal.SetConfigOption('GDAL_GEOREF_SOURCES', None)
- gdal.Unlink('/vsimem/byte_nogeoref.tif')
- gdal.Unlink('/vsimem/byte_nogeoref.tif.aux.xml')
- gdal.Unlink('/vsimem/byte_nogeoref.tfw')
- gdal.Unlink('/vsimem/byte_nogeoref.tab')
+ gdal.SetConfigOption("GDAL_GEOREF_SOURCES", None)
+ gdal.Unlink("/vsimem/byte_nogeoref.tif")
+ gdal.Unlink("/vsimem/byte_nogeoref.tif.aux.xml")
+ gdal.Unlink("/vsimem/byte_nogeoref.tfw")
+ gdal.Unlink("/vsimem/byte_nogeoref.tab")
if gt != expected_gt:
- print('Got ' + str(gt))
- print('Expected ' + str(expected_gt))
- pytest.fail('Iteration %d, did not get expected gt for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s' % (iteration, config_option_value, str(copy_pam), str(copy_worldfile), str(copy_tabfile)))
-
- if expected_srs == 'LOCAL_CS["PAM"]' and srs_wkt == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]':
- pass # ok
- elif (expected_srs == '' and srs_wkt != '') or (expected_srs != '' and expected_srs not in srs_wkt):
- print('Got ' + srs_wkt)
- print('Expected ' + expected_srs)
- pytest.fail('Iteration %d, did not get expected SRS for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s' % (iteration, config_option_value, str(copy_pam), str(copy_worldfile), str(copy_tabfile)))
+ print("Got " + str(gt))
+ print("Expected " + str(expected_gt))
+ pytest.fail(
+ "Iteration %d, did not get expected gt for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s"
+ % (
+ iteration,
+ config_option_value,
+ str(copy_pam),
+ str(copy_worldfile),
+ str(copy_tabfile),
+ )
+ )
+
+ if (
+ expected_srs == 'LOCAL_CS["PAM"]'
+ and srs_wkt
+ == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
+ ):
+ pass # ok
+ elif (expected_srs == "" and srs_wkt != "") or (
+ expected_srs != "" and expected_srs not in srs_wkt
+ ):
+ print("Got " + srs_wkt)
+ print("Expected " + expected_srs)
+ pytest.fail(
+ "Iteration %d, did not get expected SRS for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s"
+ % (
+ iteration,
+ config_option_value,
+ str(copy_pam),
+ str(copy_worldfile),
+ str(copy_tabfile),
+ )
+ )
###############################################################################
@@ -2274,34 +3031,110 @@ def test_tiff_read_nogeoref():
def test_tiff_read_inconsistent_georef():
- tests = [(None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, False, True, True, '26711', (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)),
- (None, False, False, True, '26711', (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)),
- (None, False, True, False, '26711', (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)),
- (None, False, False, False, '26711', (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)),
- (None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, True, False, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- (None, True, False, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('INTERNAL', True, True, True, '26711', (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0)),
- ('PAM', True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('PAM,TABFILE', True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
- ('WORLDFILE', True, True, True, '', (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
- ('TABFILE', True, True, True, '_1936', (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0)),
- ('TABFILE,PAM', True, True, True, '_1936', (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0)),
- ]
-
- for (config_option_value, copy_pam, copy_worldfile, copy_tabfile, expected_srs, expected_gt) in tests:
+ tests = [
+ (None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (
+ None,
+ False,
+ True,
+ True,
+ "26711",
+ (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0),
+ ),
+ (
+ None,
+ False,
+ False,
+ True,
+ "26711",
+ (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0),
+ ),
+ (
+ None,
+ False,
+ True,
+ False,
+ "26711",
+ (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0),
+ ),
+ (
+ None,
+ False,
+ False,
+ False,
+ "26711",
+ (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0),
+ ),
+ (None, True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (None, True, False, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (None, True, True, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (None, True, False, False, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (
+ "INTERNAL",
+ True,
+ True,
+ True,
+ "26711",
+ (440720.0, 60.0, 0.0, 3751320.0, 0.0, -60.0),
+ ),
+ ("PAM", True, True, True, 'LOCAL_CS["PAM"]', (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)),
+ (
+ "PAM,TABFILE",
+ True,
+ True,
+ True,
+ 'LOCAL_CS["PAM"]',
+ (1.0, 2.0, 3.0, 4.0, 5.0, 6.0),
+ ),
+ ("WORLDFILE", True, True, True, "", (99.5, 1.0, 0.0, 200.5, 0.0, -1.0)),
+ (
+ "TABFILE",
+ True,
+ True,
+ True,
+ "_1936",
+ (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0),
+ ),
+ (
+ "TABFILE,PAM",
+ True,
+ True,
+ True,
+ "_1936",
+ (400000.0, 25.0, 0.0, 1300000.0, 0.0, -25.0),
+ ),
+ ]
+
+ for (
+ config_option_value,
+ copy_pam,
+ copy_worldfile,
+ copy_tabfile,
+ expected_srs,
+ expected_gt,
+ ) in tests:
for iteration in range(2):
- gdal.SetConfigOption('GDAL_GEOREF_SOURCES', config_option_value)
- gdal.FileFromMemBuffer('/vsimem/byte_inconsistent_georef.tif', open('data/byte_inconsistent_georef.tif', 'rb').read())
+ gdal.SetConfigOption("GDAL_GEOREF_SOURCES", config_option_value)
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_inconsistent_georef.tif",
+ open("data/byte_inconsistent_georef.tif", "rb").read(),
+ )
if copy_pam:
- gdal.FileFromMemBuffer('/vsimem/byte_inconsistent_georef.tif.aux.xml', open('data/byte_inconsistent_georef.tif.aux.xml', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_inconsistent_georef.tif.aux.xml",
+ open("data/byte_inconsistent_georef.tif.aux.xml", "rb").read(),
+ )
if copy_worldfile:
- gdal.FileFromMemBuffer('/vsimem/byte_inconsistent_georef.tfw', open('data/byte_inconsistent_georef.tfw', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_inconsistent_georef.tfw",
+ open("data/byte_inconsistent_georef.tfw", "rb").read(),
+ )
if copy_tabfile:
- gdal.FileFromMemBuffer('/vsimem/byte_inconsistent_georef.tab', open('data/byte_inconsistent_georef.tab', 'rb').read())
- ds = gdal.Open('/vsimem/byte_inconsistent_georef.tif')
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_inconsistent_georef.tab",
+ open("data/byte_inconsistent_georef.tab", "rb").read(),
+ )
+ ds = gdal.Open("/vsimem/byte_inconsistent_georef.tif")
if iteration == 0:
gt = ds.GetGeoTransform()
srs_wkt = ds.GetProjectionRef()
@@ -2309,23 +3142,47 @@ def test_tiff_read_inconsistent_georef():
srs_wkt = ds.GetProjectionRef()
gt = ds.GetGeoTransform()
ds = None
- gdal.SetConfigOption('GDAL_GEOREF_SOURCES', None)
- gdal.Unlink('/vsimem/byte_inconsistent_georef.tif')
- gdal.Unlink('/vsimem/byte_inconsistent_georef.tif.aux.xml')
- gdal.Unlink('/vsimem/byte_inconsistent_georef.tfw')
- gdal.Unlink('/vsimem/byte_inconsistent_georef.tab')
+ gdal.SetConfigOption("GDAL_GEOREF_SOURCES", None)
+ gdal.Unlink("/vsimem/byte_inconsistent_georef.tif")
+ gdal.Unlink("/vsimem/byte_inconsistent_georef.tif.aux.xml")
+ gdal.Unlink("/vsimem/byte_inconsistent_georef.tfw")
+ gdal.Unlink("/vsimem/byte_inconsistent_georef.tab")
if gt != expected_gt:
- print('Got ' + str(gt))
- print('Expected ' + str(expected_gt))
- pytest.fail('Iteration %d, did not get expected gt for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s' % (iteration, config_option_value, str(copy_pam), str(copy_worldfile), str(copy_tabfile)))
-
- if expected_srs == 'LOCAL_CS["PAM"]' and srs_wkt == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]':
- pass # ok
- elif (expected_srs == '' and srs_wkt != '') or (expected_srs != '' and expected_srs not in srs_wkt):
- print('Got ' + srs_wkt)
- print('Expected ' + expected_srs)
- pytest.fail('Iteration %d, did not get expected SRS for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s' % (iteration, config_option_value, str(copy_pam), str(copy_worldfile), str(copy_tabfile)))
+ print("Got " + str(gt))
+ print("Expected " + str(expected_gt))
+ pytest.fail(
+ "Iteration %d, did not get expected gt for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s"
+ % (
+ iteration,
+ config_option_value,
+ str(copy_pam),
+ str(copy_worldfile),
+ str(copy_tabfile),
+ )
+ )
+
+ if (
+ expected_srs == 'LOCAL_CS["PAM"]'
+ and srs_wkt
+ == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
+ ):
+ pass # ok
+ elif (expected_srs == "" and srs_wkt != "") or (
+ expected_srs != "" and expected_srs not in srs_wkt
+ ):
+ print("Got " + srs_wkt)
+ print("Expected " + expected_srs)
+ pytest.fail(
+ "Iteration %d, did not get expected SRS for %s,copy_pam=%s,copy_worldfile=%s,copy_tabfile=%s"
+ % (
+ iteration,
+ config_option_value,
+ str(copy_pam),
+ str(copy_worldfile),
+ str(copy_tabfile),
+ )
+ )
###############################################################################
@@ -2334,27 +3191,33 @@ def test_tiff_read_inconsistent_georef():
def test_tiff_read_gcp_internal_and_auxxml():
- tests = [(None, True, 'LOCAL_CS["PAM"]', 1),
- (None, False, '4326', 2),
- ('INTERNAL', True, '4326', 2),
- ('INTERNAL', False, '4326', 2),
- ('INTERNAL,PAM', True, '4326', 2),
- ('INTERNAL,PAM', False, '4326', 2),
- ('PAM', True, 'LOCAL_CS["PAM"]', 1),
- ('PAM', False, '', 0),
- ('PAM,INTERNAL', True, 'LOCAL_CS["PAM"]', 1),
- ('PAM,INTERNAL', False, '4326', 2),
- ]
+ tests = [
+ (None, True, 'LOCAL_CS["PAM"]', 1),
+ (None, False, "4326", 2),
+ ("INTERNAL", True, "4326", 2),
+ ("INTERNAL", False, "4326", 2),
+ ("INTERNAL,PAM", True, "4326", 2),
+ ("INTERNAL,PAM", False, "4326", 2),
+ ("PAM", True, 'LOCAL_CS["PAM"]', 1),
+ ("PAM", False, "", 0),
+ ("PAM,INTERNAL", True, 'LOCAL_CS["PAM"]', 1),
+ ("PAM,INTERNAL", False, "4326", 2),
+ ]
for (config_option_value, copy_pam, expected_srs, expected_gcp_count) in tests:
for iteration in range(2):
- gdal.FileFromMemBuffer('/vsimem/byte_gcp.tif', open('data/byte_gcp.tif', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_gcp.tif", open("data/byte_gcp.tif", "rb").read()
+ )
if copy_pam:
- gdal.FileFromMemBuffer('/vsimem/byte_gcp.tif.aux.xml', open('data/byte_gcp.tif.aux.xml', 'rb').read())
+ gdal.FileFromMemBuffer(
+ "/vsimem/byte_gcp.tif.aux.xml",
+ open("data/byte_gcp.tif.aux.xml", "rb").read(),
+ )
open_options = []
if config_option_value is not None:
- open_options += ['GEOREF_SOURCES=' + config_option_value]
- ds = gdal.OpenEx('/vsimem/byte_gcp.tif', open_options=open_options)
+ open_options += ["GEOREF_SOURCES=" + config_option_value]
+ ds = gdal.OpenEx("/vsimem/byte_gcp.tif", open_options=open_options)
if iteration == 0:
gcp_count = ds.GetGCPCount()
srs_wkt = ds.GetGCPProjection()
@@ -2362,20 +3225,32 @@ def test_tiff_read_gcp_internal_and_auxxml():
srs_wkt = ds.GetGCPProjection()
gcp_count = ds.GetGCPCount()
ds = None
- gdal.Unlink('/vsimem/byte_gcp.tif')
- gdal.Unlink('/vsimem/byte_gcp.tif.aux.xml')
+ gdal.Unlink("/vsimem/byte_gcp.tif")
+ gdal.Unlink("/vsimem/byte_gcp.tif.aux.xml")
if gcp_count != expected_gcp_count:
- print('Got ' + str(gcp_count))
- print('Expected ' + str(expected_gcp_count))
- pytest.fail('Iteration %d, did not get expected gcp count for %s,copy_pam=%s' % (iteration, config_option_value, str(copy_pam)))
-
- if expected_srs == 'LOCAL_CS["PAM"]' and srs_wkt == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]':
- pass # ok
- elif (expected_srs == '' and srs_wkt != '') or (expected_srs != '' and expected_srs not in srs_wkt):
- print('Got ' + srs_wkt)
- print('Expected ' + expected_srs)
- pytest.fail('Iteration %d, did not get expected SRS for %s,copy_pam=%s' % (iteration, config_option_value, str(copy_pam)))
+ print("Got " + str(gcp_count))
+ print("Expected " + str(expected_gcp_count))
+ pytest.fail(
+ "Iteration %d, did not get expected gcp count for %s,copy_pam=%s"
+ % (iteration, config_option_value, str(copy_pam))
+ )
+
+ if (
+ expected_srs == 'LOCAL_CS["PAM"]'
+ and srs_wkt
+ == 'LOCAL_CS["PAM",UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
+ ):
+ pass # ok
+ elif (expected_srs == "" and srs_wkt != "") or (
+ expected_srs != "" and expected_srs not in srs_wkt
+ ):
+ print("Got " + srs_wkt)
+ print("Expected " + expected_srs)
+ pytest.fail(
+ "Iteration %d, did not get expected SRS for %s,copy_pam=%s"
+ % (iteration, config_option_value, str(copy_pam))
+ )
###############################################################################
@@ -2388,39 +3263,48 @@ def __init__(self):
def handler(self, eErrClass, err_no, msg):
# pylint: disable=unused-argument
- if 'File open of' in msg:
+ if "File open of" in msg:
self.msg = msg
def test_tiff_read_aux():
gdal.ErrorReset()
- ds = gdal.Open('data/f2r23.tif')
+ ds = gdal.Open("data/f2r23.tif")
handler = myHandlerClass()
gdal.PushErrorHandler(handler.handler)
ds.GetFileList()
gdal.PopErrorHandler()
- assert handler.msg is None, \
- ('Got message that indicate recursive calls: %s' % handler.msg)
+ assert handler.msg is None, (
+ "Got message that indicate recursive calls: %s" % handler.msg
+ )
def test_tiff_read_one_band_from_two_bands():
- gdal.Translate('/vsimem/tiff_read_one_band_from_two_bands.tif', 'data/byte.tif', options='-b 1 -b 1')
- gdal.Translate('/vsimem/tiff_read_one_band_from_two_bands_dst.tif', '/vsimem/tiff_read_one_band_from_two_bands.tif', options='-b 1')
-
- ds = gdal.Open('/vsimem/tiff_read_one_band_from_two_bands_dst.tif')
+ gdal.Translate(
+ "/vsimem/tiff_read_one_band_from_two_bands.tif",
+ "data/byte.tif",
+ options="-b 1 -b 1",
+ )
+ gdal.Translate(
+ "/vsimem/tiff_read_one_band_from_two_bands_dst.tif",
+ "/vsimem/tiff_read_one_band_from_two_bands.tif",
+ options="-b 1",
+ )
+
+ ds = gdal.Open("/vsimem/tiff_read_one_band_from_two_bands_dst.tif")
assert ds.GetRasterBand(1).Checksum() == 4672
ds = None
- gdal.Unlink('/vsimem/tiff_read_one_band_from_two_bands.tif')
- gdal.Unlink('/vsimem/tiff_read_one_band_from_two_bands.tif.aux.xml')
- gdal.Unlink('/vsimem/tiff_read_one_band_from_two_bands_dst.tif')
+ gdal.Unlink("/vsimem/tiff_read_one_band_from_two_bands.tif")
+ gdal.Unlink("/vsimem/tiff_read_one_band_from_two_bands.tif.aux.xml")
+ gdal.Unlink("/vsimem/tiff_read_one_band_from_two_bands_dst.tif")
def test_tiff_read_jpeg_cloud_optimized():
for i in range(4):
- ds = gdal.Open('data/byte_ovr_jpeg_tablesmode%d.tif' % i)
+ ds = gdal.Open("data/byte_ovr_jpeg_tablesmode%d.tif" % i)
cs0 = ds.GetRasterBand(1).Checksum()
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs0 == 4743 and cs1 == 1133, i
@@ -2435,14 +3319,14 @@ def test_tiff_read_jpeg_cloud_optimized():
def test_tiff_read_corrupted_jpeg_cloud_optimized():
- ds = gdal.Open('data/byte_ovr_jpeg_tablesmode_not_correctly_set_on_ovr.tif')
+ ds = gdal.Open("data/byte_ovr_jpeg_tablesmode_not_correctly_set_on_ovr.tif")
cs0 = ds.GetRasterBand(1).Checksum()
assert cs0 == 4743
with gdaltest.error_handler():
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
if cs1 == 0:
- print('Expected error while writing overview with libjpeg-6b')
+ print("Expected error while writing overview with libjpeg-6b")
elif cs1 != 1133:
pytest.fail(cs1)
@@ -2453,20 +3337,22 @@ def test_tiff_read_corrupted_jpeg_cloud_optimized():
def test_tiff_read_ycbcr_lzw():
- tests = [('ycbcr_11_lzw.tif', 13459, 12939, 12414),
- ('ycbcr_12_lzw.tif', 13565, 13105, 12660),
- ('ycbcr_14_lzw.tif', 0, 0, 0), # not supported
- ('ycbcr_21_lzw.tif', 13587, 13297, 12760),
- ('ycbcr_22_lzw.tif', 13393, 13137, 12656),
- ('ycbcr_24_lzw.tif', 0, 0, 0), # not supported
- ('ycbcr_41_lzw.tif', 13218, 12758, 12592),
- ('ycbcr_42_lzw.tif', 13277, 12779, 12614),
- ('ycbcr_42_lzw_optimized.tif', 19918, 20120, 19087),
- ('ycbcr_44_lzw.tif', 12994, 13229, 12149),
- ('ycbcr_44_lzw_optimized.tif', 19666, 19860, 18836)]
+ tests = [
+ ("ycbcr_11_lzw.tif", 13459, 12939, 12414),
+ ("ycbcr_12_lzw.tif", 13565, 13105, 12660),
+ ("ycbcr_14_lzw.tif", 0, 0, 0), # not supported
+ ("ycbcr_21_lzw.tif", 13587, 13297, 12760),
+ ("ycbcr_22_lzw.tif", 13393, 13137, 12656),
+ ("ycbcr_24_lzw.tif", 0, 0, 0), # not supported
+ ("ycbcr_41_lzw.tif", 13218, 12758, 12592),
+ ("ycbcr_42_lzw.tif", 13277, 12779, 12614),
+ ("ycbcr_42_lzw_optimized.tif", 19918, 20120, 19087),
+ ("ycbcr_44_lzw.tif", 12994, 13229, 12149),
+ ("ycbcr_44_lzw_optimized.tif", 19666, 19860, 18836),
+ ]
for (filename, cs1, cs2, cs3) in tests:
- ds = gdal.Open('data/' + filename)
+ ds = gdal.Open("data/" + filename)
if cs1 == 0:
gdal.PushErrorHandler()
got_cs1 = ds.GetRasterBand(1).Checksum()
@@ -2474,8 +3360,12 @@ def test_tiff_read_ycbcr_lzw():
got_cs3 = ds.GetRasterBand(3).Checksum()
if cs1 == 0:
gdal.PopErrorHandler()
- assert got_cs1 == cs1 and got_cs2 == cs2 and got_cs3 == cs3, \
- (filename, got_cs1, got_cs2, got_cs3)
+ assert got_cs1 == cs1 and got_cs2 == cs2 and got_cs3 == cs3, (
+ filename,
+ got_cs1,
+ got_cs2,
+ got_cs3,
+ )
###############################################################################
@@ -2485,9 +3375,10 @@ def test_tiff_read_ycbcr_lzw():
def test_tiff_read_ycbcr_int12():
with gdaltest.error_handler():
- ds = gdal.Open('data/int12_ycbcr_contig.tif')
+ ds = gdal.Open("data/int12_ycbcr_contig.tif")
assert ds is None
- assert gdal.GetLastErrorMsg().find('Cannot open TIFF file with') >= 0
+ assert gdal.GetLastErrorMsg().find("Cannot open TIFF file with") >= 0
+
###############################################################################
# Test reading band unit from VERT_CS unit (#6675)
@@ -2495,35 +3386,39 @@ def test_tiff_read_ycbcr_int12():
def test_tiff_read_unit_from_srs():
- filename = '/vsimem/tiff_read_unit_from_srs.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/tiff_read_unit_from_srs.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
sr = osr.SpatialReference()
- sr.SetFromUserInput('EPSG:4326+3855')
+ sr.SetFromUserInput("EPSG:4326+3855")
ds.SetProjection(sr.ExportToWkt())
ds = None
ds = gdal.Open(filename)
unit = ds.GetRasterBand(1).GetUnitType()
- assert unit == 'metre'
+ assert unit == "metre"
ds = None
gdal.Unlink(filename)
+
###############################################################################
# Test reading ArcGIS 9.3 .aux.xml
def test_tiff_read_arcgis93_geodataxform_gcp():
- ds = gdal.Open('data/arcgis93_geodataxform_gcp.tif')
- assert ds.GetGCPProjection().find('26712') >= 0
+ ds = gdal.Open("data/arcgis93_geodataxform_gcp.tif")
+ assert ds.GetGCPProjection().find("26712") >= 0
assert ds.GetGCPCount() == 16
gcp = ds.GetGCPs()[0]
- assert (gcp.GCPPixel == pytest.approx(565, abs=1e-5) and \
- gcp.GCPLine == pytest.approx(11041, abs=1e-5) and \
- gcp.GCPX == pytest.approx(500000, abs=1e-5) and \
- gcp.GCPY == pytest.approx(4705078.79016612, abs=1e-5) and \
- gcp.GCPZ == pytest.approx(0, abs=1e-5))
+ assert (
+ gcp.GCPPixel == pytest.approx(565, abs=1e-5)
+ and gcp.GCPLine == pytest.approx(11041, abs=1e-5)
+ and gcp.GCPX == pytest.approx(500000, abs=1e-5)
+ and gcp.GCPY == pytest.approx(4705078.79016612, abs=1e-5)
+ and gcp.GCPZ == pytest.approx(0, abs=1e-5)
+ )
+
###############################################################################
# Test reading file with block size > signed int 32 bit
@@ -2532,9 +3427,10 @@ def test_tiff_read_arcgis93_geodataxform_gcp():
def test_tiff_read_block_width_above_32bit():
with gdaltest.error_handler():
- ds = gdal.Open('data/block_width_above_32bit.tif')
+ ds = gdal.Open("data/block_width_above_32bit.tif")
assert ds is None
+
###############################################################################
# Test reading file with image size > signed int 32 bit
@@ -2542,23 +3438,25 @@ def test_tiff_read_block_width_above_32bit():
def test_tiff_read_image_width_above_32bit():
with gdaltest.error_handler():
- ds = gdal.Open('data/image_width_above_32bit.tif')
+ ds = gdal.Open("data/image_width_above_32bit.tif")
assert ds is None
+
###############################################################################
# Test reading file with image size > signed int 32 bit
def test_tiff_read_second_image_width_above_32bit():
- ds = gdal.Open('data/second_image_width_above_32bit.tif')
+ ds = gdal.Open("data/second_image_width_above_32bit.tif")
with gdaltest.error_handler():
assert ds.GetMetadata("SUBDATASETS") == {}
with gdaltest.error_handler():
- ds = gdal.Open('GTIFF_DIR:2:data/second_image_width_above_32bit.tif')
+ ds = gdal.Open("GTIFF_DIR:2:data/second_image_width_above_32bit.tif")
assert ds is None
+
###############################################################################
# Test reading file with minimal number of warnings without warning
@@ -2566,10 +3464,11 @@ def test_tiff_read_second_image_width_above_32bit():
def test_tiff_read_minimum_tiff_tags_no_warning():
gdal.ErrorReset()
- ds = gdal.Open('data/minimum_tiff_tags_no_warning.tif')
- assert gdal.GetLastErrorMsg() == ''
+ ds = gdal.Open("data/minimum_tiff_tags_no_warning.tif")
+ assert gdal.GetLastErrorMsg() == ""
ds.GetRasterBand(1).Checksum()
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
+
###############################################################################
# Test reading file with minimal number of warnings but warning
@@ -2579,24 +3478,25 @@ def test_tiff_read_minimum_tiff_tags_with_warning():
gdal.ErrorReset()
with gdaltest.error_handler():
- ds = gdal.Open('data/minimum_tiff_tags_with_warning.tif')
- assert gdal.GetLastErrorMsg() != ''
+ ds = gdal.Open("data/minimum_tiff_tags_with_warning.tif")
+ assert gdal.GetLastErrorMsg() != ""
gdal.ErrorReset()
ds.GetRasterBand(1).Checksum()
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
###############################################################################
+
def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micro):
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] == 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] == "INTERNAL":
return True
- if md['LIBTIFF'].startswith('LIBTIFF, Version '):
- version = md['LIBTIFF'][len('LIBTIFF, Version '):]
- version = version[0:version.find('\n')]
- got_maj, got_min, got_micro = version.split('.')
+ if md["LIBTIFF"].startswith("LIBTIFF, Version "):
+ version = md["LIBTIFF"][len("LIBTIFF, Version ") :]
+ version = version[0 : version.find("\n")]
+ got_maj, got_min, got_micro = version.split(".")
got_maj = int(got_maj)
got_min = int(got_min)
got_micro = int(got_micro)
@@ -2611,15 +3511,17 @@ def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micr
return got_micro >= expected_micro
return False
+
###############################################################################
def test_tiff_read_unknown_compression():
with gdaltest.error_handler():
- ds = gdal.Open('data/unknown_compression.tif')
+ ds = gdal.Open("data/unknown_compression.tif")
assert ds is None
+
###############################################################################
@@ -2629,7 +3531,7 @@ def test_tiff_read_leak_ZIPSetupDecode():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/leak-ZIPSetupDecode.tif')
+ ds = gdal.Open("data/leak-ZIPSetupDecode.tif")
for i in range(ds.RasterCount):
ds.GetRasterBand(i + 1).Checksum()
@@ -2643,7 +3545,7 @@ def test_tiff_read_excessive_memory_TIFFFillStrip():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/excessive-memory-TIFFFillStrip.tif')
+ ds = gdal.Open("data/excessive-memory-TIFFFillStrip.tif")
for i in range(ds.RasterCount):
ds.GetRasterBand(i + 1).Checksum()
@@ -2657,7 +3559,7 @@ def test_tiff_read_excessive_memory_TIFFFillStrip2():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/excessive-memory-TIFFFillStrip2.tif')
+ ds = gdal.Open("data/excessive-memory-TIFFFillStrip2.tif")
ds.GetRasterBand(1).Checksum()
@@ -2670,7 +3572,7 @@ def test_tiff_read_excessive_memory_TIFFFillTile():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/excessive-memory-TIFFFillTile.tif')
+ ds = gdal.Open("data/excessive-memory-TIFFFillTile.tif")
ds.GetRasterBand(1).Checksum()
@@ -2682,13 +3584,18 @@ def test_tiff_read_big_strip():
if not check_libtiff_internal_or_at_least(4, 0, 8):
pytest.skip()
- gdal.Translate('/vsimem/test.tif', 'data/byte.tif', options='-co compress=lzw -outsize 10000 2000 -co blockysize=2000 -r bilinear -ot float32')
- if gdal.GetLastErrorMsg().find('cannot allocate') >= 0:
+ gdal.Translate(
+ "/vsimem/test.tif",
+ "data/byte.tif",
+ options="-co compress=lzw -outsize 10000 2000 -co blockysize=2000 -r bilinear -ot float32",
+ )
+ if gdal.GetLastErrorMsg().find("cannot allocate") >= 0:
pytest.skip()
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
assert ds.GetRasterBand(1).Checksum() == 2676
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
# (Potentially) test libtiff CHUNKY_STRIP_READ_SUPPORT
@@ -2696,12 +3603,17 @@ def test_tiff_read_big_strip():
def test_tiff_read_big_strip_chunky_way():
- gdal.Translate('/vsimem/test.tif', 'data/byte.tif', options='-co compress=lzw -outsize 1000 2001 -co blockysize=2001 -r bilinear')
- ds = gdal.Open('/vsimem/test.tif')
+ gdal.Translate(
+ "/vsimem/test.tif",
+ "data/byte.tif",
+ options="-co compress=lzw -outsize 1000 2001 -co blockysize=2001 -r bilinear",
+ )
+ ds = gdal.Open("/vsimem/test.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 38337
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
@@ -2711,13 +3623,18 @@ def test_tiff_read_big_tile():
if not check_libtiff_internal_or_at_least(4, 0, 8):
pytest.skip()
- gdal.Translate('/vsimem/test.tif', 'data/byte.tif', options='-co compress=lzw -outsize 10000 2000 -co tiled=yes -co blockxsize=10000 -co blockysize=2000 -r bilinear -ot float32')
- if gdal.GetLastErrorMsg().find('cannot allocate') >= 0:
+ gdal.Translate(
+ "/vsimem/test.tif",
+ "data/byte.tif",
+ options="-co compress=lzw -outsize 10000 2000 -co tiled=yes -co blockxsize=10000 -co blockysize=2000 -r bilinear -ot float32",
+ )
+ if gdal.GetLastErrorMsg().find("cannot allocate") >= 0:
pytest.skip()
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
assert ds.GetRasterBand(1).Checksum() == 2676
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
@@ -2725,20 +3642,21 @@ def test_tiff_read_big_tile():
def test_tiff_read_huge_tile():
with gdaltest.error_handler():
- ds = gdal.Open('data/hugeblocksize.tif')
+ ds = gdal.Open("data/hugeblocksize.tif")
assert ds is None
+
###############################################################################
def test_tiff_read_huge_number_strips():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] != "INTERNAL":
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/huge-number-strips.tif')
+ ds = gdal.Open("data/huge-number-strips.tif")
ds.GetRasterBand(1).Checksum()
@@ -2751,7 +3669,7 @@ def test_tiff_read_huge_implied_number_strips():
pytest.skip()
with gdaltest.error_handler():
- gdal.Open('data/huge-implied-number-strips.tif')
+ gdal.Open("data/huge-implied-number-strips.tif")
###############################################################################
@@ -2759,31 +3677,35 @@ def test_tiff_read_huge_implied_number_strips():
def test_tiff_read_many_blocks():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] != "INTERNAL":
pytest.skip()
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test.tif', 1, 2000000, options=['BLOCKYSIZE=1'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test.tif", 1, 2000000, options=["BLOCKYSIZE=1"]
+ )
ds = None
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
assert ds.GetRasterBand(1).Checksum() == 0
ds = None
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
def test_tiff_read_many_blocks_truncated():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] != "INTERNAL":
pytest.skip()
- ds = gdal.Open('data/many_blocks_truncated.tif')
+ ds = gdal.Open("data/many_blocks_truncated.tif")
gdal.ErrorReset()
with gdaltest.error_handler():
- ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_2000000', 'TIFF')
- assert gdal.GetLastErrorMsg() != ''
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_2000000", "TIFF")
+ assert gdal.GetLastErrorMsg() != ""
+
###############################################################################
# Test reading images with nbits > 32
@@ -2792,9 +3714,10 @@ def test_tiff_read_many_blocks_truncated():
def test_tiff_read_uint33():
with gdaltest.error_handler():
- ds = gdal.Open('data/uint33.tif')
+ ds = gdal.Open("data/uint33.tif")
assert ds is None
- assert gdal.GetLastErrorMsg().find('Unsupported TIFF configuration') >= 0
+ assert gdal.GetLastErrorMsg().find("Unsupported TIFF configuration") >= 0
+
###############################################################################
# Test fix for https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1545
@@ -2806,7 +3729,7 @@ def test_tiff_read_corrupted_deflate_singlestrip():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/corrupted_deflate_singlestrip.tif')
+ ds = gdal.Open("data/corrupted_deflate_singlestrip.tif")
ds.GetRasterBand(1).Checksum()
@@ -2820,7 +3743,7 @@ def test_tiff_read_packbits_not_enough_data():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/packbits-not-enough-data.tif')
+ ds = gdal.Open("data/packbits-not-enough-data.tif")
ds.GetRasterBand(1).Checksum()
@@ -2831,19 +3754,21 @@ def test_tiff_read_packbits_not_enough_data():
def test_tiff_read_toomanyblocks():
with gdaltest.error_handler():
- ds = gdal.Open('data/toomanyblocks.tif')
+ ds = gdal.Open("data/toomanyblocks.tif")
assert ds is None
###############################################################################
# Test reading images with more than 2billion blocks for all bands
+
def test_tiff_read_toomanyblocks_separate():
with gdaltest.error_handler():
- ds = gdal.Open('data/toomanyblocks_separate.tif')
+ ds = gdal.Open("data/toomanyblocks_separate.tif")
assert ds is None
+
###############################################################################
# Test reading images where the number of items in StripByteCounts/StripOffsets
# tag is lesser than the number of strips
@@ -2851,52 +3776,55 @@ def test_tiff_read_toomanyblocks_separate():
def test_tiff_read_size_of_stripbytecount_lower_than_stripcount():
- ds = gdal.Open('data/size_of_stripbytecount_lower_than_stripcount.tif')
+ ds = gdal.Open("data/size_of_stripbytecount_lower_than_stripcount.tif")
# There are 3 strips but StripByteCounts has just two elements;
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_1', 'TIFF') == '171'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_1', 'TIFF') == '1'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_2', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_2', 'TIFF') is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_1", "TIFF") == "171"
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_1", "TIFF") == "1"
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_2", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_2", "TIFF") is None
- ds = gdal.Open('data/size_of_stripbytecount_at_1_and_lower_than_stripcount.tif')
+ ds = gdal.Open("data/size_of_stripbytecount_at_1_and_lower_than_stripcount.tif")
# There are 3 strips but StripByteCounts has just one element;
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_0', 'TIFF') == '1'
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_0", "TIFF") == "1"
###############################################################################
# Test different datatypes for StripOffsets tag with little/big, classic/bigtiff
+
def test_tiff_read_stripoffset_types():
tests = [
- ('data/classictiff_one_block_byte.tif', []), # unsupported
- ('data/classictiff_one_block_long.tif', [158]),
- ('data/classictiff_one_block_be_long.tif', [158]),
- ('data/classictiff_one_strip_long.tif', [146]),
- ('data/classictiff_one_strip_be_long.tif', [146]),
- ('data/classictiff_two_strip_short.tif', [162, 163]),
- ('data/classictiff_two_strip_be_short.tif', [162, 163]),
- ('data/classictiff_four_strip_short.tif', [178, 179, 180, 181]),
- ('data/classictiff_four_strip_be_short.tif', [178, 179, 180, 181]),
- ('data/bigtiff_four_strip_short.tif', [316, 317, 318, 319]),
- ('data/bigtiff_four_strip_be_short.tif', [316, 317, 318, 319]),
- ('data/bigtiff_one_block_long8.tif', [272]),
- ('data/bigtiff_one_block_be_long8.tif', [272]),
- ('data/bigtiff_one_strip_long.tif', [252]),
- ('data/bigtiff_one_strip_be_long.tif', [252]),
- ('data/bigtiff_one_strip_long8.tif', [252]),
- ('data/bigtiff_one_strip_be_long8.tif', [252]),
- ('data/bigtiff_two_strip_long.tif', [284, 285]),
- ('data/bigtiff_two_strip_be_long.tif', [284, 285]),
- ('data/bigtiff_two_strip_long8.tif', [284, 285]),
- ('data/bigtiff_two_strip_be_long8.tif', [284, 285]),
+ ("data/classictiff_one_block_byte.tif", []), # unsupported
+ ("data/classictiff_one_block_long.tif", [158]),
+ ("data/classictiff_one_block_be_long.tif", [158]),
+ ("data/classictiff_one_strip_long.tif", [146]),
+ ("data/classictiff_one_strip_be_long.tif", [146]),
+ ("data/classictiff_two_strip_short.tif", [162, 163]),
+ ("data/classictiff_two_strip_be_short.tif", [162, 163]),
+ ("data/classictiff_four_strip_short.tif", [178, 179, 180, 181]),
+ ("data/classictiff_four_strip_be_short.tif", [178, 179, 180, 181]),
+ ("data/bigtiff_four_strip_short.tif", [316, 317, 318, 319]),
+ ("data/bigtiff_four_strip_be_short.tif", [316, 317, 318, 319]),
+ ("data/bigtiff_one_block_long8.tif", [272]),
+ ("data/bigtiff_one_block_be_long8.tif", [272]),
+ ("data/bigtiff_one_strip_long.tif", [252]),
+ ("data/bigtiff_one_strip_be_long.tif", [252]),
+ ("data/bigtiff_one_strip_long8.tif", [252]),
+ ("data/bigtiff_one_strip_be_long8.tif", [252]),
+ ("data/bigtiff_two_strip_long.tif", [284, 285]),
+ ("data/bigtiff_two_strip_be_long.tif", [284, 285]),
+ ("data/bigtiff_two_strip_long8.tif", [284, 285]),
+ ("data/bigtiff_two_strip_be_long8.tif", [284, 285]),
]
for (filename, expected_offsets) in tests:
# Only when built against internal libtiff we reject byte datatype
- if not expected_offsets and \
- gdal.GetDriverByName('GTiff').GetMetadataItem('LIBTIFF') != 'INTERNAL':
+ if (
+ not expected_offsets
+ and gdal.GetDriverByName("GTiff").GetMetadataItem("LIBTIFF") != "INTERNAL"
+ ):
continue
ds = gdal.Open(filename)
@@ -2904,7 +3832,8 @@ def test_tiff_read_stripoffset_types():
for row in range(4):
with gdaltest.error_handler():
mdi = ds.GetRasterBand(1).GetMetadataItem(
- 'BLOCK_OFFSET_0_%d' % row, 'TIFF')
+ "BLOCK_OFFSET_0_%d" % row, "TIFF"
+ )
if mdi is None:
break
offsets.append(int(mdi))
@@ -2927,40 +3856,42 @@ def test_tiff_read_progressive_jpeg_denial_of_service():
# libjpeg to allocate at least...'
gdal.ErrorReset()
with gdaltest.error_handler():
- os.environ['JPEGMEM'] = '10M'
- os.environ['LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER'] = '1000'
- ds = gdal.Open('/vsizip/data/eofloop_valid_huff.tif.zip')
- del os.environ['LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER']
- del os.environ['JPEGMEM']
+ os.environ["JPEGMEM"] = "10M"
+ os.environ["LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER"] = "1000"
+ ds = gdal.Open("/vsizip/data/eofloop_valid_huff.tif.zip")
+ del os.environ["LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER"]
+ del os.environ["JPEGMEM"]
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 0 and gdal.GetLastErrorMsg() != ''
+ assert cs == 0 and gdal.GetLastErrorMsg() != ""
# Should error out with 'TIFFjpeg_progress_monitor:Scan number...
gdal.ErrorReset()
- ds = gdal.Open('/vsizip/data/eofloop_valid_huff.tif.zip')
+ ds = gdal.Open("/vsizip/data/eofloop_valid_huff.tif.zip")
with gdaltest.error_handler():
- os.environ['LIBTIFF_ALLOW_LARGE_LIBJPEG_MEM_ALLOC'] = 'YES'
- os.environ['LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER'] = '10'
+ os.environ["LIBTIFF_ALLOW_LARGE_LIBJPEG_MEM_ALLOC"] = "YES"
+ os.environ["LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER"] = "10"
cs = ds.GetRasterBand(1).Checksum()
- del os.environ['LIBTIFF_ALLOW_LARGE_LIBJPEG_MEM_ALLOC']
- del os.environ['LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER']
- assert cs == 0 and gdal.GetLastErrorMsg() != ''
+ del os.environ["LIBTIFF_ALLOW_LARGE_LIBJPEG_MEM_ALLOC"]
+ del os.environ["LIBTIFF_JPEG_MAX_ALLOWED_SCAN_NUMBER"]
+ assert cs == 0 and gdal.GetLastErrorMsg() != ""
###############################################################################
# Test reading old-style LZW
+
def test_tiff_read_old_style_lzw():
if not check_libtiff_internal_or_at_least(4, 0, 8):
pytest.skip()
- ds = gdal.Open('data/quad-lzw-old-style.tif')
+ ds = gdal.Open("data/quad-lzw-old-style.tif")
# Shut down warning about old style LZW
with gdaltest.error_handler():
cs = ds.GetRasterBand(1).Checksum()
assert cs == 34282
+
###############################################################################
# Test libtiff mmap interface (actually not using mmap, but our /vsimem
# mmap emulation)
@@ -2968,17 +3899,14 @@ def test_tiff_read_old_style_lzw():
def test_tiff_read_mmap_interface():
- src_ds = gdal.Open('data/byte.tif')
- tmpfile = '/vsimem/tiff_read_mmap_interface.tif'
- for options in [[], ['TILED=YES'],
- ['COMPRESS=LZW'], ['COMPRESS=LZW', 'TILED=YES']]:
- gdal.GetDriverByName('GTiff').CreateCopy(tmpfile,
- src_ds,
- options=options)
- gdal.SetConfigOption('GTIFF_USE_MMAP', 'YES')
+ src_ds = gdal.Open("data/byte.tif")
+ tmpfile = "/vsimem/tiff_read_mmap_interface.tif"
+ for options in [[], ["TILED=YES"], ["COMPRESS=LZW"], ["COMPRESS=LZW", "TILED=YES"]]:
+ gdal.GetDriverByName("GTiff").CreateCopy(tmpfile, src_ds, options=options)
+ gdal.SetConfigOption("GTIFF_USE_MMAP", "YES")
ds = gdal.Open(tmpfile)
cs = ds.GetRasterBand(1).Checksum()
- gdal.SetConfigOption('GTIFF_USE_MMAP', None)
+ gdal.SetConfigOption("GTIFF_USE_MMAP", None)
assert cs == 4672, (options, cs)
f = gdal.VSIFOpenL(tmpfile, "rb")
@@ -2987,11 +3915,11 @@ def test_tiff_read_mmap_interface():
f = gdal.VSIFOpenL(tmpfile, "wb")
gdal.VSIFWriteL(data, 1, len(data), f)
gdal.VSIFCloseL(f)
- gdal.SetConfigOption('GTIFF_USE_MMAP', 'YES')
+ gdal.SetConfigOption("GTIFF_USE_MMAP", "YES")
with gdaltest.error_handler():
ds = gdal.Open(tmpfile)
cs = ds.GetRasterBand(1).Checksum()
- gdal.SetConfigOption('GTIFF_USE_MMAP', None)
+ gdal.SetConfigOption("GTIFF_USE_MMAP", None)
assert cs == 0, (options, cs)
gdal.Unlink(tmpfile)
@@ -3003,17 +3931,18 @@ def test_tiff_read_mmap_interface():
# strip height, instead of just the number of lines needed to reach the
# image height.
+
def test_tiff_read_jpeg_too_big_last_stripe():
if not check_libtiff_internal_or_at_least(4, 0, 9):
pytest.skip()
- ds = gdal.Open('data/tif_jpeg_too_big_last_stripe.tif')
+ ds = gdal.Open("data/tif_jpeg_too_big_last_stripe.tif")
with gdaltest.error_handler():
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4557
- ds = gdal.Open('data/tif_jpeg_ycbcr_too_big_last_stripe.tif')
+ ds = gdal.Open("data/tif_jpeg_ycbcr_too_big_last_stripe.tif")
with gdaltest.error_handler():
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4557
@@ -3022,18 +3951,19 @@ def test_tiff_read_jpeg_too_big_last_stripe():
###############################################################################
# Test reading GeoTIFF file with negative ScaleY in GeoPixelScale tag
+
def test_tiff_read_negative_scaley():
- ds = gdal.Open('data/negative_scaley.tif')
+ ds = gdal.Open("data/negative_scaley.tif")
with gdaltest.error_handler():
assert ds.GetGeoTransform()[5] == -60
- ds = gdal.Open('data/negative_scaley.tif')
- with gdaltest.config_option('GTIFF_HONOUR_NEGATIVE_SCALEY', 'NO'):
+ ds = gdal.Open("data/negative_scaley.tif")
+ with gdaltest.config_option("GTIFF_HONOUR_NEGATIVE_SCALEY", "NO"):
assert ds.GetGeoTransform()[5] == -60
- ds = gdal.Open('data/negative_scaley.tif')
- with gdaltest.config_option('GTIFF_HONOUR_NEGATIVE_SCALEY', 'YES'):
+ ds = gdal.Open("data/negative_scaley.tif")
+ with gdaltest.config_option("GTIFF_HONOUR_NEGATIVE_SCALEY", "YES"):
assert ds.GetGeoTransform()[5] == 60
@@ -3043,38 +3973,40 @@ def test_tiff_read_negative_scaley():
def test_tiff_read_zstd():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('ZSTD') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte_zstd.tif', 1, 4672)
+ ut = gdaltest.GDALTest("GTiff", "byte_zstd.tif", 1, 4672)
return ut.testOpen()
+
###############################################################################
# Test ZSTD compression
def test_tiff_read_zstd_corrupted():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('ZSTD') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte_zstd_corrupted.tif', 1, 0)
+ ut = gdaltest.GDALTest("GTiff", "byte_zstd_corrupted.tif", 1, 0)
with gdaltest.error_handler():
return ut.testOpen()
+
###############################################################################
# Test ZSTD compression
def test_tiff_read_zstd_corrupted2():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('ZSTD') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte_zstd_corrupted2.tif', 1, 0)
+ ut = gdaltest.GDALTest("GTiff", "byte_zstd_corrupted2.tif", 1, 0)
with gdaltest.error_handler():
return ut.testOpen()
@@ -3085,60 +4017,64 @@ def test_tiff_read_zstd_corrupted2():
def test_tiff_read_webp():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
stats = (0, 215, 66.38, 47.186)
- ut = gdaltest.GDALTest('GTiff', 'tif_webp.tif', 1, None)
+ ut = gdaltest.GDALTest("GTiff", "tif_webp.tif", 1, None)
success = ut.testOpen(check_approx_stat=stats, stat_epsilon=1)
- gdal.Unlink('data/tif_webp.tif.aux.xml')
+ gdal.Unlink("data/tif_webp.tif.aux.xml")
return success
+
###############################################################################
# Test WEBP compression
def test_tiff_read_webp_huge_single_strip():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
- ds = gdal.Open('data/tif_webp_huge_single_strip.tif')
+ ds = gdal.Open("data/tif_webp_huge_single_strip.tif")
assert ds.GetRasterBand(1).Checksum() != 0
+
###############################################################################
def test_tiff_read_1bit_2bands():
- ds = gdal.Open('data/1bit_2bands.tif')
+ ds = gdal.Open("data/1bit_2bands.tif")
cs = (ds.GetRasterBand(1).Checksum(), ds.GetRasterBand(2).Checksum())
assert cs == (200, 824)
+
###############################################################################
# Test LERC compression
def test_tiff_read_lerc():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte_lerc.tif', 1, 4672)
+ ut = gdaltest.GDALTest("GTiff", "byte_lerc.tif", 1, 4672)
return ut.testOpen()
+
###############################################################################
def test_tiff_read_overview_of_external_mask():
- filename = '/vsimem/tiff_read_overview_of_external_mask.tif'
- gdal.Translate(filename, 'data/byte.tif', options='-b 1 -mask 1')
+ filename = "/vsimem/tiff_read_overview_of_external_mask.tif"
+ gdal.Translate(filename, "data/byte.tif", options="-b 1 -mask 1")
ds = gdal.Open(filename, gdal.GA_Update)
- ds.BuildOverviews('CUBIC', overviewlist=[2])
+ ds.BuildOverviews("CUBIC", overviewlist=[2])
ds = None
- ds = gdal.Open(filename + '.msk', gdal.GA_Update)
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.Open(filename + ".msk", gdal.GA_Update)
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
ds = None
ds = gdal.Open(filename)
cs1 = ds.GetRasterBand(1).GetOverview(0).GetMaskBand().Checksum()
@@ -3147,18 +4083,20 @@ def test_tiff_read_overview_of_external_mask():
ds = None
gdal.Unlink(filename)
- gdal.Unlink(filename + '.msk')
+ gdal.Unlink(filename + ".msk")
assert cs1 == cs2
assert flags1 == gdal.GMF_PER_DATASET
+
###############################################################################
# Test reading GeoTIFF file ModelTiepointTag(z) != 0 and ModelPixelScaleTag(z) = 0
# Test https://issues.qgis.org/issues/20493
+
def test_tiff_read_ModelTiepointTag_z_non_zero_but_ModelPixelScaleTag_z_zero():
- ds = gdal.Open('data/ModelTiepointTag_z_non_zero_but_ModelPixelScaleTag_z_zero.tif')
+ ds = gdal.Open("data/ModelTiepointTag_z_non_zero_but_ModelPixelScaleTag_z_zero.tif")
assert not ds.GetRasterBand(1).GetScale()
assert not ds.GetRasterBand(1).GetOffset()
@@ -3166,30 +4104,37 @@ def test_tiff_read_ModelTiepointTag_z_non_zero_but_ModelPixelScaleTag_z_zero():
###############################################################################
# Test strip chopping on uncompressed fies with strips larger than 2 GB
+
def test_tiff_read_strip_larger_than_2GB():
if not check_libtiff_internal_or_at_least(4, 0, 11):
pytest.skip()
- ds = gdal.Open('data/strip_larger_than_2GB_header.tif')
+ ds = gdal.Open("data/strip_larger_than_2GB_header.tif")
assert ds
assert ds.GetRasterBand(1).GetBlockSize() == [50000, 10737]
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') == '264'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_0', 'TIFF') == '536850000'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_1', 'TIFF') == '536850264'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_1', 'TIFF') == '536850000'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_5', 'TIFF') == '2684250264'
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_5', 'TIFF') == '65750000'
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") == "264"
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_0", "TIFF") == "536850000"
+ assert (
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_1", "TIFF") == "536850264"
+ )
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_1", "TIFF") == "536850000"
+ assert (
+ ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_5", "TIFF") == "2684250264"
+ )
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_5", "TIFF") == "65750000"
+
###############################################################################
# Test reading a deflate compressed file with a uncompressed strip larger than 4 GB
+
def test_tiff_read_deflate_4GB():
if not check_libtiff_internal_or_at_least(4, 0, 11):
pytest.skip()
- ds = gdal.Open('/vsizip/data/test_deflate_4GB.tif.zip/test_deflate_4GB.tif')
+ ds = gdal.Open("/vsizip/data/test_deflate_4GB.tif.zip/test_deflate_4GB.tif")
if sys.maxsize < 2**32:
assert ds is None
return
@@ -3198,15 +4143,19 @@ def test_tiff_read_deflate_4GB():
if not gdaltest.run_slow_tests():
pytest.skip()
- data = ds.ReadRaster(0, 0, ds.RasterXSize, ds.RasterYSize, buf_xsize = 20, buf_ysize = 20)
- ref_ds = gdal.GetDriverByName('MEM').Create('', 20, 20)
+ data = ds.ReadRaster(
+ 0, 0, ds.RasterXSize, ds.RasterYSize, buf_xsize=20, buf_ysize=20
+ )
+ ref_ds = gdal.GetDriverByName("MEM").Create("", 20, 20)
ref_ds.GetRasterBand(1).Fill(127)
assert data == ref_ds.ReadRaster()
+
###############################################################################
# Check that our use of TileByteCounts is minimal for COG (only for last tile)
# and for interleaved mask that we also hardly use TileOffsets.
+
def test_tiff_read_cog_strile_arrays_zeroified_when_possible():
if not check_libtiff_internal_or_at_least(4, 0, 11):
@@ -3218,16 +4167,18 @@ def test_tiff_read_cog_strile_arrays_zeroified_when_possible():
# and then with an hex editor, zeroify all entries of TileByteCounts except the last tile for both IFDs
# and zeroify all entries of TileOffsets for 2nd IFD (mask) except the last tile.
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
- ds = gdal.Open('data/cog_strile_arrays_zeroified_when_possible.tif')
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
+ ds = gdal.Open("data/cog_strile_arrays_zeroified_when_possible.tif")
cs = ds.GetRasterBand(1).Checksum()
cs_mask = ds.GetRasterBand(1).GetMaskBand().Checksum()
assert cs == 4873
assert cs_mask == 1222
+
###############################################################################
# Check that our reading of a COG with /vsicurl is efficient
+
def test_tiff_read_cog_vsicurl():
if not check_libtiff_internal_or_at_least(4, 0, 11):
@@ -3241,81 +4192,113 @@ def test_tiff_read_cog_vsicurl():
webserver_process = None
webserver_port = 0
- (webserver_process, webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (webserver_process, webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if webserver_port == 0:
pytest.skip()
- in_filename = 'tmp/test_tiff_read_cog_vsicurl_in.tif'
- cog_filename = 'tmp/test_tiff_read_cog_vsicurl_out.tif'
+ in_filename = "tmp/test_tiff_read_cog_vsicurl_in.tif"
+ cog_filename = "tmp/test_tiff_read_cog_vsicurl_out.tif"
try:
- src_ds = gdal.GetDriverByName('GTIFF').Create(in_filename, 1024, 1024, options = ['BIGTIFF=YES', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'SPARSE_OK=YES'])
- src_ds.BuildOverviews('NEAR', [256])
- gdal.GetDriverByName('GTIFF').CreateCopy(cog_filename, src_ds, options = ['BIGTIFF=YES', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'COPY_SRC_OVERVIEWS=YES', 'COMPRESS=LZW'])
+ src_ds = gdal.GetDriverByName("GTIFF").Create(
+ in_filename,
+ 1024,
+ 1024,
+ options=[
+ "BIGTIFF=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "SPARSE_OK=YES",
+ ],
+ )
+ src_ds.BuildOverviews("NEAR", [256])
+ gdal.GetDriverByName("GTIFF").CreateCopy(
+ cog_filename,
+ src_ds,
+ options=[
+ "BIGTIFF=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "COPY_SRC_OVERVIEWS=YES",
+ "COMPRESS=LZW",
+ ],
+ )
filesize = gdal.VSIStatL(cog_filename).size
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/cog.tif', 200, {'Content-Length': '%d' % filesize})
+ handler.add("HEAD", "/cog.tif", 200, {"Content-Length": "%d" % filesize})
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=0-16383':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=0-16383":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 0-16383/%d' % filesize)
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 0-16383/%d" % filesize)
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write(open(cog_filename, 'rb').read(16384))
+ request.wfile.write(open(cog_filename, "rb").read(16384))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
with webserver.install_http_handler(handler):
- ds = gdal.Open('/vsicurl/http://localhost:%d/cog.tif' % webserver_port)
+ ds = gdal.Open("/vsicurl/http://localhost:%d/cog.tif" % webserver_port)
assert ds
handler = webserver.SequentialHandler()
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=32768-49151':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=32768-49151":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 32768-49151/%d' % filesize)
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 32768-49151/%d" % filesize)
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- with open(cog_filename, 'rb') as f:
+ with open(cog_filename, "rb") as f:
f.seek(32768, 0)
request.wfile.write(f.read(16384))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=180224-193497':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=180224-193497":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 180224-193497/%d' % filesize)
- request.send_header('Content-Length', 13274)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header(
+ "Content-Range", "bytes 180224-193497/%d" % filesize
+ )
+ request.send_header("Content-Length", 13274)
+ request.send_header("Connection", "close")
request.end_headers()
- with open(cog_filename, 'rb') as f:
+ with open(cog_filename, "rb") as f:
f.seek(180224, 0)
request.wfile.write(f.read(13274))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
with webserver.install_http_handler(handler):
- ret = ds.ReadRaster(1024 - 32,1024 - 32,16,16)
+ ret = ds.ReadRaster(1024 - 32, 1024 - 32, 16, 16)
assert ret
finally:
@@ -3323,12 +4306,14 @@ def method(request):
gdal.VSICurlClearCache()
- gdal.GetDriverByName('GTIFF').Delete(in_filename)
- gdal.GetDriverByName('GTIFF').Delete(cog_filename)
+ gdal.GetDriverByName("GTIFF").Delete(in_filename)
+ gdal.GetDriverByName("GTIFF").Delete(cog_filename)
+
###############################################################################
# Check that our reading of a COG with /vsicurl is efficient
+
def test_tiff_read_cog_with_mask_vsicurl():
if not check_libtiff_internal_or_at_least(4, 0, 11):
@@ -3342,86 +4327,120 @@ def test_tiff_read_cog_with_mask_vsicurl():
webserver_process = None
webserver_port = 0
- (webserver_process, webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (webserver_process, webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if webserver_port == 0:
pytest.skip()
- in_filename = 'tmp/test_tiff_read_cog_with_mask_vsicurl_in.tif'
- cog_filename = 'tmp/test_tiff_read_cog_with_mask_vsicurl_out.tif'
+ in_filename = "tmp/test_tiff_read_cog_with_mask_vsicurl_in.tif"
+ cog_filename = "tmp/test_tiff_read_cog_with_mask_vsicurl_out.tif"
try:
- src_ds = gdal.GetDriverByName('GTIFF').Create(in_filename, 1024, 1024, options = ['BIGTIFF=YES', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'SPARSE_OK=YES'])
- src_ds.BuildOverviews('NEAR', [256])
- with gdaltest.config_options({'GDAL_TIFF_INTERNAL_MASK': 'YES', 'GDAL_TIFF_DEFLATE_SUBCODEC': 'ZLIB'}):
+ src_ds = gdal.GetDriverByName("GTIFF").Create(
+ in_filename,
+ 1024,
+ 1024,
+ options=[
+ "BIGTIFF=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "SPARSE_OK=YES",
+ ],
+ )
+ src_ds.BuildOverviews("NEAR", [256])
+ with gdaltest.config_options(
+ {"GDAL_TIFF_INTERNAL_MASK": "YES", "GDAL_TIFF_DEFLATE_SUBCODEC": "ZLIB"}
+ ):
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- gdal.GetDriverByName('GTIFF').CreateCopy(cog_filename, src_ds, options = ['BIGTIFF=YES', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'COPY_SRC_OVERVIEWS=YES', 'COMPRESS=LZW'])
+ gdal.GetDriverByName("GTIFF").CreateCopy(
+ cog_filename,
+ src_ds,
+ options=[
+ "BIGTIFF=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "COPY_SRC_OVERVIEWS=YES",
+ "COMPRESS=LZW",
+ ],
+ )
filesize = gdal.VSIStatL(cog_filename).size
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/cog.tif', 200, {'Content-Length': '%d' % filesize})
+ handler.add("HEAD", "/cog.tif", 200, {"Content-Length": "%d" % filesize})
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=0-16383':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=0-16383":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 0-16383/%d' % filesize)
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 0-16383/%d" % filesize)
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write(open(cog_filename, 'rb').read(16384))
+ request.wfile.write(open(cog_filename, "rb").read(16384))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
with webserver.install_http_handler(handler):
- ds = gdal.Open('/vsicurl/http://localhost:%d/cog.tif' % webserver_port)
+ ds = gdal.Open("/vsicurl/http://localhost:%d/cog.tif" % webserver_port)
assert ds
handler = webserver.SequentialHandler()
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=32768-49151':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=32768-49151":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 32768-49151/%d' % filesize)
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 32768-49151/%d" % filesize)
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- with open(cog_filename, 'rb') as f:
+ with open(cog_filename, "rb") as f:
f.seek(32768, 0)
request.wfile.write(f.read(16384))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
+
def method(request):
- #sys.stderr.write('%s\n' % request.headers['Range'])
- if request.headers['Range'] == 'bytes=294912-311295':
- request.protocol_version = 'HTTP/1.1'
+ # sys.stderr.write('%s\n' % request.headers['Range'])
+ if request.headers["Range"] == "bytes=294912-311295":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 294912-311295/%d' % filesize)
- request.send_header('Content-Length', 32768)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header(
+ "Content-Range", "bytes 294912-311295/%d" % filesize
+ )
+ request.send_header("Content-Length", 32768)
+ request.send_header("Connection", "close")
request.end_headers()
- with open(cog_filename, 'rb') as f:
+ with open(cog_filename, "rb") as f:
f.seek(294912, 0)
request.wfile.write(f.read(32768))
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('GET', '/cog.tif', custom_method=method)
+
+ handler.add("GET", "/cog.tif", custom_method=method)
with webserver.install_http_handler(handler):
- ret = ds.ReadRaster(1024 - 32,1024 - 32,16,16)
+ ret = ds.ReadRaster(1024 - 32, 1024 - 32, 16, 16)
assert ret
- ret = ds.GetRasterBand(1).GetMaskBand().ReadRaster(1024 - 32,1024 - 32,16,16)
+ ret = ds.GetRasterBand(1).GetMaskBand().ReadRaster(1024 - 32, 1024 - 32, 16, 16)
assert ret
finally:
@@ -3429,8 +4448,9 @@ def method(request):
gdal.VSICurlClearCache()
- gdal.GetDriverByName('GTIFF').Delete(in_filename)
- gdal.GetDriverByName('GTIFF').Delete(cog_filename)
+ gdal.GetDriverByName("GTIFF").Delete(in_filename)
+ gdal.GetDriverByName("GTIFF").Delete(cog_filename)
+
###############################################################################
# Check that GetMetadataDomainList() works properly
@@ -3438,9 +4458,9 @@ def method(request):
def test_tiff_GetMetadataDomainList():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
mdd1_set = set([x for x in ds.GetMetadataDomainList()])
- assert mdd1_set == set(['', 'DERIVED_SUBDATASETS', 'IMAGE_STRUCTURE'])
+ assert mdd1_set == set(["", "DERIVED_SUBDATASETS", "IMAGE_STRUCTURE"])
mdd2_set = set([x for x in ds.GetMetadataDomainList()])
assert mdd1_set == mdd2_set
@@ -3455,7 +4475,7 @@ def test_tiff_read_bigtiff_invalid_slong8_for_stripoffsets():
pytest.skip()
with gdaltest.error_handler():
- ds = gdal.Open('data/byte_bigtiff_invalid_slong8_for_stripoffsets.tif')
+ ds = gdal.Open("data/byte_bigtiff_invalid_slong8_for_stripoffsets.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4672
@@ -3467,10 +4487,10 @@ def test_tiff_read_bigtiff_invalid_slong8_for_stripoffsets():
def test_tiff_read_tiff_single_band_with_whitepoint_primarychroma_tags():
- ds = gdal.Open('data/tiff_single_band_with_whitepoint_primarychroma_tags.tif')
+ ds = gdal.Open("data/tiff_single_band_with_whitepoint_primarychroma_tags.tif")
# Check that it doesn't crash. We could perhaps return something more
# useful
- assert ds.GetMetadata('COLOR_PROFILE') == {}
+ assert ds.GetMetadata("COLOR_PROFILE") == {}
###############################################################################
@@ -3481,45 +4501,52 @@ def test_tiff_read_tiff_single_band_with_whitepoint_primarychroma_tags():
def test_tiff_read_geodetic_tiff_grid():
- ds = gdal.Open('data/test_hgrid_with_subgrid.tif')
- assert ds.GetSubDatasets()[0][1] == 'Page 1 (10P x 10L x 2B): CAwest'
-
+ ds = gdal.Open("data/test_hgrid_with_subgrid.tif")
+ assert ds.GetSubDatasets()[0][1] == "Page 1 (10P x 10L x 2B): CAwest"
###############################################################################
# Test fix for https://github.com/OSGeo/gdal/issues/2903
# related to precomposed vs decomposed UTF-8 filenames on MacOSX
+
def test_tiff_read_utf8_encoding_issue_2903():
- if gdaltest.is_travis_branch('mingw_w64'):
+ if gdaltest.is_travis_branch("mingw_w64"):
pytest.skip()
- precomposed_utf8 = b'\xc3\xa4'.decode('utf-8')
- tmp_tif_filename = 'tmp/%s.tif' % precomposed_utf8
- tmp_tfw_filename = 'tmp/%s.tfw' % precomposed_utf8
- open(tmp_tif_filename, 'wb').write(open('data/byte_nogeoref.tif', 'rb').read())
- open(tmp_tfw_filename, 'wb').write(open('data/byte_nogeoref.tfw', 'rb').read())
+ precomposed_utf8 = b"\xc3\xa4".decode("utf-8")
+ tmp_tif_filename = "tmp/%s.tif" % precomposed_utf8
+ tmp_tfw_filename = "tmp/%s.tfw" % precomposed_utf8
+ open(tmp_tif_filename, "wb").write(open("data/byte_nogeoref.tif", "rb").read())
+ open(tmp_tfw_filename, "wb").write(open("data/byte_nogeoref.tfw", "rb").read())
ds = gdal.Open(tmp_tif_filename)
assert ds.GetGeoTransform()[0] != 0
ds = None
os.unlink(tmp_tif_filename)
os.unlink(tmp_tfw_filename)
+
###############################################################################
# Check over precision issue with nodata and Float32 (#3791)
def test_tiff_read_overprecision_nodata_float32():
- filename = '/vsimem/test_tiff_read_overprecision_nodata_float32.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1, 1, gdal.GDT_Float32)
+ filename = "/vsimem/test_tiff_read_overprecision_nodata_float32.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1, 1, gdal.GDT_Float32)
ds.GetRasterBand(1).SetNoDataValue(-3.4e38)
ds.GetRasterBand(1).Fill(-3.4e38)
ds = None
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetNoDataValue() == struct.unpack('f', struct.pack('f', -3.4e38))[0]
- assert struct.unpack('f', ds.GetRasterBand(1).ReadRaster())[0] == ds.GetRasterBand(1).GetNoDataValue()
+ assert (
+ ds.GetRasterBand(1).GetNoDataValue()
+ == struct.unpack("f", struct.pack("f", -3.4e38))[0]
+ )
+ assert (
+ struct.unpack("f", ds.GetRasterBand(1).ReadRaster())[0]
+ == ds.GetRasterBand(1).GetNoDataValue()
+ )
ds = None
gdal.Unlink(filename)
@@ -3532,8 +4559,8 @@ def test_tiff_read_unhandled_codec_known_name():
gdal.ErrorReset()
with gdaltest.error_handler():
- assert gdal.Open('data/gtiff/unsupported_codec_jp2000.tif') is None
- assert 'missing codec JP2000' in gdal.GetLastErrorMsg()
+ assert gdal.Open("data/gtiff/unsupported_codec_jp2000.tif") is None
+ assert "missing codec JP2000" in gdal.GetLastErrorMsg()
###############################################################################
@@ -3544,5 +4571,5 @@ def test_tiff_read_unhandled_codec_unknown_name():
gdal.ErrorReset()
with gdaltest.error_handler():
- assert gdal.Open('data/gtiff/unsupported_codec_unknown.tif') is None
- assert 'missing codec of code 44510' in gdal.GetLastErrorMsg()
+ assert gdal.Open("data/gtiff/unsupported_codec_unknown.tif") is None
+ assert "missing codec of code 44510" in gdal.GetLastErrorMsg()
diff --git a/autotest/gcore/tiff_read_subifds.py b/autotest/gcore/tiff_read_subifds.py
index 0fa3f6f65ef5..922d83c36e3e 100755
--- a/autotest/gcore/tiff_read_subifds.py
+++ b/autotest/gcore/tiff_read_subifds.py
@@ -33,14 +33,13 @@
from osgeo import gdal
-
###############################################################################
# Test absolute/offset && index directory access
def test_tiff_read_subifds():
- ds = gdal.Open('data/tiff_with_subifds.tif')
+ ds = gdal.Open("data/tiff_with_subifds.tif")
assert ds.GetRasterBand(1).Checksum() == 35731
sds = ds.GetSubDatasets()
@@ -48,26 +47,44 @@ def test_tiff_read_subifds():
assert sds[0][0] == "GTIFF_DIR:1:data/tiff_with_subifds.tif"
assert sds[1][0] == "GTIFF_DIR:2:data/tiff_with_subifds.tif"
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 220
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16
+ )
+ assert struct.unpack("H", data)[0] == 220
- data = ds.GetRasterBand(1).GetOverview(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 12
+ data = (
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .ReadRaster(buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16)
+ )
+ assert struct.unpack("H", data)[0] == 12
- ds = gdal.Open('GTIFF_DIR:1:data/tiff_with_subifds.tif')
+ ds = gdal.Open("GTIFF_DIR:1:data/tiff_with_subifds.tif")
assert ds.GetRasterBand(1).Checksum() == 35731
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 220
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16
+ )
+ assert struct.unpack("H", data)[0] == 220
- data = ds.GetRasterBand(1).GetOverview(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 12
+ data = (
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .ReadRaster(buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16)
+ )
+ assert struct.unpack("H", data)[0] == 12
- ds = gdal.Open('GTIFF_DIR:2:data/tiff_with_subifds.tif')
+ ds = gdal.Open("GTIFF_DIR:2:data/tiff_with_subifds.tif")
assert ds.GetRasterBand(1).Checksum() == 0
- data = ds.GetRasterBand(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 0
-
- data = ds.GetRasterBand(1).GetOverview(1).ReadRaster(buf_xsize=1,buf_ysize=1, xsize=1, ysize=1,buf_type=gdal.GDT_Int16)
- assert struct.unpack('H', data)[0] == 128
\ No newline at end of file
+ data = ds.GetRasterBand(1).ReadRaster(
+ buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16
+ )
+ assert struct.unpack("H", data)[0] == 0
+
+ data = (
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .ReadRaster(buf_xsize=1, buf_ysize=1, xsize=1, ysize=1, buf_type=gdal.GDT_Int16)
+ )
+ assert struct.unpack("H", data)[0] == 128
diff --git a/autotest/gcore/tiff_srs.py b/autotest/gcore/tiff_srs.py
index 9e721b38d0b2..3691d214b3c9 100755
--- a/autotest/gcore/tiff_srs.py
+++ b/autotest/gcore/tiff_srs.py
@@ -31,9 +31,7 @@
import gdaltest
import pytest
-from osgeo import gdal
-from osgeo import osr
-
+from osgeo import gdal, osr
###############################################################################
# Test fix for #4677:
@@ -42,21 +40,24 @@
def test_tiff_srs_without_linear_units():
sr = osr.SpatialReference()
- sr.ImportFromProj4('+proj=vandg +datum=WGS84')
+ sr.ImportFromProj4("+proj=vandg +datum=WGS84")
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_without_linear_units.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_without_linear_units.tif", 1, 1
+ )
ds.SetProjection(sr.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_without_linear_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_without_linear_units.tif")
wkt = ds.GetProjectionRef()
sr2 = osr.SpatialReference()
sr2.SetFromUserInput(wkt)
ds = None
- gdal.Unlink('/vsimem/tiff_srs_without_linear_units.tif')
+ gdal.Unlink("/vsimem/tiff_srs_without_linear_units.tif")
+
+ assert sr.IsSame(sr2) == 1, "did not get expected SRS"
- assert sr.IsSame(sr2) == 1, 'did not get expected SRS'
###############################################################################
# Test writing a COMPDCS without VerticalCSType
@@ -66,7 +67,8 @@ def test_srs_write_compd_cs():
sr = osr.SpatialReference()
# EPSG:7400 without the Authority
- sr.SetFromUserInput("""COMPD_CS["unknown",
+ sr.SetFromUserInput(
+ """COMPD_CS["unknown",
GEOGCS["NTF (Paris)",
DATUM["Nouvelle_Triangulation_Francaise_Paris",
SPHEROID["Clarke 1880 (IGN)",6378249.2,293.4660212936265,
@@ -80,38 +82,44 @@ def test_srs_write_compd_cs():
AUTHORITY["EPSG","5119"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
- AXIS["Up",UP]]]""")
+ AXIS["Up",UP]]]"""
+ )
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_compd_cs.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_srs_compd_cs.tif", 1, 1)
ds.SetProjection(sr.ExportToWkt())
ds = None
- gdal.SetConfigOption('GTIFF_REPORT_COMPD_CS', 'YES')
- ds = gdal.Open('/vsimem/tiff_srs_compd_cs.tif')
+ gdal.SetConfigOption("GTIFF_REPORT_COMPD_CS", "YES")
+ ds = gdal.Open("/vsimem/tiff_srs_compd_cs.tif")
gdal.ErrorReset()
wkt = ds.GetProjectionRef()
- assert gdal.GetLastErrorMsg() == ''
- gdal.SetConfigOption('GTIFF_REPORT_COMPD_CS', None)
+ assert gdal.GetLastErrorMsg() == ""
+ gdal.SetConfigOption("GTIFF_REPORT_COMPD_CS", None)
sr2 = osr.SpatialReference()
sr2.SetFromUserInput(wkt)
ds = None
- gdal.Unlink('/vsimem/tiff_srs_compd_cs.tif')
+ gdal.Unlink("/vsimem/tiff_srs_compd_cs.tif")
assert sr.IsSame(sr2) == 1, wkt
+
###############################################################################
# Test reading a COMPDCS without VerticalCSType
def test_srs_read_compd_cs():
- gdal.SetConfigOption('GTIFF_REPORT_COMPD_CS', 'YES')
- ds = gdal.Open('data/vertcs_user_defined.tif')
+ gdal.SetConfigOption("GTIFF_REPORT_COMPD_CS", "YES")
+ ds = gdal.Open("data/vertcs_user_defined.tif")
wkt = ds.GetProjectionRef()
- gdal.SetConfigOption('GTIFF_REPORT_COMPD_CS', None)
+ gdal.SetConfigOption("GTIFF_REPORT_COMPD_CS", None)
+
+ assert (
+ wkt
+ == 'COMPD_CS["NAD27 / UTM zone 11N + EGM2008 height",PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.978698213898,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","26711"]],VERT_CS["EGM2008 height",VERT_DATUM["EGM2008 geoid",2005,AUTHORITY["EPSG","1027"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],AXIS["Up",UP]]]'
+ )
- assert wkt == 'COMPD_CS["NAD27 / UTM zone 11N + EGM2008 height",PROJCS["NAD27 / UTM zone 11N",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.978698213898,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","26711"]],VERT_CS["EGM2008 height",VERT_DATUM["EGM2008 geoid",2005,AUTHORITY["EPSG","1027"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],AXIS["Up",UP]]]'
###############################################################################
# Test reading a GeoTIFF with both StdParallel1 and ScaleAtNatOrigin defined (#5791)
@@ -119,18 +127,19 @@ def test_srs_read_compd_cs():
def test_tiff_srs_weird_mercator_2sp():
- ds = gdal.Open('data/weird_mercator_2sp.tif')
+ ds = gdal.Open("data/weird_mercator_2sp.tif")
gdal.PushErrorHandler()
wkt = ds.GetProjectionRef()
gdal.PopErrorHandler()
- assert gdal.GetLastErrorMsg() != '', 'warning expected'
+ assert gdal.GetLastErrorMsg() != "", "warning expected"
sr2 = osr.SpatialReference()
sr2.SetFromUserInput(wkt)
ds = None
sr = osr.SpatialReference()
# EPSG:7400 without the Authority
- sr.SetFromUserInput("""PROJCS["Global Mercator",
+ sr.SetFromUserInput(
+ """PROJCS["Global Mercator",
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.2572221010002,
@@ -146,9 +155,11 @@ def test_tiff_srs_weird_mercator_2sp():
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
- AUTHORITY["EPSG","9001"]]]""")
+ AUTHORITY["EPSG","9001"]]]"""
+ )
+
+ assert sr.IsSame(sr2) == 1, "did not get expected SRS"
- assert sr.IsSame(sr2) == 1, 'did not get expected SRS'
###############################################################################
# Test reading ESRI WGS_1984_Web_Mercator_Auxiliary_Sphere
@@ -156,14 +167,16 @@ def test_tiff_srs_weird_mercator_2sp():
def test_tiff_srs_WGS_1984_Web_Mercator_Auxiliary_Sphere():
- ds = gdal.Open('data/WGS_1984_Web_Mercator_Auxiliary_Sphere.tif')
+ ds = gdal.Open("data/WGS_1984_Web_Mercator_Auxiliary_Sphere.tif")
wkt = ds.GetProjectionRef()
sr = osr.SpatialReference()
sr.SetFromUserInput(wkt)
wkt = sr.ExportToPrettyWkt()
ds = None
- assert wkt == """PROJCS["WGS 84 / Pseudo-Mercator",
+ assert (
+ wkt
+ == """PROJCS["WGS 84 / Pseudo-Mercator",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
@@ -184,6 +197,8 @@ def test_tiff_srs_WGS_1984_Web_Mercator_Auxiliary_Sphere():
AXIS["Easting",EAST],
AXIS["Northing",NORTH],
EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"]]"""
+ )
+
###############################################################################
# Test reading ESRI:102113 WGS_1984_Web_Mercator
@@ -191,12 +206,13 @@ def test_tiff_srs_WGS_1984_Web_Mercator_Auxiliary_Sphere():
def test_tiff_srs_WGS_1984_Web_Mercator():
- ds = gdal.Open('data/WGS_1984_Web_Mercator.tif')
+ ds = gdal.Open("data/WGS_1984_Web_Mercator.tif")
sr = ds.GetSpatialRef()
ds = None
- assert sr.GetAuthorityName(None) == 'ESRI'
- assert sr.GetAuthorityCode(None) == '102113'
+ assert sr.GetAuthorityName(None) == "ESRI"
+ assert sr.GetAuthorityCode(None) == "102113"
+
###############################################################################
# Test writing and reading various angular units
@@ -204,79 +220,104 @@ def test_tiff_srs_WGS_1984_Web_Mercator():
def test_tiff_srs_angular_units():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (arc-second)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (arc-second)",
DATUM["WGS_1984 (arc-second)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["arc-second",4.848136811095361e-06]]""")
+ UNIT["arc-second",4.848136811095361e-06]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["arc-second",4.84813681109536E-06' in wkt
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (arc-minute)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (arc-minute)",
DATUM["WGS_1984 (arc-minute)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["arc-minute",0.0002908882086657216]]""")
+ UNIT["arc-minute",0.0002908882086657216]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["arc-minute",0.000290888208665722]' in wkt
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (grad)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (grad)",
DATUM["WGS_1984 (grad)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["grad",0.01570796326794897]]""")
+ UNIT["grad",0.01570796326794897]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["grad",0.015707963267949' in wkt
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (gon)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (gon)",
DATUM["WGS_1984 (gon)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["gon",0.01570796326794897]]""")
+ UNIT["gon",0.01570796326794897]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["gon",0.015707963267949]' in wkt
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (radian)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (radian)",
DATUM["WGS_1984 (radian)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["radian",1]]""")
+ UNIT["radian",1]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["radian",1]' in wkt
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_angular_units.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 (custom)",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_angular_units.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 (custom)",
DATUM["WGS_1984 (custom)",
SPHEROID["WGS 84",6378137,298.257223563]],
PRIMEM["Greenwich",0],
- UNIT["custom",1.23]]""")
+ UNIT["custom",1.23]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_angular_units.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_angular_units.tif")
wkt = ds.GetProjectionRef()
assert 'UNIT["custom",1.23]' in wkt
ds = None
- gdal.Unlink('/vsimem/tiff_srs_angular_units.tif')
+ gdal.Unlink("/vsimem/tiff_srs_angular_units.tif")
+
###############################################################################
# Test writing and reading a unknown datum but with a known ellipsoid
@@ -284,19 +325,27 @@ def test_tiff_srs_angular_units():
def test_tiff_custom_datum_known_ellipsoid():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_custom_datum_known_ellipsoid.tif', 1, 1)
- ds.SetProjection("""GEOGCS["WGS 84 based",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_custom_datum_known_ellipsoid.tif", 1, 1
+ )
+ ds.SetProjection(
+ """GEOGCS["WGS 84 based",
DATUM["WGS_1984_based",
SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]]],
PRIMEM["Greenwich",0],
- UNIT["degree",1]]""")
+ UNIT["degree",1]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_custom_datum_known_ellipsoid.tif')
+ ds = gdal.Open("/vsimem/tiff_custom_datum_known_ellipsoid.tif")
wkt = ds.GetProjectionRef()
- assert wkt == 'GEOGCS["WGS 84 based",DATUM["WGS_1984_based",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST]]'
+ assert (
+ wkt
+ == 'GEOGCS["WGS 84 based",DATUM["WGS_1984_based",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST]]'
+ )
ds = None
- gdal.Unlink('/vsimem/tiff_custom_datum_known_ellipsoid.tif')
+ gdal.Unlink("/vsimem/tiff_custom_datum_known_ellipsoid.tif")
+
###############################################################################
# Test reading a GeoTIFF file with only PCS set, but with a ProjLinearUnitsGeoKey
@@ -305,18 +354,27 @@ def test_tiff_custom_datum_known_ellipsoid():
def test_tiff_srs_epsg_2853_with_us_feet():
- old_val = gdal.GetConfigOption('GTIFF_IMPORT_FROM_EPSG')
- gdal.SetConfigOption('GTIFF_IMPORT_FROM_EPSG', 'YES')
- ds = gdal.Open('data/epsg_2853_with_us_feet.tif')
- gdal.SetConfigOption('GTIFF_IMPORT_FROM_EPSG', old_val)
+ old_val = gdal.GetConfigOption("GTIFF_IMPORT_FROM_EPSG")
+ gdal.SetConfigOption("GTIFF_IMPORT_FROM_EPSG", "YES")
+ ds = gdal.Open("data/epsg_2853_with_us_feet.tif")
+ gdal.SetConfigOption("GTIFF_IMPORT_FROM_EPSG", old_val)
wkt = ds.GetProjectionRef()
- assert 'PARAMETER["false_easting",11482916.66' in wkt and 'UNIT["us_survey_feet",0.3048006' in wkt and '2853' not in wkt
-
- gdal.SetConfigOption('GTIFF_IMPORT_FROM_EPSG', 'NO')
- ds = gdal.Open('data/epsg_2853_with_us_feet.tif')
- gdal.SetConfigOption('GTIFF_IMPORT_FROM_EPSG', old_val)
+ assert (
+ 'PARAMETER["false_easting",11482916.66' in wkt
+ and 'UNIT["us_survey_feet",0.3048006' in wkt
+ and "2853" not in wkt
+ )
+
+ gdal.SetConfigOption("GTIFF_IMPORT_FROM_EPSG", "NO")
+ ds = gdal.Open("data/epsg_2853_with_us_feet.tif")
+ gdal.SetConfigOption("GTIFF_IMPORT_FROM_EPSG", old_val)
wkt = ds.GetProjectionRef()
- assert 'PARAMETER["false_easting",11482916.66' in wkt and 'UNIT["us_survey_feet",0.3048006' in wkt and '2853' not in wkt
+ assert (
+ 'PARAMETER["false_easting",11482916.66' in wkt
+ and 'UNIT["us_survey_feet",0.3048006' in wkt
+ and "2853" not in wkt
+ )
+
###############################################################################
# Test reading a SRS with a PCSCitationGeoKey = "LUnits = ..."
@@ -324,8 +382,11 @@ def test_tiff_srs_epsg_2853_with_us_feet():
def test_tiff_srs_PCSCitationGeoKey_LUnits():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif', 1, 1)
- ds.SetProjection("""PROJCS["UTM Zone 32, Northern Hemisphere",
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif", 1, 1
+ )
+ ds.SetProjection(
+ """PROJCS["UTM Zone 32, Northern Hemisphere",
GEOGCS["GRS 1980(IUGG, 1980)",
DATUM["unknown",
SPHEROID["GRS80",6378137,298.257222101],
@@ -338,14 +399,19 @@ def test_tiff_srs_PCSCitationGeoKey_LUnits():
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",50000000],
PARAMETER["false_northing",0],
- UNIT["Centimeter",0.01]]""")
+ UNIT["Centimeter",0.01]]"""
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif')
+ ds = gdal.Open("/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif")
wkt = ds.GetProjectionRef()
- assert wkt == 'PROJCS["UTM Zone 32, Northern Hemisphere",GEOGCS["GRS 1980(IUGG, 1980)",DATUM["unknown",SPHEROID["GRS80",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",50000000],PARAMETER["false_northing",0],UNIT["Centimeter",0.01],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
+ assert (
+ wkt
+ == 'PROJCS["UTM Zone 32, Northern Hemisphere",GEOGCS["GRS 1980(IUGG, 1980)",DATUM["unknown",SPHEROID["GRS80",6378137,298.257222101],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",50000000],PARAMETER["false_northing",0],UNIT["Centimeter",0.01],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
+ )
ds = None
- gdal.Unlink('/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif')
+ gdal.Unlink("/vsimem/tiff_srs_PCSCitationGeoKey_LUnits.tif")
+
###############################################################################
# Test reading a geotiff key ProjectionGeoKey (Short,1): Unknown-3856
@@ -353,11 +419,15 @@ def test_tiff_srs_PCSCitationGeoKey_LUnits():
def test_tiff_srs_projection_3856():
- ds = gdal.Open('data/projection_3856.tif')
+ ds = gdal.Open("data/projection_3856.tif")
wkt = ds.GetProjectionRef()
ds = None
- assert 'EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs' in wkt
+ assert (
+ 'EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs'
+ in wkt
+ )
+
###############################################################################
# Test reading a geotiff with a LOCAL_CS and a Imagine citation
@@ -365,11 +435,14 @@ def test_tiff_srs_projection_3856():
def test_tiff_srs_imagine_localcs_citation():
- ds = gdal.Open('data/imagine_localcs_citation.tif')
+ ds = gdal.Open("data/imagine_localcs_citation.tif")
wkt = ds.GetProjectionRef()
ds = None
- assert wkt.startswith('LOCAL_CS["Projection Name = UTM Units = meters GeoTIFF Units = meters"')
+ assert wkt.startswith(
+ 'LOCAL_CS["Projection Name = UTM Units = meters GeoTIFF Units = meters"'
+ )
+
###############################################################################
# Test reading a geotiff with a EPSG code and a TOWGS84 key that must
@@ -378,21 +451,22 @@ def test_tiff_srs_imagine_localcs_citation():
def test_tiff_srs_towgs84_override_OSR_STRIP_TOWGS84_NO():
- with gdaltest.config_option('OSR_STRIP_TOWGS84', 'NO'):
- ds = gdal.Open('data/gtiff_towgs84_override.tif')
+ with gdaltest.config_option("OSR_STRIP_TOWGS84", "NO"):
+ ds = gdal.Open("data/gtiff_towgs84_override.tif")
wkt = ds.GetProjectionRef()
ds = None
- assert 'TOWGS84[584.8,67,400.3,0.105,0.013,-2.378,10.29]' in wkt, wkt
+ assert "TOWGS84[584.8,67,400.3,0.105,0.013,-2.378,10.29]" in wkt, wkt
def test_tiff_srs_towgs84_override_OSR_STRIP_TOWGS84_default():
- ds = gdal.Open('data/gtiff_towgs84_override.tif')
+ ds = gdal.Open("data/gtiff_towgs84_override.tif")
wkt = ds.GetProjectionRef()
ds = None
- assert 'TOWGS84' not in wkt
+ assert "TOWGS84" not in wkt
+
###############################################################################
# Test reading PCSCitationGeoKey (#7199)
@@ -400,19 +474,20 @@ def test_tiff_srs_towgs84_override_OSR_STRIP_TOWGS84_default():
def test_tiff_srs_pcscitation():
- ds = gdal.Open('data/pcscitation.tif')
+ ds = gdal.Open("data/pcscitation.tif")
wkt = ds.GetProjectionRef()
ds = None
assert wkt.startswith('PROJCS["mycitation",')
+
###############################################################################
# Test reading file with ProjectedCSTypeGeoKey and GeographicTypeGeoKey
def test_tiff_srs_ProjectedCSTypeGeoKey_GeographicTypeGeoKey():
- ds = gdal.Open('data/utmsmall.tif')
+ ds = gdal.Open("data/utmsmall.tif")
sr = ds.GetSpatialRef()
assert sr.GetAuthorityCode(None) == "26711"
@@ -421,36 +496,41 @@ def _test_tiff_srs(sr, expect_fail):
"""
This is not a test by itself; it gets called by the tests below.
"""
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/TestTiffSRS.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/TestTiffSRS.tif", 1, 1)
ds.SetSpatialRef(sr)
ds = None
# The GeoTIFF driver is smart enough to figure out that a CRS with
# '+proj=longlat +datum=WGS84' is EPSG:4326
- if sr.GetAuthorityCode(None) is None and '+proj=longlat +datum=WGS84' in sr.ExportToProj4():
+ if (
+ sr.GetAuthorityCode(None) is None
+ and "+proj=longlat +datum=WGS84" in sr.ExportToProj4()
+ ):
sr.ImportFromEPSG(4326)
- ds = gdal.Open('/vsimem/TestTiffSRS.tif')
+ ds = gdal.Open("/vsimem/TestTiffSRS.tif")
sr2 = ds.GetSpatialRef()
- if 'Miller' in sr2.ExportToWkt():
+ if "Miller" in sr2.ExportToWkt():
# Trick so that the EXTENSION node with a PROJ string including +R_A is added
sr2.ImportFromProj4(sr2.ExportToProj4())
ds = None
- gdal.Unlink('/vsimem/TestTiffSRS.tif')
+ gdal.Unlink("/vsimem/TestTiffSRS.tif")
if sr.IsSame(sr2) != 1:
if expect_fail:
- pytest.xfail('did not get expected SRS. known to be broken currently. FIXME!')
+ pytest.xfail(
+ "did not get expected SRS. known to be broken currently. FIXME!"
+ )
- #print(sr.ExportToWkt(['FORMAT=WKT2_2019']))
- #print(sr2.ExportToWkt(['FORMAT=WKT2_2019']))
+ # print(sr.ExportToWkt(['FORMAT=WKT2_2019']))
+ # print(sr2.ExportToWkt(['FORMAT=WKT2_2019']))
print(sr)
print(sr2)
- assert False, 'did not get expected SRS'
+ assert False, "did not get expected SRS"
else:
if expect_fail:
- print('Succeeded but expected fail...')
+ print("Succeeded but expected fail...")
###############################################################################
@@ -465,13 +545,13 @@ def _test_tiff_srs(sr, expect_fail):
[32661, False], # stere
[3408, False], # laea
[2062, False], # lcc 1SP
- #[2065, True], # krovak South-West
+ # [2065, True], # krovak South-West
[5221, True], # krovak east-north
[2066, False], # cass
[2964, False], # aea
- #[3410, False], # cea spherical, method=9834. EPSG:3410 is now deprecated
+ # [3410, False], # cea spherical, method=9834. EPSG:3410 is now deprecated
[6933, False], # cea ellipsoidal, method=9835
- #[3786, False], # eqc spherical, method=9823. EPSG:3786 is now deprecated
+ # [3786, False], # eqc spherical, method=9823. EPSG:3786 is now deprecated
[32663, False], # eqc elliptical, method=9842
[4087, False], # eqc WGS 84 / World Equidistant Cylindrical method=1028
[4088, False], # eqc World Equidistant Cylindrical (Sphere) method=1029
@@ -496,16 +576,16 @@ def _test_tiff_srs(sr, expect_fail):
]
-@pytest.mark.parametrize('use_epsg_code', [0, 1])
+@pytest.mark.parametrize("use_epsg_code", [0, 1])
@pytest.mark.parametrize(
- 'epsg_code,epsg_proj4_broken',
+ "epsg_code,epsg_proj4_broken",
epsg_list,
ids=[str(r[0]) for r in epsg_list],
)
def test_tiff_srs(use_epsg_code, epsg_code, epsg_proj4_broken):
sr = osr.SpatialReference()
if epsg_code > 32767:
- sr.SetFromUserInput('ESRI:' + str(epsg_code))
+ sr.SetFromUserInput("ESRI:" + str(epsg_code))
else:
sr.ImportFromEPSG(epsg_code)
sr.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
@@ -521,21 +601,22 @@ def test_tiff_srs(use_epsg_code, epsg_code, epsg_proj4_broken):
@pytest.mark.parametrize(
- 'proj4',
+ "proj4",
[
- '+proj=eqdc +lat_0=%.16g +lon_0=%.16g +lat_1=%.16g +lat_2=%.16g" +x_0=%.16g +y_0=%.16g' % (1, 2, 3, 4, 5, 6),
- '+proj=mill +R_A +lon_0=2 +x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs',
- '+proj=gnom +lat_0=%.16g +lon_0=%.16g +x_0=%.16g +y_0=%.16g' % (1, 2, 3, 4),
- '+proj=robin +lon_0=%.16g +x_0=%.16g +y_0=%.16g' % (1, 2, 3),
- '+proj=sinu +lon_0=%.16g +x_0=%.16g +y_0=%.16g' % (1, 2, 3),
+ '+proj=eqdc +lat_0=%.16g +lon_0=%.16g +lat_1=%.16g +lat_2=%.16g" +x_0=%.16g +y_0=%.16g'
+ % (1, 2, 3, 4, 5, 6),
+ "+proj=mill +R_A +lon_0=2 +x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs",
+ "+proj=gnom +lat_0=%.16g +lon_0=%.16g +x_0=%.16g +y_0=%.16g" % (1, 2, 3, 4),
+ "+proj=robin +lon_0=%.16g +x_0=%.16g +y_0=%.16g" % (1, 2, 3),
+ "+proj=sinu +lon_0=%.16g +x_0=%.16g +y_0=%.16g" % (1, 2, 3),
],
ids=[
- 'eqdc',
- 'mill',
- 'gnom',
- 'robin',
- 'sinu',
- ]
+ "eqdc",
+ "mill",
+ "gnom",
+ "robin",
+ "sinu",
+ ],
)
def test_tiff_srs_proj4(proj4):
sr = osr.SpatialReference()
@@ -543,164 +624,176 @@ def test_tiff_srs_proj4(proj4):
_test_tiff_srs(sr, False)
-def _create_geotiff1_1_from_copy_and_compare(srcfilename, options = []):
- if int(gdal.GetDriverByName('GTiff').GetMetadataItem('LIBGEOTIFF')) < 1600:
+def _create_geotiff1_1_from_copy_and_compare(srcfilename, options=[]):
+ if int(gdal.GetDriverByName("GTiff").GetMetadataItem("LIBGEOTIFF")) < 1600:
pytest.skip()
src_ds = gdal.Open(srcfilename)
- tmpfile = '/vsimem/tmp.tif'
- gdal.GetDriverByName('GTiff').CreateCopy(tmpfile, src_ds, options = options + ['ENDIANNESS=LITTLE'])
- f = gdal.VSIFOpenL(tmpfile, 'rb')
+ tmpfile = "/vsimem/tmp.tif"
+ gdal.GetDriverByName("GTiff").CreateCopy(
+ tmpfile, src_ds, options=options + ["ENDIANNESS=LITTLE"]
+ )
+ f = gdal.VSIFOpenL(tmpfile, "rb")
data = gdal.VSIFReadL(1, 100000, f)
gdal.VSIFCloseL(f)
gdal.Unlink(tmpfile)
- assert data == open(src_ds.GetDescription(), 'rb').read()
+ assert data == open(src_ds.GetDescription(), "rb").read()
def test_tiff_srs_read_epsg4326_geotiff1_1():
- ds = gdal.Open('data/epsg4326_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg4326_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetAuthorityCode(None) == '4326'
+ assert sr.GetAuthorityCode(None) == "4326"
def test_tiff_srs_write_epsg4326_geotiff1_1():
- _create_geotiff1_1_from_copy_and_compare('data/epsg4326_geotiff1_1.tif',
- options = ['GEOTIFF_VERSION=1.1'])
+ _create_geotiff1_1_from_copy_and_compare(
+ "data/epsg4326_geotiff1_1.tif", options=["GEOTIFF_VERSION=1.1"]
+ )
def test_tiff_srs_read_epsg26711_geotiff1_1():
- ds = gdal.Open('data/epsg26711_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg26711_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetAuthorityCode(None) == '26711'
+ assert sr.GetAuthorityCode(None) == "26711"
def test_tiff_srs_write_epsg26711_geotiff1_1():
- _create_geotiff1_1_from_copy_and_compare('data/epsg26711_geotiff1_1.tif',
- options = ['GEOTIFF_VERSION=1.1'])
+ _create_geotiff1_1_from_copy_and_compare(
+ "data/epsg26711_geotiff1_1.tif", options=["GEOTIFF_VERSION=1.1"]
+ )
def test_tiff_srs_read_epsg4326_3855_geotiff1_1():
- ds = gdal.Open('data/epsg4326_3855_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg4326_3855_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetName() == 'WGS 84 + EGM2008 height'
- assert sr.GetAuthorityCode('COMPD_CS|GEOGCS') == '4326'
- assert sr.GetAuthorityCode('COMPD_CS|VERT_CS') == '3855'
+ assert sr.GetName() == "WGS 84 + EGM2008 height"
+ assert sr.GetAuthorityCode("COMPD_CS|GEOGCS") == "4326"
+ assert sr.GetAuthorityCode("COMPD_CS|VERT_CS") == "3855"
def test_tiff_srs_write_epsg4326_3855_geotiff1_1():
- _create_geotiff1_1_from_copy_and_compare('data/epsg4326_3855_geotiff1_1.tif')
+ _create_geotiff1_1_from_copy_and_compare("data/epsg4326_3855_geotiff1_1.tif")
def test_tiff_srs_read_epsg4979_geotiff1_1():
- ds = gdal.Open('data/epsg4979_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg4979_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetAuthorityCode(None) == '4979'
+ assert sr.GetAuthorityCode(None) == "4979"
def test_tiff_srs_write_epsg4979_geotiff1_1():
- _create_geotiff1_1_from_copy_and_compare('data/epsg4979_geotiff1_1.tif')
+ _create_geotiff1_1_from_copy_and_compare("data/epsg4979_geotiff1_1.tif")
def test_tiff_srs_write_epsg4937_etrs89_3D_geotiff1_1():
- if int(gdal.GetDriverByName('GTiff').GetMetadataItem('LIBGEOTIFF')) < 1600:
+ if int(gdal.GetDriverByName("GTiff").GetMetadataItem("LIBGEOTIFF")) < 1600:
pytest.skip()
- tmpfile = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').Create(tmpfile, 1, 1)
+ tmpfile = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(tmpfile, 1, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(4937)
ds.SetSpatialRef(sr)
ds = None
ds = gdal.Open(tmpfile)
- assert sr.GetName() == 'ETRS89'
- assert sr.GetAuthorityCode(None) == '4937'
+ assert sr.GetName() == "ETRS89"
+ assert sr.GetAuthorityCode(None) == "4937"
ds = None
gdal.Unlink(tmpfile)
# Deprecated way of conveying GeographicCRS 3D
def test_tiff_srs_read_epsg4326_5030_geotiff1_1():
- ds = gdal.Open('data/epsg4326_5030_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg4326_5030_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetAuthorityCode(None) == '4979'
+ assert sr.GetAuthorityCode(None) == "4979"
def test_tiff_srs_read_epsg26711_3855_geotiff1_1():
- ds = gdal.Open('data/epsg26711_3855_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg26711_3855_geotiff1_1.tif")
sr = ds.GetSpatialRef()
- assert sr.GetName() == 'NAD27 / UTM zone 11N + EGM2008 height'
- assert sr.GetAuthorityCode('COMPD_CS|PROJCS') == '26711'
- assert sr.GetAuthorityCode('COMPD_CS|VERT_CS') == '3855'
+ assert sr.GetName() == "NAD27 / UTM zone 11N + EGM2008 height"
+ assert sr.GetAuthorityCode("COMPD_CS|PROJCS") == "26711"
+ assert sr.GetAuthorityCode("COMPD_CS|VERT_CS") == "3855"
def test_tiff_srs_write_epsg26711_3855_geotiff1_1():
- _create_geotiff1_1_from_copy_and_compare('data/epsg26711_3855_geotiff1_1.tif')
+ _create_geotiff1_1_from_copy_and_compare("data/epsg26711_3855_geotiff1_1.tif")
# ProjectedCRS 3D not really defined yet in GeoTIFF 1.1, but this is
# a natural extension
def test_tiff_srs_read_epsg32631_4979_geotiff1_1():
- ds = gdal.Open('data/epsg32631_4979_geotiff1_1.tif')
+ ds = gdal.Open("data/epsg32631_4979_geotiff1_1.tif")
sr = ds.GetSpatialRef()
assert sr.IsProjected()
assert sr.GetAxesCount() == 3
- assert sr.GetName() == 'WGS 84 / UTM zone 31N'
+ assert sr.GetName() == "WGS 84 / UTM zone 31N"
sr_geog = osr.SpatialReference()
sr_geog.CopyGeogCSFrom(sr)
- assert sr_geog.GetAuthorityCode(None) == '4979'
+ assert sr_geog.GetAuthorityCode(None) == "4979"
def test_tiff_srs_write_vertical_perspective():
if osr.GetPROJVersionMajor() * 100 + osr.GetPROJVersionMinor() < 700:
- pytest.skip('requires PROJ 7 or later')
+ pytest.skip("requires PROJ 7 or later")
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src.tif", 1, 1)
sr = osr.SpatialReference()
sr.SetGeogCS("GEOG_NAME", "D_DATUM_NAME", "", 3000000, 0)
sr.SetVerticalPerspective(1, 2, 0, 1000, 0, 0)
gdal.ErrorReset()
ds.SetSpatialRef(sr)
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
ds = None
- src_ds = gdal.Open('/vsimem/src.tif')
+ src_ds = gdal.Open("/vsimem/src.tif")
# First is PROJ 7
- assert src_ds.GetSpatialRef().ExportToProj4() in ('+proj=nsper +lat_0=1 +lon_0=2 +h=1000 +x_0=0 +y_0=0 +R=3000000 +units=m +no_defs', '+proj=nsper +R=3000000 +lat_0=1 +lon_0=2 +h=1000 +x_0=0 +y_0=0 +wktext +no_defs')
+ assert src_ds.GetSpatialRef().ExportToProj4() in (
+ "+proj=nsper +lat_0=1 +lon_0=2 +h=1000 +x_0=0 +y_0=0 +R=3000000 +units=m +no_defs",
+ "+proj=nsper +R=3000000 +lat_0=1 +lon_0=2 +h=1000 +x_0=0 +y_0=0 +wktext +no_defs",
+ )
gdal.ErrorReset()
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/dst.tif', src_ds)
- assert gdal.GetLastErrorMsg() == ''
+ gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/dst.tif", src_ds)
+ assert gdal.GetLastErrorMsg() == ""
- ds = gdal.Open('/vsimem/dst.tif')
+ ds = gdal.Open("/vsimem/dst.tif")
assert ds.GetSpatialRef().ExportToProj4() == src_ds.GetSpatialRef().ExportToProj4()
src_ds = None
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src.tif')
- gdal.GetDriverByName('GTiff').Delete('/vsimem/dst.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src.tif")
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/dst.tif")
def test_tiff_srs_write_ob_tran_eqc():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src.tif", 1, 1)
sr = osr.SpatialReference()
- sr.ImportFromProj4( '+proj=ob_tran +o_proj=eqc +o_lon_p=-90 +o_lat_p=180 +lon_0=0 +R=3396190 +units=m +no_defs' )
+ sr.ImportFromProj4(
+ "+proj=ob_tran +o_proj=eqc +o_lon_p=-90 +o_lat_p=180 +lon_0=0 +R=3396190 +units=m +no_defs"
+ )
ds.SetSpatialRef(sr)
ds = None
- assert gdal.VSIStatL('/vsimem/src.tif.aux.xml')
+ assert gdal.VSIStatL("/vsimem/src.tif.aux.xml")
- ds = gdal.Open('/vsimem/src.tif')
- assert ds.GetSpatialRef().ExportToProj4() == '+proj=ob_tran +o_proj=eqc +o_lon_p=-90 +o_lat_p=180 +lon_0=0 +R=3396190 +units=m +no_defs'
+ ds = gdal.Open("/vsimem/src.tif")
+ assert (
+ ds.GetSpatialRef().ExportToProj4()
+ == "+proj=ob_tran +o_proj=eqc +o_lon_p=-90 +o_lat_p=180 +lon_0=0 +R=3396190 +units=m +no_defs"
+ )
ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src.tif")
def test_tiff_srs_towgs84_from_epsg_do_not_write_it():
- filename = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
srs_in = osr.SpatialReference()
srs_in.ImportFromEPSG(31468)
srs_in.AddGuessedTOWGS84()
@@ -709,36 +802,37 @@ def test_tiff_srs_towgs84_from_epsg_do_not_write_it():
ds = None
ds = gdal.Open(filename)
- with gdaltest.config_option('OSR_ADD_TOWGS84_ON_IMPORT_FROM_EPSG', 'NO'):
+ with gdaltest.config_option("OSR_ADD_TOWGS84_ON_IMPORT_FROM_EPSG", "NO"):
srs = ds.GetSpatialRef()
assert not srs.HasTOWGS84()
def test_tiff_srs_towgs84_from_epsg_force_write_it():
- filename = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
srs_in = osr.SpatialReference()
srs_in.ImportFromEPSG(31468)
srs_in.AddGuessedTOWGS84()
assert srs_in.HasTOWGS84()
- with gdaltest.config_option('GTIFF_WRITE_TOWGS84', 'YES'):
+ with gdaltest.config_option("GTIFF_WRITE_TOWGS84", "YES"):
ds.SetSpatialRef(srs_in)
ds = None
- with gdaltest.config_option('OSR_STRIP_TOWGS84', 'NO'):
+ with gdaltest.config_option("OSR_STRIP_TOWGS84", "NO"):
ds = gdal.Open(filename)
- with gdaltest.config_option('OSR_ADD_TOWGS84_ON_IMPORT_FROM_EPSG', 'NO'):
+ with gdaltest.config_option("OSR_ADD_TOWGS84_ON_IMPORT_FROM_EPSG", "NO"):
srs = ds.GetSpatialRef()
assert srs.HasTOWGS84()
def test_tiff_srs_towgs84_with_epsg_code_but_non_default_TOWGS84():
- filename = '/vsimem/test.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/test.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
srs_in = osr.SpatialReference()
- srs_in.SetFromUserInput("""PROJCS["DHDN / 3-degree Gauss-Kruger zone 4",
+ srs_in.SetFromUserInput(
+ """PROJCS["DHDN / 3-degree Gauss-Kruger zone 4",
GEOGCS["DHDN",
DATUM["Deutsches_Hauptdreiecksnetz",
SPHEROID["Bessel 1841",6377397.155,299.1528128,
@@ -760,27 +854,28 @@ def test_tiff_srs_towgs84_with_epsg_code_but_non_default_TOWGS84():
AUTHORITY["EPSG","9001"]],
AXIS["Northing",NORTH],
AXIS["Easting",EAST],
- AUTHORITY["EPSG","31468"]]""")
+ AUTHORITY["EPSG","31468"]]"""
+ )
ds.SetSpatialRef(srs_in)
ds = None
- with gdaltest.config_option('OSR_STRIP_TOWGS84', 'NO'):
+ with gdaltest.config_option("OSR_STRIP_TOWGS84", "NO"):
ds = gdal.Open(filename)
srs = ds.GetSpatialRef()
- assert srs.GetTOWGS84() == (1,2,3,4,5,6,7)
+ assert srs.GetTOWGS84() == (1, 2, 3, 4, 5, 6, 7)
def test_tiff_srs_write_epsg3857():
- tmpfile = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').Create(tmpfile, 1, 1)
+ tmpfile = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(tmpfile, 1, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(3857)
ds.SetSpatialRef(sr)
ds = None
ds = gdal.Open(tmpfile)
- assert sr.GetName() == 'WGS 84 / Pseudo-Mercator'
- assert sr.GetAuthorityCode(None) == '3857'
- f = gdal.VSIFOpenL(tmpfile, 'rb')
+ assert sr.GetName() == "WGS 84 / Pseudo-Mercator"
+ assert sr.GetAuthorityCode(None) == "3857"
+ f = gdal.VSIFOpenL(tmpfile, "rb")
data = gdal.VSIFReadL(1, 100000, f)
gdal.VSIFCloseL(f)
gdal.Unlink(tmpfile)
@@ -788,56 +883,56 @@ def test_tiff_srs_write_epsg3857():
def test_tiff_srs_read_epsg26730_with_linear_units_set():
- ds = gdal.Open('data/epsg26730_with_linear_units_set.tif')
+ ds = gdal.Open("data/epsg26730_with_linear_units_set.tif")
sr = ds.GetSpatialRef()
- assert sr.GetAuthorityCode(None) == '26730'
+ assert sr.GetAuthorityCode(None) == "26730"
def test_tiff_srs_read_user_defined_geokeys():
- if int(gdal.GetDriverByName('GTiff').GetMetadataItem('LIBGEOTIFF')) < 1600:
+ if int(gdal.GetDriverByName("GTiff").GetMetadataItem("LIBGEOTIFF")) < 1600:
pytest.skip()
gdal.ErrorReset()
- ds = gdal.Open('data/byte_user_defined_geokeys.tif')
+ ds = gdal.Open("data/byte_user_defined_geokeys.tif")
sr = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
assert sr is not None
def test_tiff_srs_read_compoundcrs_without_gtcitation():
- if int(gdal.GetDriverByName('GTiff').GetMetadataItem('LIBGEOTIFF')) < 1600:
+ if int(gdal.GetDriverByName("GTiff").GetMetadataItem("LIBGEOTIFF")) < 1600:
pytest.skip()
- ds = gdal.Open('data/gtiff/compdcrs_without_gtcitation.tif')
+ ds = gdal.Open("data/gtiff/compdcrs_without_gtcitation.tif")
sr = ds.GetSpatialRef()
- assert sr.GetName() == 'WGS 84 / UTM zone 32N + EGM08_Geoid'
+ assert sr.GetName() == "WGS 84 / UTM zone 32N + EGM08_Geoid"
def test_tiff_srs_read_getspatialref_getgcpspatialref():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
assert ds.GetSpatialRef() is not None
assert ds.GetGCPSpatialRef() is None
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
assert ds.GetGCPSpatialRef() is None
assert ds.GetSpatialRef() is not None
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
assert ds.GetSpatialRef() is not None
assert ds.GetSpatialRef() is not None
assert ds.GetGCPSpatialRef() is None
assert ds.GetGCPSpatialRef() is None
- ds = gdal.Open('data/byte_gcp_pixelispoint.tif')
+ ds = gdal.Open("data/byte_gcp_pixelispoint.tif")
assert ds.GetSpatialRef() is None
assert ds.GetGCPSpatialRef() is not None
- ds = gdal.Open('data/byte_gcp_pixelispoint.tif')
+ ds = gdal.Open("data/byte_gcp_pixelispoint.tif")
assert ds.GetGCPSpatialRef() is not None
assert ds.GetSpatialRef() is None
- ds = gdal.Open('data/byte_gcp_pixelispoint.tif')
+ ds = gdal.Open("data/byte_gcp_pixelispoint.tif")
assert ds.GetGCPSpatialRef() is not None
assert ds.GetGCPSpatialRef() is not None
assert ds.GetSpatialRef() is None
@@ -845,15 +940,15 @@ def test_tiff_srs_read_getspatialref_getgcpspatialref():
def test_tiff_srs_read_VerticalUnitsGeoKey_private_range():
- ds = gdal.Open('data/gtiff/VerticalUnitsGeoKey_private_range.tif')
+ ds = gdal.Open("data/gtiff/VerticalUnitsGeoKey_private_range.tif")
with gdaltest.error_handler():
sr = ds.GetSpatialRef()
assert sr.GetName() == "NAD83 / UTM zone 16N"
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
def test_tiff_srs_read_invalid_semimajoraxis_compound():
- ds = gdal.Open('data/gtiff/invalid_semimajoraxis_compound.tif')
+ ds = gdal.Open("data/gtiff/invalid_semimajoraxis_compound.tif")
# Check that it doesn't crash. PROJ >= 8.2.0 will return a NULL CRS
# whereas previous versions will return a non-NULL one
with gdaltest.error_handler():
@@ -865,20 +960,20 @@ def test_tiff_srs_try_write_derived_geographic():
if osr.GetPROJVersionMajor() < 7:
pytest.skip()
- tmpfile = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').Create(tmpfile, 1, 1)
+ tmpfile = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(tmpfile, 1, 1)
wkt = 'GEOGCRS["Coordinate System imported from GRIB file",BASEGEOGCRS["Coordinate System imported from GRIB file",DATUM["unnamed",ELLIPSOID["Sphere",6367470,0,LENGTHUNIT["metre",1,ID["EPSG",9001]]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]],DERIVINGCONVERSION["Pole rotation (GRIB convention)",METHOD["Pole rotation (GRIB convention)"],PARAMETER["Latitude of the southern pole (GRIB convention)",-30,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],PARAMETER["Longitude of the southern pole (GRIB convention)",-15,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],PARAMETER["Axis rotation (GRIB convention)",0,ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]],CS[ellipsoidal,2],AXIS["latitude",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]],AXIS["longitude",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433,ID["EPSG",9122]]]]'
ds.SetProjection(wkt)
ds = None
- assert gdal.VSIStatL(tmpfile + '.aux.xml')
+ assert gdal.VSIStatL(tmpfile + ".aux.xml")
ds = gdal.Open(tmpfile)
srs = ds.GetSpatialRef()
assert srs is not None
assert srs.IsDerivedGeographic()
ds = None
- gdal.Unlink(tmpfile + '.aux.xml')
+ gdal.Unlink(tmpfile + ".aux.xml")
ds = gdal.Open(tmpfile)
assert ds.GetSpatialRef() is None
ds = None
@@ -887,60 +982,66 @@ def test_tiff_srs_try_write_derived_geographic():
def test_tiff_srs_read_GeogGeodeticDatumGeoKey_reserved_range():
- ds = gdal.Open('data/gtiff/GeogGeodeticDatumGeoKey_reserved.tif')
+ ds = gdal.Open("data/gtiff/GeogGeodeticDatumGeoKey_reserved.tif")
with gdaltest.error_handler():
sr = ds.GetSpatialRef()
assert sr.GetName() == "WGS 84 / Pseudo-Mercator"
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
assert gdal.GetLastErrorType() == gdal.CE_Warning
def test_tiff_srs_read_buggy_sentinel1_ellipsoid_code_4326():
# That file has GeogEllipsoidGeoKey=4326, instead of 7030
- ds = gdal.Open('data/gtiff/buggy_sentinel1_ellipsoid_code_4326.tif')
+ ds = gdal.Open("data/gtiff/buggy_sentinel1_ellipsoid_code_4326.tif")
sr = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == ''
- assert sr.GetAuthorityCode('GEOGCS|DATUM|SPHEROID') == '7030'
+ assert gdal.GetLastErrorMsg() == ""
+ assert sr.GetAuthorityCode("GEOGCS|DATUM|SPHEROID") == "7030"
def test_tiff_srs_read_invalid_GeogAngularUnitSizeGeoKey():
# That file has GeogAngularUnitSizeGeoKey = 0
- ds = gdal.Open('data/gtiff/invalid_GeogAngularUnitSizeGeoKey.tif')
+ ds = gdal.Open("data/gtiff/invalid_GeogAngularUnitSizeGeoKey.tif")
gdal.ErrorReset()
with gdaltest.error_handler():
ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
def test_tiff_srs_read_inconsistent_invflattening():
# That file has GeogSemiMinorAxisGeoKey / GeogInvFlatteningGeoKey values
# which are inconsistent with the ones from the ellipsoid of the datum
- ds = gdal.Open('data/gtiff/inconsistent_invflattening.tif')
+ ds = gdal.Open("data/gtiff/inconsistent_invflattening.tif")
gdal.ErrorReset()
with gdaltest.error_handler():
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() != ''
- assert srs.GetAuthorityCode(None) == '28992'
- assert srs.GetAuthorityCode('GEOGCS') == '4289'
- assert srs.GetInvFlattening() == pytest.approx(299.1528131, abs=1e-7) # wrong value w.r.t Bessel 1841 official definition
-
- ds = gdal.Open('data/gtiff/inconsistent_invflattening.tif')
+ assert gdal.GetLastErrorMsg() != ""
+ assert srs.GetAuthorityCode(None) == "28992"
+ assert srs.GetAuthorityCode("GEOGCS") == "4289"
+ assert srs.GetInvFlattening() == pytest.approx(
+ 299.1528131, abs=1e-7
+ ) # wrong value w.r.t Bessel 1841 official definition
+
+ ds = gdal.Open("data/gtiff/inconsistent_invflattening.tif")
gdal.ErrorReset()
- with gdaltest.config_option('GTIFF_SRS_SOURCE', 'GEOKEYS'):
+ with gdaltest.config_option("GTIFF_SRS_SOURCE", "GEOKEYS"):
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
assert srs.GetAuthorityCode(None) is None
- assert srs.GetAuthorityCode('GEOGCS') is None
- assert srs.GetInvFlattening() == pytest.approx(299.1528131, abs=1e-7) # wrong value w.r.t Bessel 1841 official definition
+ assert srs.GetAuthorityCode("GEOGCS") is None
+ assert srs.GetInvFlattening() == pytest.approx(
+ 299.1528131, abs=1e-7
+ ) # wrong value w.r.t Bessel 1841 official definition
- ds = gdal.Open('data/gtiff/inconsistent_invflattening.tif')
+ ds = gdal.Open("data/gtiff/inconsistent_invflattening.tif")
gdal.ErrorReset()
- with gdaltest.config_option('GTIFF_SRS_SOURCE', 'EPSG'):
+ with gdaltest.config_option("GTIFF_SRS_SOURCE", "EPSG"):
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == ''
- assert srs.GetAuthorityCode(None) == '28992'
- assert srs.GetAuthorityCode('GEOGCS') == '4289'
- assert srs.GetInvFlattening() == pytest.approx(299.1528128, abs=1e-7) # Bessel 1841 official definition
+ assert gdal.GetLastErrorMsg() == ""
+ assert srs.GetAuthorityCode(None) == "28992"
+ assert srs.GetAuthorityCode("GEOGCS") == "4289"
+ assert srs.GetInvFlattening() == pytest.approx(
+ 299.1528128, abs=1e-7
+ ) # Bessel 1841 official definition
def test_tiff_srs_dynamic_geodetic_crs():
@@ -949,88 +1050,104 @@ def test_tiff_srs_dynamic_geodetic_crs():
pytest.skip()
srs = osr.SpatialReference()
- srs.ImportFromEPSG(8999) # ITRF2008
- ds = gdal.GetDriverByName('GTiff').Create(
- '/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif', 1, 1)
+ srs.ImportFromEPSG(8999) # ITRF2008
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif", 1, 1
+ )
ds.SetSpatialRef(srs)
ds = None
- ds = gdal.Open('/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif')
+ ds = gdal.Open("/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif")
gdal.ErrorReset()
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == '', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetAuthorityCode(None) == '8999'
+ assert gdal.GetLastErrorMsg() == "", srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ assert srs.GetAuthorityCode(None) == "8999"
ds = None
- gdal.Unlink('/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif')
+ gdal.Unlink("/vsimem/test_tiff_srs_dynamic_geodetic_crs.tif")
-@pytest.mark.parametrize('geotiff_version', ['1.0', '1.1'])
+@pytest.mark.parametrize("geotiff_version", ["1.0", "1.1"])
def test_tiff_srs_geographic_crs_3D(geotiff_version):
srs = osr.SpatialReference()
- srs.ImportFromEPSG(4959) # NZGD2000 3D
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test_tiff_srs_geographic_crs_3D.tif', 1, 1,
- options = ['GEOTIFF_VERSION=' + geotiff_version])
+ srs.ImportFromEPSG(4959) # NZGD2000 3D
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test_tiff_srs_geographic_crs_3D.tif",
+ 1,
+ 1,
+ options=["GEOTIFF_VERSION=" + geotiff_version],
+ )
ds.SetSpatialRef(srs)
ds = None
- ds = gdal.Open('/vsimem/test_tiff_srs_geographic_crs_3D.tif')
+ ds = gdal.Open("/vsimem/test_tiff_srs_geographic_crs_3D.tif")
gdal.ErrorReset()
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == '', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- if geotiff_version == '1.1':
- assert srs.GetAuthorityCode(None) == '4959'
+ assert gdal.GetLastErrorMsg() == "", srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ if geotiff_version == "1.1":
+ assert srs.GetAuthorityCode(None) == "4959"
ds = None
- gdal.Unlink('/vsimem/test_tiff_srs_geographic_crs_3D.tif')
+ gdal.Unlink("/vsimem/test_tiff_srs_geographic_crs_3D.tif")
def test_tiff_srs_datum_name_with_space():
srs = osr.SpatialReference()
- srs.ImportFromEPSG(4312) # MGI with datum name = 'Militar-Geographische Institut""
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test_tiff_srs_datum_name_with_space.tif', 1, 1)
+ srs.ImportFromEPSG(4312) # MGI with datum name = 'Militar-Geographische Institut""
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test_tiff_srs_datum_name_with_space.tif", 1, 1
+ )
ds.SetSpatialRef(srs)
ds = None
- ds = gdal.Open('/vsimem/test_tiff_srs_datum_name_with_space.tif')
+ ds = gdal.Open("/vsimem/test_tiff_srs_datum_name_with_space.tif")
gdal.ErrorReset()
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == '', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetAuthorityCode(None) == '4312'
+ assert gdal.GetLastErrorMsg() == "", srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ assert srs.GetAuthorityCode(None) == "4312"
ds = None
- gdal.Unlink('/vsimem/test_tiff_srs_datum_name_with_space.tif')
+ gdal.Unlink("/vsimem/test_tiff_srs_datum_name_with_space.tif")
def test_tiff_srs_compound_crs_with_local_cs():
- filename = '/vsimem/test_tiff_srs_compound_crs_with_local_cs.tif'
+ filename = "/vsimem/test_tiff_srs_compound_crs_with_local_cs.tif"
srs = osr.SpatialReference()
- srs.SetFromUserInput('COMPD_CS["COMPD_CS_name",LOCAL_CS["None",LOCAL_DATUM["None",32767],UNIT["Foot_US",0.304800609601219],AXIS["None",OTHER]],VERT_CS["VERT_CS_Name",VERT_DATUM["Local",2005],UNIT["Meter",1,AUTHORITY["EPSG","9001"]],AXIS["Gravity-related height",UP]]]')
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ srs.SetFromUserInput(
+ 'COMPD_CS["COMPD_CS_name",LOCAL_CS["None",LOCAL_DATUM["None",32767],UNIT["Foot_US",0.304800609601219],AXIS["None",OTHER]],VERT_CS["VERT_CS_Name",VERT_DATUM["Local",2005],UNIT["Meter",1,AUTHORITY["EPSG","9001"]],AXIS["Gravity-related height",UP]]]'
+ )
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds.SetSpatialRef(srs)
assert srs.IsCompound()
assert srs.GetLinearUnits() == pytest.approx(0.304800609601219)
gdal.ErrorReset()
ds = None
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
ds = gdal.Open(filename)
gdal.ErrorReset()
srs = ds.GetSpatialRef()
- assert gdal.GetLastErrorMsg() == '', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetName() == 'COMPD_CS_name', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.IsCompound(), srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetLinearUnits() == pytest.approx(0.304800609601219), srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetAttrValue('COMPD_CS|VERT_CS') == 'VERT_CS_Name', srs.ExportToWkt(['FORMAT=WKT2_2019'])
- assert srs.GetAttrValue('COMPD_CS|VERT_CS|UNIT') in ('Meter', 'metre'), srs.ExportToWkt(['FORMAT=WKT2_2019'])
+ assert gdal.GetLastErrorMsg() == "", srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ assert srs.GetName() == "COMPD_CS_name", srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ assert srs.IsCompound(), srs.ExportToWkt(["FORMAT=WKT2_2019"])
+ assert srs.GetLinearUnits() == pytest.approx(0.304800609601219), srs.ExportToWkt(
+ ["FORMAT=WKT2_2019"]
+ )
+ assert srs.GetAttrValue("COMPD_CS|VERT_CS") == "VERT_CS_Name", srs.ExportToWkt(
+ ["FORMAT=WKT2_2019"]
+ )
+ assert srs.GetAttrValue("COMPD_CS|VERT_CS|UNIT") in (
+ "Meter",
+ "metre",
+ ), srs.ExportToWkt(["FORMAT=WKT2_2019"])
ds = None
gdal.Unlink(filename)
def test_tiff_srs_read_esri_pcs_gcs_ellipsoid_names():
- ds = gdal.Open('data/gtiff/esri_pcs_gcs_ellipsoid_names.tif')
+ ds = gdal.Open("data/gtiff/esri_pcs_gcs_ellipsoid_names.tif")
srs = ds.GetSpatialRef()
# Check that the names of the SRS components are morphed from ESRI names
# to EPSG WKT2 names
- wkt = srs.ExportToWkt(['FORMAT=WKT2'])
+ wkt = srs.ExportToWkt(["FORMAT=WKT2"])
assert 'PROJCRS["RT90 5 gon O"' in wkt
assert 'BASEGEOGCRS["RT90"' in wkt
assert 'DATUM["Rikets koordinatsystem 1990"' in wkt
diff --git a/autotest/gcore/tiff_write.py b/autotest/gcore/tiff_write.py
index 0333381505b5..1f35dfb6cbb8 100755
--- a/autotest/gcore/tiff_write.py
+++ b/autotest/gcore/tiff_write.py
@@ -30,16 +30,16 @@
import copy
import math
import os
-import sys
import shutil
import struct
-from osgeo import gdal
-from osgeo import osr
-import pytest
+import sys
import gdaltest
+import pytest
from test_py_scripts import samples_path
+from osgeo import gdal, osr
+
###############################################################################
@@ -49,11 +49,15 @@ def _check_cog(filename, check_tiled=True, full_check=False):
if path not in sys.path:
sys.path.append(path)
import validate_cloud_optimized_geotiff
+
try:
- _, errors, _ = validate_cloud_optimized_geotiff.validate(filename, check_tiled=check_tiled, full_check=full_check)
- assert not errors, 'validate_cloud_optimized_geotiff failed'
+ _, errors, _ = validate_cloud_optimized_geotiff.validate(
+ filename, check_tiled=check_tiled, full_check=full_check
+ )
+ assert not errors, "validate_cloud_optimized_geotiff failed"
except OSError:
- pytest.fail('validate_cloud_optimized_geotiff failed')
+ pytest.fail("validate_cloud_optimized_geotiff failed")
+
###############################################################################
# Get the GeoTIFF driver, and verify a few things about it.
@@ -61,11 +65,12 @@ def _check_cog(filename, check_tiled=True, full_check=False):
def test_tiff_write_1():
- gdaltest.tiff_drv = gdal.GetDriverByName('GTiff')
- assert gdaltest.tiff_drv is not None, 'GTiff driver not found!'
+ gdaltest.tiff_drv = gdal.GetDriverByName("GTiff")
+ assert gdaltest.tiff_drv is not None, "GTiff driver not found!"
drv_md = gdaltest.tiff_drv.GetMetadata()
- assert drv_md['DMD_MIMETYPE'] == 'image/tiff', 'mime type is wrong'
+ assert drv_md["DMD_MIMETYPE"] == "image/tiff", "mime type is wrong"
+
###############################################################################
# Create a simple file by copying from an existing one.
@@ -73,29 +78,32 @@ def test_tiff_write_1():
def test_tiff_write_2():
- src_ds = gdal.Open('data/cfloat64.tif')
+ src_ds = gdal.Open("data/cfloat64.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_2.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_2.tif", src_ds)
bnd = new_ds.GetRasterBand(1)
- assert bnd.Checksum() == 5028, 'Didnt get expected checksum on still-open file'
+ assert bnd.Checksum() == 5028, "Didnt get expected checksum on still-open file"
bnd = None
new_ds = None
# hopefully it's closed now!
- new_ds = gdal.Open('tmp/test_2.tif')
+ new_ds = gdal.Open("tmp/test_2.tif")
bnd = new_ds.GetRasterBand(1)
- assert bnd.Checksum() == 5028, 'Didnt get expected checksum on reopened file'
+ assert bnd.Checksum() == 5028, "Didnt get expected checksum on reopened file"
- assert bnd.ComputeRasterMinMax() == (74.0, 255.0), \
- 'ComputeRasterMinMax() returned wrong value'
+ assert bnd.ComputeRasterMinMax() == (
+ 74.0,
+ 255.0,
+ ), "ComputeRasterMinMax() returned wrong value"
bnd = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_2.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_2.tif")
+
###############################################################################
# Create a simple file by copying from an existing one.
@@ -103,20 +111,20 @@ def test_tiff_write_2():
def test_tiff_write_3():
- src_ds = gdal.Open('data/utmsmall.tif')
+ src_ds = gdal.Open("data/utmsmall.tif")
- options = ['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32']
+ options = ["TILED=YES", "BLOCKXSIZE=32", "BLOCKYSIZE=32"]
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_3.tif', src_ds,
- options=options)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_3.tif", src_ds, options=options)
bnd = new_ds.GetRasterBand(1)
- assert bnd.Checksum() == 50054, 'Didnt get expected checksum on still-open file'
+ assert bnd.Checksum() == 50054, "Didnt get expected checksum on still-open file"
bnd = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_3.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_3.tif")
+
###############################################################################
# Create a tiled file.
@@ -124,12 +132,13 @@ def test_tiff_write_3():
def test_tiff_write_4():
- np = pytest.importorskip('numpy')
+ np = pytest.importorskip("numpy")
- options = ['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32']
+ options = ["TILED=YES", "BLOCKXSIZE=32", "BLOCKYSIZE=32"]
- new_ds = gdaltest.tiff_drv.Create('tmp/test_4.tif', 40, 50, 3,
- gdal.GDT_Byte, options)
+ new_ds = gdaltest.tiff_drv.Create(
+ "tmp/test_4.tif", 40, 50, 3, gdal.GDT_Byte, options
+ )
data_red = np.zeros((50, 40), dtype=np.uint8)
data_green = np.zeros((50, 40), dtype=np.uint8)
@@ -148,31 +157,38 @@ def test_tiff_write_4():
gt = (0.0, 1.0, 0.0, 50.0, 0.0, -1.0)
new_ds.SetGeoTransform(gt)
- assert new_ds.GetRasterBand(1).Checksum() == 21577 and new_ds.GetRasterBand(2).Checksum() == 20950 and new_ds.GetRasterBand(3).Checksum() == 23730, \
- 'Wrong checksum.'
+ assert (
+ new_ds.GetRasterBand(1).Checksum() == 21577
+ and new_ds.GetRasterBand(2).Checksum() == 20950
+ and new_ds.GetRasterBand(3).Checksum() == 23730
+ ), "Wrong checksum."
- assert gt == new_ds.GetGeoTransform(), 'Wrong geotransform.'
+ assert gt == new_ds.GetGeoTransform(), "Wrong geotransform."
- new_ds.SetMetadata({'TEST_KEY': 'TestValue <>'})
+ new_ds.SetMetadata({"TEST_KEY": "TestValue <>"})
new_ds = None
- new_ds = gdal.Open('tmp/test_4.tif')
+ new_ds = gdal.Open("tmp/test_4.tif")
- assert new_ds.GetRasterBand(1).Checksum() == 21577 and new_ds.GetRasterBand(2).Checksum() == 20950 and new_ds.GetRasterBand(3).Checksum() == 23730, \
- 'Wrong checksum (2).'
+ assert (
+ new_ds.GetRasterBand(1).Checksum() == 21577
+ and new_ds.GetRasterBand(2).Checksum() == 20950
+ and new_ds.GetRasterBand(3).Checksum() == 23730
+ ), "Wrong checksum (2)."
- assert gt == new_ds.GetGeoTransform(), 'Wrong geotransform(2).'
+ assert gt == new_ds.GetGeoTransform(), "Wrong geotransform(2)."
nd = new_ds.GetRasterBand(1).GetNoDataValue()
- assert nd is None, 'Got unexpected nodata value.'
+ assert nd is None, "Got unexpected nodata value."
md_dict = new_ds.GetMetadata()
- assert md_dict['TEST_KEY'] == 'TestValue <>', 'Missing metadata'
+ assert md_dict["TEST_KEY"] == "TestValue <>", "Missing metadata"
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_4.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_4.tif")
+
###############################################################################
# Write a file with GCPs.
@@ -180,44 +196,51 @@ def test_tiff_write_4():
def test_tiff_write_5():
- src_ds = gdal.Open('data/gcps.vrt')
+ src_ds = gdal.Open("data/gcps.vrt")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_5.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_5.tif", src_ds)
- assert (new_ds.GetGCPProjection().find(
- 'AUTHORITY["EPSG","26711"]') != -1), 'GCP Projection not set properly.'
+ assert (
+ new_ds.GetGCPProjection().find('AUTHORITY["EPSG","26711"]') != -1
+ ), "GCP Projection not set properly."
gcps = new_ds.GetGCPs()
- assert len(gcps) == 4, 'GCP count wrong.'
+ assert len(gcps) == 4, "GCP count wrong."
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_5.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_5.tif")
# Test SetGCPs on a new GTiff
- new_ds = gdaltest.tiff_drv.Create('tmp/test_5.tif', 10, 10, 1)
+ new_ds = gdaltest.tiff_drv.Create("tmp/test_5.tif", 10, 10, 1)
new_ds.SetGCPs(gcps, src_ds.GetGCPProjection())
new_ds = None
- new_ds = gdal.Open('tmp/test_5.tif')
+ new_ds = gdal.Open("tmp/test_5.tif")
gcps = new_ds.GetGCPs()
- assert len(gcps) == 4, 'GCP count wrong.'
+ assert len(gcps) == 4, "GCP count wrong."
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_5.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_5.tif")
+
###############################################################################
# Test a mixture of reading and writing on a DEFLATE compressed file.
+
def test_tiff_write_6():
- options = ['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32',
- 'COMPRESS=DEFLATE', 'PREDICTOR=2']
- ds = gdaltest.tiff_drv.Create('tmp/test_6.tif', 200, 200, 1,
- gdal.GDT_Byte, options)
+ options = [
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=32",
+ "COMPRESS=DEFLATE",
+ "PREDICTOR=2",
+ ]
+ ds = gdaltest.tiff_drv.Create("tmp/test_6.tif", 200, 200, 1, gdal.GDT_Byte, options)
# make a 32x32 byte buffer
- buf = b''.join(struct.pack('B', v) for v in range(32)) * 32
+ buf = b"".join(struct.pack("B", v) for v in range(32)) * 32
ds.WriteRaster(0, 0, 32, 32, buf, buf_type=gdal.GDT_Byte)
ds.FlushCache()
@@ -227,29 +250,30 @@ def test_tiff_write_6():
if buf_read != buf:
gdaltest.tiff_write_6_failed = True
- pytest.fail('did not get back expected data.')
+ pytest.fail("did not get back expected data.")
ds = None
- ds = gdal.Open('tmp/test_6.tif')
- assert ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == 'DEFLATE'
- assert ds.GetMetadataItem('PREDICTOR', 'IMAGE_STRUCTURE') == '2'
+ ds = gdal.Open("tmp/test_6.tif")
+ assert ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE") == "DEFLATE"
+ assert ds.GetMetadataItem("PREDICTOR", "IMAGE_STRUCTURE") == "2"
ds = None
gdaltest.tiff_write_6_failed = False
- gdaltest.tiff_drv.Delete('tmp/test_6.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_6.tif")
+
###############################################################################
# Test a mixture of reading and writing on a LZW compressed file.
+
def test_tiff_write_7():
- options = ['TILED=YES', 'COMPRESS=LZW', 'PREDICTOR=2']
- ds = gdaltest.tiff_drv.Create('tmp/test_7.tif', 200, 200, 1,
- gdal.GDT_Byte, options)
+ options = ["TILED=YES", "COMPRESS=LZW", "PREDICTOR=2"]
+ ds = gdaltest.tiff_drv.Create("tmp/test_7.tif", 200, 200, 1, gdal.GDT_Byte, options)
# make a 32x32 byte buffer
- buf = b''.join(struct.pack('B', v) for v in range(32)) * 32
+ buf = b"".join(struct.pack("B", v) for v in range(32)) * 32
ds.WriteRaster(0, 0, 32, 32, buf, buf_type=gdal.GDT_Byte)
ds.FlushCache()
@@ -257,11 +281,12 @@ def test_tiff_write_7():
ds.FlushCache()
buf_read = ds.ReadRaster(0, 0, 32, 32, buf_type=gdal.GDT_Byte)
- assert buf_read == buf, 'did not get back expected data.'
+ assert buf_read == buf, "did not get back expected data."
ds = None
- gdaltest.tiff_drv.Delete('tmp/test_7.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_7.tif")
+
###############################################################################
# Test a mixture of reading and writing on a PACKBITS compressed file.
@@ -269,12 +294,11 @@ def test_tiff_write_7():
def test_tiff_write_8():
- options = ['TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32', 'COMPRESS=PACKBITS']
- ds = gdaltest.tiff_drv.Create('tmp/test_8.tif', 200, 200, 1,
- gdal.GDT_Byte, options)
+ options = ["TILED=YES", "BLOCKXSIZE=32", "BLOCKYSIZE=32", "COMPRESS=PACKBITS"]
+ ds = gdaltest.tiff_drv.Create("tmp/test_8.tif", 200, 200, 1, gdal.GDT_Byte, options)
# make a 32x32 byte buffer
- buf = b''.join(struct.pack('B', v) for v in range(32)) * 32
+ buf = b"".join(struct.pack("B", v) for v in range(32)) * 32
ds.WriteRaster(0, 0, 32, 32, buf, buf_type=gdal.GDT_Byte)
ds.FlushCache()
@@ -283,11 +307,12 @@ def test_tiff_write_8():
buf_read = ds.ReadRaster(0, 0, 32, 32, buf_type=gdal.GDT_Byte)
- assert buf_read == buf, 'did not get back expected data.'
+ assert buf_read == buf, "did not get back expected data."
ds = None
- gdaltest.tiff_drv.Delete('tmp/test_8.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_8.tif")
+
###############################################################################
# Create a simple file by copying from an existing one.
@@ -295,20 +320,20 @@ def test_tiff_write_8():
def test_tiff_write_9():
- src_ds = gdal.Open('data/byte.tif')
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_9.tif', src_ds,
- options=['NBITS=5'])
+ src_ds = gdal.Open("data/byte.tif")
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_9.tif", src_ds, options=["NBITS=5"])
with gdaltest.error_handler():
new_ds = None
- new_ds = gdal.Open('tmp/test_9.tif')
+ new_ds = gdal.Open("tmp/test_9.tif")
bnd = new_ds.GetRasterBand(1)
- assert bnd.Checksum() == 5287, 'Didnt get expected checksum on reopened file'
+ assert bnd.Checksum() == 5287, "Didnt get expected checksum on reopened file"
bnd = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_9.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_9.tif")
+
###############################################################################
# 1bit file but with band interleaving, and odd size (not multiple of 8) #1957
@@ -316,20 +341,24 @@ def test_tiff_write_9():
def test_tiff_write_10():
- ut = gdaltest.GDALTest('GTiff', 'oddsize_1bit2b.tif', 2, 5918,
- options=['NBITS=1', 'INTERLEAVE=BAND'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "oddsize_1bit2b.tif", 2, 5918, options=["NBITS=1", "INTERLEAVE=BAND"]
+ )
return ut.testCreate(out_bands=2)
+
###############################################################################
# Simple 1 bit file, treated through the GTiffBitmapBand class.
def test_tiff_write_11():
- ut = gdaltest.GDALTest('GTiff', 'oddsize1bit.tif', 1, 5918,
- options=['NBITS=1', 'COMPRESS=CCITTFAX4'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "oddsize1bit.tif", 1, 5918, options=["NBITS=1", "COMPRESS=CCITTFAX4"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Read JPEG Compressed YCbCr subsampled image.
@@ -337,13 +366,14 @@ def test_tiff_write_11():
def test_tiff_write_12():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdal.Open('data/sasha.tif')
+ ds = gdal.Open("data/sasha.tif")
cs = ds.GetRasterBand(3).Checksum()
assert cs == 31952 or cs == 30145
+
###############################################################################
# Write JPEG Compressed YCbCr subsampled image.
@@ -351,32 +381,40 @@ def test_tiff_write_12():
def test_tiff_write_13():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.Open('data/sasha.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/sasha.tif', src_ds, options=['PROFILE=BASELINE',
- 'TILED=YES',
- 'COMPRESS=JPEG',
- 'PHOTOMETRIC=YCBCR',
- 'JPEG_QUALITY=31'])
- ds = None
-
- ds = gdal.Open('tmp/sasha.tif')
+ src_ds = gdal.Open("data/sasha.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/sasha.tif",
+ src_ds,
+ options=[
+ "PROFILE=BASELINE",
+ "TILED=YES",
+ "COMPRESS=JPEG",
+ "PHOTOMETRIC=YCBCR",
+ "JPEG_QUALITY=31",
+ ],
+ )
+ ds = None
+
+ ds = gdal.Open("tmp/sasha.tif")
cs = ds.GetRasterBand(3).Checksum()
ds = None
- size = os.stat('tmp/sasha.tif').st_size
+ size = os.stat("tmp/sasha.tif").st_size
- gdaltest.tiff_drv.Delete('tmp/sasha.tif')
- assert cs in (17347, 14445,
- 14135, # libjpeg 9e
- )
+ gdaltest.tiff_drv.Delete("tmp/sasha.tif")
+ assert cs in (
+ 17347,
+ 14445,
+ 14135, # libjpeg 9e
+ )
- if md['LIBTIFF'] == 'INTERNAL':
+ if md["LIBTIFF"] == "INTERNAL":
# 22816 with libjpeg-6b or libjpeg-turbo
# 22828 with libjpeg-9d
- assert size <= 22828, 'fail: bad size'
+ assert size <= 22828, "fail: bad size"
###############################################################################
@@ -385,7 +423,7 @@ def test_tiff_write_13():
def test_tiff_write_14():
- tst = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672)
+ tst = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672)
return tst.testCreateCopy(vsimem=1)
@@ -394,41 +432,51 @@ def test_tiff_write_14():
# Test that we can restrict metadata and georeferencing in the output
# file using the PROFILE creation option with CreateCopy()
+
def test_tiff_write_15():
- ds_in = gdal.Open('data/byte.vrt')
+ ds_in = gdal.Open("data/byte.vrt")
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tw_15.tif', ds_in, options=['PROFILE=BASELINE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tw_15.tif", ds_in, options=["PROFILE=BASELINE"]
+ )
ds_in = None
ds = None
- ds = gdal.Open('tmp/tw_15.tif')
+ ds = gdal.Open("tmp/tw_15.tif")
md = ds.GetMetadata()
- assert 'test' in md, 'Metadata absent from .aux.xml file.'
+ assert "test" in md, "Metadata absent from .aux.xml file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' in md, 'Metadata absent from .aux.xml file.'
+ assert "testBand" in md, "Metadata absent from .aux.xml file."
ds = None
- gdal.Unlink('tmp/tw_15.tif.aux.xml')
+ gdal.Unlink("tmp/tw_15.tif.aux.xml")
- ds = gdal.Open('tmp/tw_15.tif')
+ ds = gdal.Open("tmp/tw_15.tif")
- assert ds.GetGeoTransform() == (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), \
- 'Got wrong geotransform, profile ignored?'
+ assert ds.GetGeoTransform() == (
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ ), "Got wrong geotransform, profile ignored?"
md = ds.GetMetadata()
- assert 'test' not in md, 'Metadata written to BASELINE file.'
+ assert "test" not in md, "Metadata written to BASELINE file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' not in md, 'Metadata written to BASELINE file.'
+ assert "testBand" not in md, "Metadata written to BASELINE file."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_15.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_15.tif")
+
###############################################################################
# Test that we can restrict metadata and georeferencing in the output
@@ -437,13 +485,14 @@ def test_tiff_write_15():
def test_tiff_write_16():
- ds_in = gdal.Open('data/byte.vrt')
+ ds_in = gdal.Open("data/byte.vrt")
- ds = gdaltest.tiff_drv.Create('tmp/tw_16.tif', 20, 20, gdal.GDT_Byte,
- options=['PROFILE=BASELINE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tw_16.tif", 20, 20, gdal.GDT_Byte, options=["PROFILE=BASELINE"]
+ )
- ds.SetMetadata({'test': 'testvalue'})
- ds.GetRasterBand(1).SetMetadata({'testBand': 'testvalueBand'})
+ ds.SetMetadata({"test": "testvalue"})
+ ds.GetRasterBand(1).SetMetadata({"testBand": "testvalueBand"})
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
@@ -457,35 +506,42 @@ def test_tiff_write_16():
ds = None
# Check first from PAM
- assert gdal.VSIStatL('tmp/tw_16.tif.aux.xml') is not None
- ds = gdal.Open('tmp/tw_16.tif')
+ assert gdal.VSIStatL("tmp/tw_16.tif.aux.xml") is not None
+ ds = gdal.Open("tmp/tw_16.tif")
assert ds.GetGeoTransform() == (10, 5, 0, 30, 0, -5)
assert ds.GetSpatialRef() is not None
- assert ds.GetSpatialRef().GetAuthorityCode(None) == '4326'
+ assert ds.GetSpatialRef().GetAuthorityCode(None) == "4326"
md = ds.GetMetadata()
- assert 'test' in md, 'Metadata absent from .aux.xml file.'
+ assert "test" in md, "Metadata absent from .aux.xml file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' in md, 'Metadata absent from .aux.xml file.'
+ assert "testBand" in md, "Metadata absent from .aux.xml file."
ds = None
- gdal.Unlink('tmp/tw_16.tif.aux.xml')
+ gdal.Unlink("tmp/tw_16.tif.aux.xml")
- ds = gdal.Open('tmp/tw_16.tif')
- assert ds.GetGeoTransform() == (0.0, 1.0, 0.0, 0.0, 0.0, 1.0), \
- 'Got wrong geotransform, profile ignored?'
+ ds = gdal.Open("tmp/tw_16.tif")
+ assert ds.GetGeoTransform() == (
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ ), "Got wrong geotransform, profile ignored?"
assert ds.GetSpatialRef() is None
md = ds.GetMetadata()
- assert 'test' not in md, 'Metadata written to BASELINE file.'
+ assert "test" not in md, "Metadata written to BASELINE file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' not in md, 'Metadata written to BASELINE file.'
+ assert "testBand" not in md, "Metadata written to BASELINE file."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_16.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_16.tif")
+
###############################################################################
# Test writing a TIFF with an RPC tag.
@@ -495,66 +551,70 @@ def test_tiff_write_17():
# Translate RPC controlled data to GeoTIFF.
- ds_in = gdal.Open('data/rpc.vrt')
- rpc_md = ds_in.GetMetadata('RPC')
+ ds_in = gdal.Open("data/rpc.vrt")
+ rpc_md = ds_in.GetMetadata("RPC")
- tmpfilename = '/vsimem/tiff_write_17.tif'
+ tmpfilename = "/vsimem/tiff_write_17.tif"
ds = gdaltest.tiff_drv.CreateCopy(tmpfilename, ds_in)
ds_in = None
ds = None
# Ensure there is no .aux.xml file which might hold the RPC.
- assert not gdal.VSIStatL(tmpfilename + '.aux.xml'), \
- 'unexpectedly found.aux.xml file'
+ assert not gdal.VSIStatL(
+ tmpfilename + ".aux.xml"
+ ), "unexpectedly found.aux.xml file"
# confirm there is no .rpb file created by default.
- assert not gdal.VSIStatL(tmpfilename + '.RPB'), 'unexpectedly found .RPB file'
+ assert not gdal.VSIStatL(tmpfilename + ".RPB"), "unexpectedly found .RPB file"
# confirm there is no _rpc.txt file created by default.
- assert not gdal.VSIStatL(tmpfilename + '_RPC.TXT'), \
- 'unexpectedly found _RPC.TXT file'
+ assert not gdal.VSIStatL(
+ tmpfilename + "_RPC.TXT"
+ ), "unexpectedly found _RPC.TXT file"
# Open the dataset, and confirm the RPC data is still intact.
ds = gdal.Open(tmpfilename)
- assert gdaltest.rpcs_equal(ds.GetMetadata('RPC'), rpc_md)
+ assert gdaltest.rpcs_equal(ds.GetMetadata("RPC"), rpc_md)
ds = None
# Modify the RPC
modified_rpc = copy.copy(rpc_md)
- modified_rpc['LINE_OFF'] = '123456'
+ modified_rpc["LINE_OFF"] = "123456"
ds = gdal.Open(tmpfilename, gdal.GA_Update)
- ds.SetMetadata(modified_rpc, 'RPC')
+ ds.SetMetadata(modified_rpc, "RPC")
ds = None
ds = gdal.Open(tmpfilename)
- assert gdaltest.rpcs_equal(ds.GetMetadata('RPC'), modified_rpc)
+ assert gdaltest.rpcs_equal(ds.GetMetadata("RPC"), modified_rpc)
ds = None
# Unset the RPC
ds = gdal.Open(tmpfilename, gdal.GA_Update)
- ds.SetMetadata(None, 'RPC')
+ ds.SetMetadata(None, "RPC")
ds = None
ds = gdal.Open(tmpfilename)
- assert not ds.GetMetadata('RPC'), 'got RPC, but was not expected'
+ assert not ds.GetMetadata("RPC"), "got RPC, but was not expected"
ds = None
gdaltest.tiff_drv.Delete(tmpfilename)
+
###############################################################################
# Test that above test still work with the optimization in the GDAL_DISABLE_READDIR_ON_OPEN
# case (#3996)
def test_tiff_write_17_disable_readdir():
- oldval = gdal.GetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN')
- gdal.SetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN', 'TRUE')
+ oldval = gdal.GetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN")
+ gdal.SetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN", "TRUE")
ret = test_tiff_write_17()
- gdal.SetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN', oldval)
+ gdal.SetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN", oldval)
return ret
+
###############################################################################
# Test writing a TIFF with an RPB file and IMD file.
@@ -563,59 +623,64 @@ def test_tiff_write_18():
# Translate RPC controlled data to GeoTIFF.
- ds_in = gdal.Open('data/rpc.vrt')
- rpc_md = ds_in.GetMetadata('RPC')
+ ds_in = gdal.Open("data/rpc.vrt")
+ rpc_md = ds_in.GetMetadata("RPC")
- gdaltest.tiff_drv.CreateCopy('tmp/tw_18.tif', ds_in,
- options=['PROFILE=BASELINE'])
+ gdaltest.tiff_drv.CreateCopy("tmp/tw_18.tif", ds_in, options=["PROFILE=BASELINE"])
# Ensure there is no .aux.xml file which might hold the RPC.
- assert not gdal.VSIStatL('tmp/tm_18.tif.aux.xml'), \
- 'unexpectedly found tm_18.tif.aux.xml file'
+ assert not gdal.VSIStatL(
+ "tmp/tm_18.tif.aux.xml"
+ ), "unexpectedly found tm_18.tif.aux.xml file"
# confirm there is an .rpb and .imd file.
- assert gdal.VSIStatL('tmp/tw_18.RPB') is not None, 'missing .RPB file.'
- assert gdal.VSIStatL('tmp/tw_18.IMD') is not None, 'missing .IMD file.'
+ assert gdal.VSIStatL("tmp/tw_18.RPB") is not None, "missing .RPB file."
+ assert gdal.VSIStatL("tmp/tw_18.IMD") is not None, "missing .IMD file."
# confirm there is no _rpc.txt file created by default.
- assert not gdal.VSIStatL('tmp/tw_18_RPC.TXT'), 'unexpectedly found _RPC.TXT file'
+ assert not gdal.VSIStatL("tmp/tw_18_RPC.TXT"), "unexpectedly found _RPC.TXT file"
# Open the dataset, and confirm the RPC/IMD data is still intact.
- ds = gdal.Open('tmp/tw_18.tif')
+ ds = gdal.Open("tmp/tw_18.tif")
- assert gdaltest.rpcs_equal(ds.GetMetadata('RPC'), rpc_md)
+ assert gdaltest.rpcs_equal(ds.GetMetadata("RPC"), rpc_md)
- imd_md = ds.GetMetadata('IMD')
- assert imd_md['version'] == '"R"' and imd_md['numColumns'] == '30324' and imd_md['IMAGE_1.sunEl'] == '39.7', \
- 'IMD contents wrong?'
+ imd_md = ds.GetMetadata("IMD")
+ assert (
+ imd_md["version"] == '"R"'
+ and imd_md["numColumns"] == "30324"
+ and imd_md["IMAGE_1.sunEl"] == "39.7"
+ ), "IMD contents wrong?"
ds = None
# Test deferred loading with GetMetadataItem()
- ds = gdal.Open('tmp/tw_18.tif')
- assert ds.GetMetadataItem('LINE_OFF', 'RPC') == '16201', \
- "wrong value for GetMetadataItem('LINE_OFF', 'RPC')"
- assert ds.GetMetadataItem('version', 'IMD') == '"R"', \
- "wrong value for GetMetadataItem('version', 'IMD')"
+ ds = gdal.Open("tmp/tw_18.tif")
+ assert (
+ ds.GetMetadataItem("LINE_OFF", "RPC") == "16201"
+ ), "wrong value for GetMetadataItem('LINE_OFF', 'RPC')"
+ assert (
+ ds.GetMetadataItem("version", "IMD") == '"R"'
+ ), "wrong value for GetMetadataItem('version', 'IMD')"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_18.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_18.tif")
# Confirm IMD and RPC files are cleaned up. If not likely the
# file list functionality is not working properly.
- assert not gdal.VSIStatL('tmp/tw_18.RPB'), 'RPB did not get cleaned up.'
+ assert not gdal.VSIStatL("tmp/tw_18.RPB"), "RPB did not get cleaned up."
- assert not gdal.VSIStatL('tmp/tw_18.IMD'), 'IMD did not get cleaned up.'
+ assert not gdal.VSIStatL("tmp/tw_18.IMD"), "IMD did not get cleaned up."
# Remove the RPC
- gdaltest.tiff_drv.CreateCopy('tmp/tw_18.tif', ds_in,
- options=['PROFILE=BASELINE'])
- ds = gdal.Open('tmp/tw_18.tif', gdal.GA_Update)
- ds.SetMetadata(None, 'RPC')
+ gdaltest.tiff_drv.CreateCopy("tmp/tw_18.tif", ds_in, options=["PROFILE=BASELINE"])
+ ds = gdal.Open("tmp/tw_18.tif", gdal.GA_Update)
+ ds.SetMetadata(None, "RPC")
ds = None
- assert not os.path.exists('tmp/tw_18.RPB'), 'RPB did not get removed'
+ assert not os.path.exists("tmp/tw_18.RPB"), "RPB did not get removed"
+
+ gdaltest.tiff_drv.Delete("tmp/tw_18.tif")
- gdaltest.tiff_drv.Delete('tmp/tw_18.tif')
###############################################################################
# Test writing a IMD files with space in values
@@ -623,23 +688,27 @@ def test_tiff_write_18():
def test_tiff_write_imd_with_space_in_values():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/out.tif', 1, 1)
- ds.SetMetadataItem('foo.key', 'value with space', 'IMD')
- ds.SetMetadataItem('foo.key2', 'value with " double quote', 'IMD')
- ds.SetMetadataItem('foo.key3', "value with ' single quote", 'IMD')
- ds.SetMetadataItem('foo.key4', """value with " double and ' single quote""", 'IMD')
- ds.SetMetadataItem('foo.key5', 'value_with_;', 'IMD')
- ds.SetMetadataItem('foo.key6', 'regular_value', 'IMD')
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/out.tif", 1, 1)
+ ds.SetMetadataItem("foo.key", "value with space", "IMD")
+ ds.SetMetadataItem("foo.key2", 'value with " double quote', "IMD")
+ ds.SetMetadataItem("foo.key3", "value with ' single quote", "IMD")
+ ds.SetMetadataItem("foo.key4", """value with " double and ' single quote""", "IMD")
+ ds.SetMetadataItem("foo.key5", "value_with_;", "IMD")
+ ds.SetMetadataItem("foo.key6", "regular_value", "IMD")
ds = None
- f = gdal.VSIFOpenL('/vsimem/out.IMD', 'rb')
+ f = gdal.VSIFOpenL("/vsimem/out.IMD", "rb")
assert f
data = gdal.VSIFReadL(1, 1000, f)
gdal.VSIFCloseL(f)
- gdal.GetDriverByName('GTiff').Delete('/vsimem/out.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/out.tif")
+
+ assert (
+ data
+ == b'BEGIN_GROUP = foo\n\tkey = "value with space";\n\tkey2 = \'value with " double quote\';\n\tkey3 = "value with \' single quote";\n\tkey4 = "value with \'\' double and \' single quote";\n\tkey5 = "value_with_;";\n\tkey6 = regular_value;\nEND_GROUP = foo\nEND;\n'
+ )
- assert data == b'BEGIN_GROUP = foo\n\tkey = "value with space";\n\tkey2 = \'value with " double quote\';\n\tkey3 = "value with \' single quote";\n\tkey4 = "value with \'\' double and \' single quote";\n\tkey5 = "value_with_;";\n\tkey6 = regular_value;\nEND_GROUP = foo\nEND;\n'
###############################################################################
# Test that above test still work with the optimization in the GDAL_DISABLE_READDIR_ON_OPEN
@@ -647,12 +716,13 @@ def test_tiff_write_imd_with_space_in_values():
def test_tiff_write_18_disable_readdir():
- oldval = gdal.GetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN')
- gdal.SetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN', 'TRUE')
+ oldval = gdal.GetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN")
+ gdal.SetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN", "TRUE")
ret = test_tiff_write_18()
- gdal.SetConfigOption('GDAL_DISABLE_READDIR_ON_OPEN', oldval)
+ gdal.SetConfigOption("GDAL_DISABLE_READDIR_ON_OPEN", oldval)
return ret
+
###############################################################################
# Test writing a TIFF with an _RPC.TXT
@@ -661,44 +731,47 @@ def test_tiff_write_rpc_txt():
# Translate RPC controlled data to GeoTIFF.
- ds_in = gdal.Open('data/rpc.vrt')
+ ds_in = gdal.Open("data/rpc.vrt")
# Remove IMD before creating the TIFF to avoid creating an .IMD
# since .IMD + _RPC.TXT is an odd combination
# If the .IMD is found, we don't try reading _RPC.TXT
- ds_in_without_imd = gdal.GetDriverByName('VRT').CreateCopy('', ds_in)
- ds_in_without_imd.SetMetadata(None, 'IMD')
+ ds_in_without_imd = gdal.GetDriverByName("VRT").CreateCopy("", ds_in)
+ ds_in_without_imd.SetMetadata(None, "IMD")
- rpc_md = ds_in.GetMetadata('RPC')
+ rpc_md = ds_in.GetMetadata("RPC")
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_rpc_txt.tif', ds_in_without_imd,
- options=['PROFILE=BASELINE', 'RPCTXT=YES'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_rpc_txt.tif",
+ ds_in_without_imd,
+ options=["PROFILE=BASELINE", "RPCTXT=YES"],
+ )
ds_in = None
ds = None
# Ensure there is no .aux.xml file which might hold the RPC.
try:
- os.remove('tmp/tiff_write_rpc_txt.tif.aux.xml')
+ os.remove("tmp/tiff_write_rpc_txt.tif.aux.xml")
except OSError:
pass
# confirm there is no .RPB file created by default.
- assert not os.path.exists('tmp/tiff_write_rpc_txt.RPB')
- assert os.path.exists('tmp/tiff_write_rpc_txt_RPC.TXT')
+ assert not os.path.exists("tmp/tiff_write_rpc_txt.RPB")
+ assert os.path.exists("tmp/tiff_write_rpc_txt_RPC.TXT")
# Open the dataset, and confirm the RPC data is still intact.
- ds = gdal.Open('tmp/tiff_write_rpc_txt.tif')
+ ds = gdal.Open("tmp/tiff_write_rpc_txt.tif")
- assert gdaltest.rpcs_equal(ds.GetMetadata('RPC'), rpc_md)
+ assert gdaltest.rpcs_equal(ds.GetMetadata("RPC"), rpc_md)
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_rpc_txt.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_rpc_txt.tif")
# Confirm _RPC.TXT file is cleaned up. If not likely the
# file list functionality is not working properly.
- assert not os.path.exists('tmp/tiff_write_rpc_txt_RPC.TXT')
+ assert not os.path.exists("tmp/tiff_write_rpc_txt_RPC.TXT")
###############################################################################
@@ -707,80 +780,88 @@ def test_tiff_write_rpc_txt():
def test_tiff_write_rpc_in_pam():
- ds_in = gdal.Open('data/rpc.vrt')
- rpc_md = ds_in.GetMetadata('RPC')
+ ds_in = gdal.Open("data/rpc.vrt")
+ rpc_md = ds_in.GetMetadata("RPC")
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_rpc_in_pam.tif', ds_in,
- options=['PROFILE=BASELINE', 'RPB=NO'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_rpc_in_pam.tif", ds_in, options=["PROFILE=BASELINE", "RPB=NO"]
+ )
ds_in = None
ds = None
# Ensure there is a .aux.xml file which might hold the RPC.
try:
- os.stat('tmp/tiff_write_rpc_in_pam.tif.aux.xml')
+ os.stat("tmp/tiff_write_rpc_in_pam.tif.aux.xml")
except OSError:
- pytest.fail('missing .aux.xml file.')
+ pytest.fail("missing .aux.xml file.")
# confirm there is no .RPB file created.
- assert not os.path.exists('tmp/tiff_write_rpc_txt.RPB')
+ assert not os.path.exists("tmp/tiff_write_rpc_txt.RPB")
# Open the dataset, and confirm the RPC data is still intact.
- ds = gdal.Open('tmp/tiff_write_rpc_in_pam.tif')
+ ds = gdal.Open("tmp/tiff_write_rpc_in_pam.tif")
- assert gdaltest.rpcs_equal(ds.GetMetadata('RPC'), rpc_md)
+ assert gdaltest.rpcs_equal(ds.GetMetadata("RPC"), rpc_md)
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_rpc_in_pam.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_rpc_in_pam.tif")
+
+
###############################################################################
# Test the write of a pixel-interleaved image with NBITS = 7
def test_tiff_write_19():
- src_ds = gdal.Open('data/contig_strip.tif')
+ src_ds = gdal.Open("data/contig_strip.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/contig_strip_7.tif', src_ds,
- options=['NBITS=7', 'INTERLEAVE=PIXEL'])
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/contig_strip_7.tif", src_ds, options=["NBITS=7", "INTERLEAVE=PIXEL"]
+ )
new_ds = None
# hopefully it's closed now!
- new_ds = gdal.Open('tmp/contig_strip_7.tif')
- assert (new_ds.GetRasterBand(1).Checksum() == src_ds.GetRasterBand(1).Checksum() and \
- new_ds.GetRasterBand(2).Checksum() == src_ds.GetRasterBand(2).Checksum() and \
- new_ds.GetRasterBand(3).Checksum() == src_ds.GetRasterBand(3).Checksum()), \
- 'Didnt get expected checksum on reopened file'
+ new_ds = gdal.Open("tmp/contig_strip_7.tif")
+ assert (
+ new_ds.GetRasterBand(1).Checksum() == src_ds.GetRasterBand(1).Checksum()
+ and new_ds.GetRasterBand(2).Checksum() == src_ds.GetRasterBand(2).Checksum()
+ and new_ds.GetRasterBand(3).Checksum() == src_ds.GetRasterBand(3).Checksum()
+ ), "Didnt get expected checksum on reopened file"
new_ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/contig_strip_7.tif')
+ gdaltest.tiff_drv.Delete("tmp/contig_strip_7.tif")
+
###############################################################################
# Test write and read of some TIFF tags
# Also test unsetting those tags (#5619)
+
def test_tiff_write_20():
- new_ds = gdaltest.tiff_drv.Create('tmp/tags.tif', 1, 1, 1)
-
- values = [('TIFFTAG_DOCUMENTNAME', 'document_name'),
- ('TIFFTAG_IMAGEDESCRIPTION', 'image_description'),
- ('TIFFTAG_SOFTWARE', 'software'),
- ('TIFFTAG_DATETIME', '2009/01/01 13:01:08'),
- # TODO: artitst?
- ('TIFFTAG_ARTIST', 'artitst'),
- ('TIFFTAG_HOSTCOMPUTER', 'host_computer'),
- ('TIFFTAG_COPYRIGHT', 'copyright'),
- ('TIFFTAG_XRESOLUTION', '100'),
- ('TIFFTAG_YRESOLUTION', '101'),
- ('TIFFTAG_RESOLUTIONUNIT', '2 (pixels/inch)'),
- ('TIFFTAG_MINSAMPLEVALUE', '1'),
- ('TIFFTAG_MAXSAMPLEVALUE', '2'),
- ]
+ new_ds = gdaltest.tiff_drv.Create("tmp/tags.tif", 1, 1, 1)
+
+ values = [
+ ("TIFFTAG_DOCUMENTNAME", "document_name"),
+ ("TIFFTAG_IMAGEDESCRIPTION", "image_description"),
+ ("TIFFTAG_SOFTWARE", "software"),
+ ("TIFFTAG_DATETIME", "2009/01/01 13:01:08"),
+ # TODO: artitst?
+ ("TIFFTAG_ARTIST", "artitst"),
+ ("TIFFTAG_HOSTCOMPUTER", "host_computer"),
+ ("TIFFTAG_COPYRIGHT", "copyright"),
+ ("TIFFTAG_XRESOLUTION", "100"),
+ ("TIFFTAG_YRESOLUTION", "101"),
+ ("TIFFTAG_RESOLUTIONUNIT", "2 (pixels/inch)"),
+ ("TIFFTAG_MINSAMPLEVALUE", "1"),
+ ("TIFFTAG_MAXSAMPLEVALUE", "2"),
+ ]
new_ds.SetMetadata(dict(values))
@@ -788,44 +869,52 @@ def test_tiff_write_20():
# hopefully it's closed now!
- assert not os.path.exists('tmp/tags.tif.aux.xml')
+ assert not os.path.exists("tmp/tags.tif.aux.xml")
- new_ds = gdal.Open('tmp/tags.tif')
+ new_ds = gdal.Open("tmp/tags.tif")
md = new_ds.GetMetadata()
for item in values:
- assert item[0] in md, ('Could not find tag %s' % (item[0]))
+ assert item[0] in md, "Could not find tag %s" % (item[0])
- assert md[item[0]] == item[1], \
- ('For tag %s, got %s, expected %s' % (item[0], md[item[0]], item[1]))
+ assert md[item[0]] == item[1], "For tag %s, got %s, expected %s" % (
+ item[0],
+ md[item[0]],
+ item[1],
+ )
new_ds = None
# Test just unsetting once, but leaving other unchanged
- ds = gdal.Open('tmp/tags.tif', gdal.GA_Update)
- ds.SetMetadataItem('TIFFTAG_SOFTWARE', None)
+ ds = gdal.Open("tmp/tags.tif", gdal.GA_Update)
+ ds.SetMetadataItem("TIFFTAG_SOFTWARE", None)
ds = None
- assert not os.path.exists('tmp/tags.tif.aux.xml')
+ assert not os.path.exists("tmp/tags.tif.aux.xml")
- ds = gdal.Open('tmp/tags.tif')
- assert ds.GetMetadataItem('TIFFTAG_SOFTWARE') is None, \
- ('expected unset TIFFTAG_SOFTWARE but got %s' % ds.GetMetadataItem('TIFFTAG_SOFTWARE'))
- assert ds.GetMetadataItem('TIFFTAG_DOCUMENTNAME') is not None, \
- 'expected set TIFFTAG_DOCUMENTNAME but got None'
+ ds = gdal.Open("tmp/tags.tif")
+ assert (
+ ds.GetMetadataItem("TIFFTAG_SOFTWARE") is None
+ ), "expected unset TIFFTAG_SOFTWARE but got %s" % ds.GetMetadataItem(
+ "TIFFTAG_SOFTWARE"
+ )
+ assert (
+ ds.GetMetadataItem("TIFFTAG_DOCUMENTNAME") is not None
+ ), "expected set TIFFTAG_DOCUMENTNAME but got None"
ds = None
# Test unsetting all the remaining items
- ds = gdal.Open('tmp/tags.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tags.tif", gdal.GA_Update)
ds.SetMetadata({})
ds = None
- ds = gdal.Open('tmp/tags.tif')
+ ds = gdal.Open("tmp/tags.tif")
got_md = ds.GetMetadata()
ds = None
- assert got_md == {}, 'expected empty metadata list, but got some'
+ assert got_md == {}, "expected empty metadata list, but got some"
+
+ gdaltest.tiff_drv.Delete("tmp/tags.tif")
- gdaltest.tiff_drv.Delete('tmp/tags.tif')
###############################################################################
# Test RGBA images with TIFFTAG_EXTRASAMPLES=EXTRASAMPLE_ASSOCALPHA
@@ -833,22 +922,29 @@ def test_tiff_write_20():
def test_tiff_write_21():
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/stefan_full_rgba.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/stefan_full_rgba.tif", src_ds)
new_ds = None
- new_ds = gdal.Open('tmp/stefan_full_rgba.tif')
+ new_ds = gdal.Open("tmp/stefan_full_rgba.tif")
assert new_ds.RasterCount == 4
for i in range(4):
- assert new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ )
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ )
new_ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/stefan_full_rgba.tif')
+ gdaltest.tiff_drv.Delete("tmp/stefan_full_rgba.tif")
+
###############################################################################
# Test RGBA images with TIFFTAG_EXTRASAMPLES=EXTRASAMPLE_UNSPECIFIED
@@ -856,22 +952,31 @@ def test_tiff_write_21():
def test_tiff_write_22():
- src_ds = gdal.Open('data/stefan_full_rgba_photometric_rgb.tif')
+ src_ds = gdal.Open("data/stefan_full_rgba_photometric_rgb.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/stefan_full_rgba_photometric_rgb.tif', src_ds, options=['PHOTOMETRIC=RGB'])
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/stefan_full_rgba_photometric_rgb.tif", src_ds, options=["PHOTOMETRIC=RGB"]
+ )
new_ds = None
- new_ds = gdal.Open('tmp/stefan_full_rgba_photometric_rgb.tif')
+ new_ds = gdal.Open("tmp/stefan_full_rgba_photometric_rgb.tif")
assert new_ds.RasterCount == 4
for i in range(4):
- assert new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ )
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ )
new_ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/stefan_full_rgba_photometric_rgb.tif')
+ gdaltest.tiff_drv.Delete("tmp/stefan_full_rgba_photometric_rgb.tif")
+
###############################################################################
# Test grey+alpha images with ALPHA=YES
@@ -879,22 +984,31 @@ def test_tiff_write_22():
def test_tiff_write_23():
- src_ds = gdal.Open('data/stefan_full_greyalpha.tif')
+ src_ds = gdal.Open("data/stefan_full_greyalpha.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/stefan_full_greyalpha.tif', src_ds, options=['ALPHA=YES'])
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/stefan_full_greyalpha.tif", src_ds, options=["ALPHA=YES"]
+ )
new_ds = None
- new_ds = gdal.Open('tmp/stefan_full_greyalpha.tif')
+ new_ds = gdal.Open("tmp/stefan_full_greyalpha.tif")
assert new_ds.RasterCount == 2
for i in range(2):
- assert new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ )
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ )
new_ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/stefan_full_greyalpha.tif')
+ gdaltest.tiff_drv.Delete("tmp/stefan_full_greyalpha.tif")
+
###############################################################################
# Test grey+alpha images without ALPHA=YES
@@ -902,22 +1016,29 @@ def test_tiff_write_23():
def test_tiff_write_24():
- src_ds = gdal.Open('data/stefan_full_greyalpha.tif')
+ src_ds = gdal.Open("data/stefan_full_greyalpha.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/stefan_full_greyunspecified.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/stefan_full_greyunspecified.tif", src_ds)
new_ds = None
- new_ds = gdal.Open('tmp/stefan_full_greyunspecified.tif')
+ new_ds = gdal.Open("tmp/stefan_full_greyunspecified.tif")
assert new_ds.RasterCount == 2
for i in range(2):
- assert new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation() == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ new_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ == src_ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ )
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ )
new_ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/stefan_full_greyunspecified.tif')
+ gdaltest.tiff_drv.Delete("tmp/stefan_full_greyunspecified.tif")
+
###############################################################################
# Read a CIELAB image to test the RGBA image TIFF interface
@@ -925,7 +1046,7 @@ def test_tiff_write_24():
def test_tiff_write_25():
- src_ds = gdal.Open('data/cielab.tif')
+ src_ds = gdal.Open("data/cielab.tif")
assert src_ds.RasterCount == 4
assert src_ds.GetRasterBand(1).Checksum() == 6
assert src_ds.GetRasterBand(2).Checksum() == 3
@@ -941,9 +1062,10 @@ def test_tiff_write_25():
###############################################################################
# Test color table in a 8 bit image
+
def test_tiff_write_26():
- ds = gdaltest.tiff_drv.Create('tmp/ct8.tif', 1, 1, 1, gdal.GDT_Byte)
+ ds = gdaltest.tiff_drv.Create("tmp/ct8.tif", 1, 1, 1, gdal.GDT_Byte)
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 255, 255, 255))
@@ -956,19 +1078,22 @@ def test_tiff_write_26():
ct = None
ds = None
- ds = gdal.Open('tmp/ct8.tif')
+ ds = gdal.Open("tmp/ct8.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert (ct.GetCount() == 256 and \
- ct.GetColorEntry(0) == (255, 255, 255, 255) and \
- ct.GetColorEntry(1) == (255, 255, 0, 255) and \
- ct.GetColorEntry(2) == (255, 0, 255, 255) and \
- ct.GetColorEntry(3) == (0, 255, 255, 255)), 'Wrong color table entry.'
+ assert (
+ ct.GetCount() == 256
+ and ct.GetColorEntry(0) == (255, 255, 255, 255)
+ and ct.GetColorEntry(1) == (255, 255, 0, 255)
+ and ct.GetColorEntry(2) == (255, 0, 255, 255)
+ and ct.GetColorEntry(3) == (0, 255, 255, 255)
+ ), "Wrong color table entry."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/ct8.tif')
+ gdaltest.tiff_drv.Delete("tmp/ct8.tif")
+
###############################################################################
# Test color table in a 16 bit image
@@ -976,7 +1101,7 @@ def test_tiff_write_26():
def test_tiff_write_27():
- ds = gdaltest.tiff_drv.Create('tmp/ct16.tif', 1, 1, 1, gdal.GDT_UInt16)
+ ds = gdaltest.tiff_drv.Create("tmp/ct16.tif", 1, 1, 1, gdal.GDT_UInt16)
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 255, 255, 255))
@@ -989,25 +1114,28 @@ def test_tiff_write_27():
ct = None
ds = None
- ds = gdal.Open('tmp/ct16.tif')
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/ct16_copy.tif', ds)
+ ds = gdal.Open("tmp/ct16.tif")
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/ct16_copy.tif", ds)
del new_ds
ds = None
- ds = gdal.Open('tmp/ct16_copy.tif')
+ ds = gdal.Open("tmp/ct16_copy.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert (ct.GetCount() == 65536 and \
- ct.GetColorEntry(0) == (255, 255, 255, 255) and \
- ct.GetColorEntry(1) == (255, 255, 0, 255) and \
- ct.GetColorEntry(2) == (255, 0, 255, 255) and \
- ct.GetColorEntry(3) == (0, 255, 255, 255)), 'Wrong color table entry.'
+ assert (
+ ct.GetCount() == 65536
+ and ct.GetColorEntry(0) == (255, 255, 255, 255)
+ and ct.GetColorEntry(1) == (255, 255, 0, 255)
+ and ct.GetColorEntry(2) == (255, 0, 255, 255)
+ and ct.GetColorEntry(3) == (0, 255, 255, 255)
+ ), "Wrong color table entry."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/ct16.tif')
- gdaltest.tiff_drv.Delete('tmp/ct16_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/ct16.tif")
+ gdaltest.tiff_drv.Delete("tmp/ct16_copy.tif")
+
###############################################################################
# Test SetRasterColorInterpretation on a 2 channel image
@@ -1015,7 +1143,7 @@ def test_tiff_write_27():
def test_tiff_write_28():
- ds = gdaltest.tiff_drv.Create('tmp/greyalpha.tif', 1, 1, 2)
+ ds = gdaltest.tiff_drv.Create("tmp/greyalpha.tif", 1, 1, 2)
assert ds.GetRasterBand(2).GetRasterColorInterpretation() == gdal.GCI_Undefined
@@ -1025,12 +1153,13 @@ def test_tiff_write_28():
ds = None
- ds = gdal.Open('tmp/greyalpha.tif')
+ ds = gdal.Open("tmp/greyalpha.tif")
assert ds.GetRasterBand(2).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
ds = None
- gdaltest.tiff_drv.Delete('tmp/greyalpha.tif')
+ gdaltest.tiff_drv.Delete("tmp/greyalpha.tif")
+
###############################################################################
# Test SetRasterColorInterpretation on a 4 channel image
@@ -1040,70 +1169,78 @@ def test_tiff_write_29():
# When creating a 4 channel image with PHOTOMETRIC=RGB,
# TIFFTAG_EXTRASAMPLES=EXTRASAMPLE_UNSPECIFIED
- ds = gdaltest.tiff_drv.Create('/vsimem/rgba.tif', 1, 1, 4, options=['PHOTOMETRIC=RGB'])
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0'
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/rgba.tif", 1, 1, 4, options=["PHOTOMETRIC=RGB"]
+ )
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0"
assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_Undefined
# Now turn on alpha
ds.GetRasterBand(4).SetRasterColorInterpretation(gdal.GCI_AlphaBand)
assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '2'
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "2"
ds = None
- assert gdal.VSIStatL('/vsimem/rgba.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/rgba.tif.aux.xml") is None
- ds = gdal.Open('/vsimem/rgba.tif')
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '2'
+ ds = gdal.Open("/vsimem/rgba.tif")
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "2"
assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
# Test cancelling alpha
- gdaltest.tiff_drv.CreateCopy('/vsimem/rgb_no_alpha.tif', ds, options=['ALPHA=NO'])
+ gdaltest.tiff_drv.CreateCopy("/vsimem/rgb_no_alpha.tif", ds, options=["ALPHA=NO"])
ds = None
- assert gdal.VSIStatL('/vsimem/rgb_no_alpha.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/rgb_no_alpha.tif.aux.xml") is None
- ds = gdal.Open('/vsimem/rgb_no_alpha.tif')
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0'
+ ds = gdal.Open("/vsimem/rgb_no_alpha.tif")
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0"
assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_Undefined
# Test re-adding alpha
- gdaltest.tiff_drv.CreateCopy('/vsimem/rgb_added_alpha.tif', ds, options=['ALPHA=YES'])
+ gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/rgb_added_alpha.tif", ds, options=["ALPHA=YES"]
+ )
ds = None
- assert gdal.VSIStatL('/vsimem/rgb_added_alpha.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/rgb_added_alpha.tif.aux.xml") is None
- ds = gdal.Open('/vsimem/rgb_added_alpha.tif')
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '2'
+ ds = gdal.Open("/vsimem/rgb_added_alpha.tif")
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "2"
assert ds.GetRasterBand(4).GetRasterColorInterpretation() == gdal.GCI_AlphaBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/rgba.tif')
- gdaltest.tiff_drv.Delete('/vsimem/rgb_no_alpha.tif')
- gdaltest.tiff_drv.Delete('/vsimem/rgb_added_alpha.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/rgba.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/rgb_no_alpha.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/rgb_added_alpha.tif")
###############################################################################
# Create a BigTIFF image with BigTIFF=YES
+
def test_tiff_write_30():
- ds = gdaltest.tiff_drv.Create('tmp/bigtiff.tif', 1, 1, 1, options=['BigTIFF=YES'])
+ ds = gdaltest.tiff_drv.Create("tmp/bigtiff.tif", 1, 1, 1, options=["BigTIFF=YES"])
ds = None
- ds = gdal.Open('tmp/bigtiff.tif')
+ ds = gdal.Open("tmp/bigtiff.tif")
assert ds is not None
ds = None
- fileobj = open('tmp/bigtiff.tif', mode='rb')
- binvalues = struct.unpack('B' * 4, fileobj.read(4))
+ fileobj = open("tmp/bigtiff.tif", mode="rb")
+ binvalues = struct.unpack("B" * 4, fileobj.read(4))
fileobj.close()
- gdaltest.tiff_drv.Delete('tmp/bigtiff.tif')
+ gdaltest.tiff_drv.Delete("tmp/bigtiff.tif")
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
+
###############################################################################
# Create a BigTIFF image implicitly (more than 4Gb).
@@ -1111,23 +1248,27 @@ def test_tiff_write_30():
def test_tiff_write_31():
- ds = gdaltest.tiff_drv.Create('tmp/bigtiff.tif', 100000, 100000, 1,
- options=['SPARSE_OK=TRUE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/bigtiff.tif", 100000, 100000, 1, options=["SPARSE_OK=TRUE"]
+ )
ds = None
- ds = gdal.Open('tmp/bigtiff.tif')
+ ds = gdal.Open("tmp/bigtiff.tif")
assert ds is not None
ds = None
- fileobj = open('tmp/bigtiff.tif', mode='rb')
- binvalues = struct.unpack('B' * 4, fileobj.read(4))
+ fileobj = open("tmp/bigtiff.tif", mode="rb")
+ binvalues = struct.unpack("B" * 4, fileobj.read(4))
fileobj.close()
- gdaltest.tiff_drv.Delete('tmp/bigtiff.tif')
+ gdaltest.tiff_drv.Delete("tmp/bigtiff.tif")
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
+
###############################################################################
# Create a rotated image
@@ -1135,10 +1276,10 @@ def test_tiff_write_31():
def test_tiff_write_32():
- ds_in = gdal.Open('data/byte.vrt')
+ ds_in = gdal.Open("data/byte.vrt")
# Test creation
- ds = gdaltest.tiff_drv.Create('tmp/byte_rotated.tif', 20, 20, gdal.GDT_Byte)
+ ds = gdaltest.tiff_drv.Create("tmp/byte_rotated.tif", 20, 20, gdal.GDT_Byte)
gt = (10, 3.53553390593, 3.53553390593, 30, 3.53553390593, -3.53553390593)
ds.SetGeoTransform(gt)
@@ -1149,23 +1290,24 @@ def test_tiff_write_32():
ds_in = None
# Test copy
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/byte_rotated_copy.tif', ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/byte_rotated_copy.tif", ds)
del new_ds
# Check copy
- ds = gdal.Open('tmp/byte_rotated_copy.tif')
+ ds = gdal.Open("tmp/byte_rotated_copy.tif")
new_gt = ds.GetGeoTransform()
for i in range(6):
if new_gt[i] != pytest.approx(gt[i], abs=1e-5):
- print('')
- print(('old = ', gt))
- print(('new = ', new_gt))
- pytest.fail('Geotransform differs.')
+ print("")
+ print(("old = ", gt))
+ print(("new = ", new_gt))
+ pytest.fail("Geotransform differs.")
ds = None
- gdaltest.tiff_drv.Delete('tmp/byte_rotated.tif')
- gdaltest.tiff_drv.Delete('tmp/byte_rotated_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/byte_rotated.tif")
+ gdaltest.tiff_drv.Delete("tmp/byte_rotated_copy.tif")
+
###############################################################################
# Test that metadata is written in .aux.xml file in GeoTIFF profile with CreateCopy
@@ -1174,43 +1316,46 @@ def test_tiff_write_32():
def test_tiff_write_33():
- ds_in = gdal.Open('data/byte.vrt')
+ ds_in = gdal.Open("data/byte.vrt")
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tw_33.tif', ds_in, options=['PROFILE=GeoTIFF'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tw_33.tif", ds_in, options=["PROFILE=GeoTIFF"]
+ )
ds_in = None
ds = None
- ds = gdal.Open('tmp/tw_33.tif')
+ ds = gdal.Open("tmp/tw_33.tif")
md = ds.GetMetadata()
- assert 'test' in md, 'Metadata absent from .aux.xml file.'
+ assert "test" in md, "Metadata absent from .aux.xml file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' in md, 'Metadata absent from .aux.xml file.'
+ assert "testBand" in md, "Metadata absent from .aux.xml file."
ds = None
try:
- os.remove('tmp/tw_33.tif.aux.xml')
+ os.remove("tmp/tw_33.tif.aux.xml")
except OSError:
try:
- os.stat('tmp/tw_33.tif.aux.xml')
+ os.stat("tmp/tw_33.tif.aux.xml")
except OSError:
- pytest.fail('No .aux.xml file.')
+ pytest.fail("No .aux.xml file.")
- ds = gdal.Open('tmp/tw_33.tif')
+ ds = gdal.Open("tmp/tw_33.tif")
md = ds.GetMetadata()
- assert 'test' not in md, 'Metadata written to GeoTIFF file.'
+ assert "test" not in md, "Metadata written to GeoTIFF file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' not in md, 'Metadata written to GeoTIFF file.'
+ assert "testBand" not in md, "Metadata written to GeoTIFF file."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_33.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_33.tif")
+
###############################################################################
# Test that metadata is written in .aux.xml file in GeoTIFF profile with Create
@@ -1219,42 +1364,44 @@ def test_tiff_write_33():
def test_tiff_write_34():
- ds = gdaltest.tiff_drv.Create('tmp/tw_34.tif', 1, 1, gdal.GDT_Byte,
- options=['PROFILE=GeoTIFF'])
- ds.SetMetadata({'test': 'testvalue'})
- ds.GetRasterBand(1).SetMetadata({'testBand': 'testvalueBand'})
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tw_34.tif", 1, 1, gdal.GDT_Byte, options=["PROFILE=GeoTIFF"]
+ )
+ ds.SetMetadata({"test": "testvalue"})
+ ds.GetRasterBand(1).SetMetadata({"testBand": "testvalueBand"})
ds = None
- ds = gdal.Open('tmp/tw_34.tif')
+ ds = gdal.Open("tmp/tw_34.tif")
md = ds.GetMetadata()
- assert 'test' in md, 'Metadata absent from .aux.xml file.'
+ assert "test" in md, "Metadata absent from .aux.xml file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' in md, 'Metadata absent from .aux.xml file.'
+ assert "testBand" in md, "Metadata absent from .aux.xml file."
ds = None
try:
- os.remove('tmp/tw_34.tif.aux.xml')
+ os.remove("tmp/tw_34.tif.aux.xml")
except OSError:
try:
- os.stat('tmp/tw_34.tif.aux.xml')
+ os.stat("tmp/tw_34.tif.aux.xml")
except OSError:
- pytest.fail('No .aux.xml file.')
+ pytest.fail("No .aux.xml file.")
- ds = gdal.Open('tmp/tw_34.tif')
+ ds = gdal.Open("tmp/tw_34.tif")
md = ds.GetMetadata()
- assert 'test' not in md, 'Metadata written to GeoTIFF file.'
+ assert "test" not in md, "Metadata written to GeoTIFF file."
md = ds.GetRasterBand(1).GetMetadata()
- assert 'testBand' not in md, 'Metadata written to GeoTIFF file.'
+ assert "testBand" not in md, "Metadata written to GeoTIFF file."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_34.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_34.tif")
+
###############################################################################
# Test big metadata (that was used to consider too big to fit into the GDALGeotiff tag
@@ -1263,21 +1410,22 @@ def test_tiff_write_34():
def test_tiff_write_35():
- big_string = 'a' * 12345678
- ds = gdaltest.tiff_drv.Create('tmp/tw_35.tif', 1, 1, gdal.GDT_Byte)
+ big_string = "a" * 12345678
+ ds = gdaltest.tiff_drv.Create("tmp/tw_35.tif", 1, 1, gdal.GDT_Byte)
md = {}
- md['test'] = big_string
+ md["test"] = big_string
ds.SetMetadata(md)
ds = None
- assert not os.path.exists('tmp/tw_35.tif.aux.xml')
+ assert not os.path.exists("tmp/tw_35.tif.aux.xml")
- ds = gdal.Open('tmp/tw_35.tif')
- assert ds.GetMetadataItem('test') == big_string
+ ds = gdal.Open("tmp/tw_35.tif")
+ assert ds.GetMetadataItem("test") == big_string
ds = None
- gdaltest.tiff_drv.Delete('tmp/tw_35.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_35.tif")
+
###############################################################################
# Generic functions for the 8 following tests
@@ -1286,7 +1434,11 @@ def test_tiff_write_35():
def tiff_write_big_odd_bits(vrtfilename, tmpfilename, nbits, interleaving):
ds_in = gdal.Open(vrtfilename)
- ds = gdaltest.tiff_drv.CreateCopy(tmpfilename, ds_in, options=['NBITS=' + str(nbits), 'INTERLEAVE=' + interleaving])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ tmpfilename,
+ ds_in,
+ options=["NBITS=" + str(nbits), "INTERLEAVE=" + interleaving],
+ )
ds_in = None
@@ -1295,18 +1447,18 @@ def tiff_write_big_odd_bits(vrtfilename, tmpfilename, nbits, interleaving):
ds = gdal.Open(tmpfilename)
bnd = ds.GetRasterBand(1)
cs = bnd.Checksum()
- assert cs == 4672, 'Didnt get expected checksum on band 1'
- md = bnd.GetMetadata('IMAGE_STRUCTURE')
- assert md['NBITS'] == str(nbits), 'Didnt get expected NBITS value'
+ assert cs == 4672, "Didnt get expected checksum on band 1"
+ md = bnd.GetMetadata("IMAGE_STRUCTURE")
+ assert md["NBITS"] == str(nbits), "Didnt get expected NBITS value"
bnd = ds.GetRasterBand(2)
- assert bnd.Checksum() == 4672, 'Didnt get expected checksum on band 2'
+ assert bnd.Checksum() == 4672, "Didnt get expected checksum on band 2"
bnd = ds.GetRasterBand(3)
- assert bnd.Checksum() == 4672, 'Didnt get expected checksum on band 3'
+ assert bnd.Checksum() == 4672, "Didnt get expected checksum on band 3"
bnd = None
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- assert md['INTERLEAVE'] == interleaving, 'Didnt get expected interleaving'
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ assert md["INTERLEAVE"] == interleaving, "Didnt get expected interleaving"
ds = None
@@ -1316,86 +1468,102 @@ def tiff_write_big_odd_bits(vrtfilename, tmpfilename, nbits, interleaving):
###############################################################################
# Test copy with NBITS=9, INTERLEAVE=PIXEL
+
def test_tiff_write_36():
- return tiff_write_big_odd_bits('data/uint16_3band.vrt', 'tmp/tw_36.tif', 9, 'PIXEL')
+ return tiff_write_big_odd_bits("data/uint16_3band.vrt", "tmp/tw_36.tif", 9, "PIXEL")
###############################################################################
# Test copy with NBITS=9, INTERLEAVE=BAND
+
def test_tiff_write_37():
- return tiff_write_big_odd_bits('data/uint16_3band.vrt', 'tmp/tw_37.tif', 9, 'BAND')
+ return tiff_write_big_odd_bits("data/uint16_3band.vrt", "tmp/tw_37.tif", 9, "BAND")
+
###############################################################################
# Test copy with NBITS=12, INTERLEAVE=PIXEL
def test_tiff_write_38():
- return tiff_write_big_odd_bits('data/uint16_3band.vrt', 'tmp/tw_38.tif', 12, 'PIXEL')
+ return tiff_write_big_odd_bits(
+ "data/uint16_3band.vrt", "tmp/tw_38.tif", 12, "PIXEL"
+ )
+
###############################################################################
# Test copy with NBITS=12, INTERLEAVE=BAND
def test_tiff_write_39():
- return tiff_write_big_odd_bits('data/uint16_3band.vrt', 'tmp/tw_39.tif', 12, 'BAND')
+ return tiff_write_big_odd_bits("data/uint16_3band.vrt", "tmp/tw_39.tif", 12, "BAND")
+
###############################################################################
# Test copy with NBITS=17, INTERLEAVE=PIXEL
def test_tiff_write_40():
- return tiff_write_big_odd_bits('data/uint32_3band.vrt', 'tmp/tw_40tif', 17, 'PIXEL')
+ return tiff_write_big_odd_bits("data/uint32_3band.vrt", "tmp/tw_40tif", 17, "PIXEL")
+
###############################################################################
# Test copy with NBITS=17, INTERLEAVE=BAND
def test_tiff_write_41():
- return tiff_write_big_odd_bits('data/uint32_3band.vrt', 'tmp/tw_41.tif', 17, 'BAND')
+ return tiff_write_big_odd_bits("data/uint32_3band.vrt", "tmp/tw_41.tif", 17, "BAND")
+
###############################################################################
# Test copy with NBITS=24, INTERLEAVE=PIXEL
def test_tiff_write_42():
- return tiff_write_big_odd_bits('data/uint32_3band.vrt', 'tmp/tw_42.tif', 24, 'PIXEL')
+ return tiff_write_big_odd_bits(
+ "data/uint32_3band.vrt", "tmp/tw_42.tif", 24, "PIXEL"
+ )
+
###############################################################################
# Test copy with NBITS=24, INTERLEAVE=BAND
def test_tiff_write_43():
- return tiff_write_big_odd_bits('data/uint32_3band.vrt', 'tmp/tw_43.tif', 24, 'BAND')
+ return tiff_write_big_odd_bits("data/uint32_3band.vrt", "tmp/tw_43.tif", 24, "BAND")
###############################################################################
# Test create with NBITS=9 and preservation through CreateCopy of NBITS
+
def test_tiff_write_44():
- ds = gdaltest.tiff_drv.Create('tmp/tw_44.tif', 1, 1, 1, gdal.GDT_UInt16, options=['NBITS=9'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tw_44.tif", 1, 1, 1, gdal.GDT_UInt16, options=["NBITS=9"]
+ )
ds = None
- ds = gdal.Open('tmp/tw_44.tif')
+ ds = gdal.Open("tmp/tw_44.tif")
bnd = ds.GetRasterBand(1)
- md = bnd.GetMetadata('IMAGE_STRUCTURE')
+ md = bnd.GetMetadata("IMAGE_STRUCTURE")
bnd = None
- assert md['NBITS'] == '9', 'Didnt get expected NBITS value'
+ assert md["NBITS"] == "9", "Didnt get expected NBITS value"
- ds2 = gdaltest.tiff_drv.CreateCopy('tmp/tw_44_copy.tif', ds)
+ ds2 = gdaltest.tiff_drv.CreateCopy("tmp/tw_44_copy.tif", ds)
ds2 = None
- ds2 = gdal.Open('tmp/tw_44_copy.tif')
+ ds2 = gdal.Open("tmp/tw_44_copy.tif")
bnd = ds2.GetRasterBand(1)
- md = bnd.GetMetadata('IMAGE_STRUCTURE')
+ md = bnd.GetMetadata("IMAGE_STRUCTURE")
bnd = None
- assert md['NBITS'] == '9', 'Didnt get expected NBITS value'
+ assert md["NBITS"] == "9", "Didnt get expected NBITS value"
ds = None
ds2 = None
- gdaltest.tiff_drv.Delete('tmp/tw_44.tif')
- gdaltest.tiff_drv.Delete('tmp/tw_44_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_44.tif")
+ gdaltest.tiff_drv.Delete("tmp/tw_44_copy.tif")
+
###############################################################################
# Test create with NBITS=17 and preservation through CreateCopy of NBITS
@@ -1403,41 +1571,48 @@ def test_tiff_write_44():
def test_tiff_write_45():
- ds = gdaltest.tiff_drv.Create('tmp/tw_45.tif', 1, 1, 1, gdal.GDT_UInt32, options=['NBITS=17'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tw_45.tif", 1, 1, 1, gdal.GDT_UInt32, options=["NBITS=17"]
+ )
ds = None
- ds = gdal.Open('tmp/tw_45.tif')
+ ds = gdal.Open("tmp/tw_45.tif")
bnd = ds.GetRasterBand(1)
- md = bnd.GetMetadata('IMAGE_STRUCTURE')
+ md = bnd.GetMetadata("IMAGE_STRUCTURE")
bnd = None
- assert md['NBITS'] == '17', 'Didnt get expected NBITS value'
+ assert md["NBITS"] == "17", "Didnt get expected NBITS value"
- ds2 = gdaltest.tiff_drv.CreateCopy('tmp/tw_45_copy.tif', ds)
+ ds2 = gdaltest.tiff_drv.CreateCopy("tmp/tw_45_copy.tif", ds)
ds2 = None
- ds2 = gdal.Open('tmp/tw_45_copy.tif')
+ ds2 = gdal.Open("tmp/tw_45_copy.tif")
bnd = ds2.GetRasterBand(1)
- md = bnd.GetMetadata('IMAGE_STRUCTURE')
+ md = bnd.GetMetadata("IMAGE_STRUCTURE")
bnd = None
- assert md['NBITS'] == '17', 'Didnt get expected NBITS value'
+ assert md["NBITS"] == "17", "Didnt get expected NBITS value"
ds = None
ds2 = None
- gdaltest.tiff_drv.Delete('tmp/tw_45.tif')
- gdaltest.tiff_drv.Delete('tmp/tw_45_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/tw_45.tif")
+ gdaltest.tiff_drv.Delete("tmp/tw_45_copy.tif")
###############################################################################
# Test correct round-tripping of ReadBlock/WriteBlock
+
def test_tiff_write_46():
with gdaltest.SetCacheMax(0):
- ds = gdaltest.tiff_drv.Create("tmp/tiff_write_46_1.tif", 10, 10, 1, options=['NBITS=1'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_46_1.tif", 10, 10, 1, options=["NBITS=1"]
+ )
ds.GetRasterBand(1).Fill(0)
- ds2 = gdaltest.tiff_drv.Create("tmp/tiff_write_46_2.tif", 10, 10, 1, options=['NBITS=1'])
+ ds2 = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_46_2.tif", 10, 10, 1, options=["NBITS=1"]
+ )
ds2.GetRasterBand(1).Fill(1)
ones = ds2.ReadRaster(0, 0, 10, 1)
@@ -1455,16 +1630,17 @@ def test_tiff_write_46():
data = ds.ReadRaster(0, 0, 10, 1)
# We expect (1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
- got = struct.unpack('B' * 10, data)
+ got = struct.unpack("B" * 10, data)
for g in got:
assert g == 1, got
ds = None
ds2 = None
ds3 = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_46_1.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_46_2.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_46_3.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_46_1.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_46_2.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_46_3.tif")
+
###############################################################################
# Test #2457
@@ -1480,12 +1656,19 @@ def test_tiff_write_47():
###############################################################################
# Test #2457 with nYOff of RasterIO not aligned on the block height
+
def test_tiff_write_48():
with gdaltest.SetCacheMax(0):
- src_ds = gdal.Open('data/utmsmall.tif')
- new_ds = gdal.GetDriverByName("GTiff").Create('tmp/tiff_write_48.tif', 100, 100, 1, options=['TILED=YES', 'BLOCKXSIZE=96', 'BLOCKYSIZE=96'])
+ src_ds = gdal.Open("data/utmsmall.tif")
+ new_ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_48.tif",
+ 100,
+ 100,
+ 1,
+ options=["TILED=YES", "BLOCKXSIZE=96", "BLOCKYSIZE=96"],
+ )
data = src_ds.ReadRaster(0, 0, 100, 1)
data2 = src_ds.ReadRaster(0, 1, 100, 99)
new_ds.WriteRaster(0, 1, 100, 99, data2)
@@ -1493,117 +1676,141 @@ def test_tiff_write_48():
new_ds = None
new_ds = None
- new_ds = gdal.Open('tmp/tiff_write_48.tif')
- assert new_ds.GetRasterBand(1).Checksum() == 50054, 'Didnt get expected checksum '
+ new_ds = gdal.Open("tmp/tiff_write_48.tif")
+ assert new_ds.GetRasterBand(1).Checksum() == 50054, "Didnt get expected checksum "
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_48.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_48.tif")
###############################################################################
# Test copying a CMYK TIFF into another CMYK TIFF
+
def test_tiff_write_49():
# We open the source as RAW to get the CMYK bands
- src_ds = gdal.Open('GTIFF_RAW:data/rgbsmall_cmyk.tif')
+ src_ds = gdal.Open("GTIFF_RAW:data/rgbsmall_cmyk.tif")
- new_ds = gdal.GetDriverByName("GTiff").CreateCopy('tmp/tiff_write_49.tif', src_ds, options=['PHOTOMETRIC=CMYK'])
+ new_ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ "tmp/tiff_write_49.tif", src_ds, options=["PHOTOMETRIC=CMYK"]
+ )
# At this point, for the purpose of the copy, the dataset will have been opened as RAW
- assert new_ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand, \
- 'Wrong color interpretation.'
+ assert (
+ new_ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand
+ ), "Wrong color interpretation."
new_ds = None
- new_ds = gdal.Open('GTIFF_RAW:tmp/tiff_write_49.tif')
+ new_ds = gdal.Open("GTIFF_RAW:tmp/tiff_write_49.tif")
for i in range(4):
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum(), \
- 'Didnt get expected checksum '
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ ), "Didnt get expected checksum "
src_ds = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_49.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_49.tif")
###############################################################################
# Test creating a CMYK TIFF from another CMYK TIFF
+
def test_tiff_write_50():
# We open the source as RAW to get the CMYK bands
- src_ds = gdal.Open('GTIFF_RAW:data/rgbsmall_cmyk.tif')
-
- new_ds = gdal.GetDriverByName("GTiff").Create('tmp/tiff_write_50.tif', src_ds.RasterXSize, src_ds.RasterYSize, 4, options=['PHOTOMETRIC=CMYK'])
+ src_ds = gdal.Open("GTIFF_RAW:data/rgbsmall_cmyk.tif")
+
+ new_ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_50.tif",
+ src_ds.RasterXSize,
+ src_ds.RasterYSize,
+ 4,
+ options=["PHOTOMETRIC=CMYK"],
+ )
for i in range(4):
- data = src_ds.GetRasterBand(i + 1).ReadRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize)
- new_ds.GetRasterBand(i + 1).WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data)
+ data = src_ds.GetRasterBand(i + 1).ReadRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize
+ )
+ new_ds.GetRasterBand(i + 1).WriteRaster(
+ 0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data
+ )
- assert new_ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand, \
- 'Wrong color interpretation.'
+ assert (
+ new_ds.GetRasterBand(1).GetRasterColorInterpretation() == gdal.GCI_CyanBand
+ ), "Wrong color interpretation."
new_ds = None
- new_ds = gdal.Open('GTIFF_RAW:tmp/tiff_write_50.tif')
+ new_ds = gdal.Open("GTIFF_RAW:tmp/tiff_write_50.tif")
for i in range(4):
- assert new_ds.GetRasterBand(i + 1).Checksum() == src_ds.GetRasterBand(i + 1).Checksum(), \
- 'Didnt get expected checksum '
+ assert (
+ new_ds.GetRasterBand(i + 1).Checksum()
+ == src_ds.GetRasterBand(i + 1).Checksum()
+ ), "Didnt get expected checksum "
src_ds = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_50.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_50.tif")
###############################################################################
# Test proper clearing of existing GeoTIFF tags when updating the projection.
# http://trac.osgeo.org/gdal/ticket/2546
+
def test_tiff_write_51():
- shutil.copyfile('data/utmsmall.tif', 'tmp/tiff_write_51.tif')
+ shutil.copyfile("data/utmsmall.tif", "tmp/tiff_write_51.tif")
- ds = gdal.Open('tmp/tiff_write_51.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_51.tif", gdal.GA_Update)
srs = osr.SpatialReference()
- srs.SetFromUserInput('EPSG:32601')
+ srs.SetFromUserInput("EPSG:32601")
ds.SetProjection(srs.ExportToWkt())
ds = None
- ds = gdal.Open('tmp/tiff_write_51.tif')
+ ds = gdal.Open("tmp/tiff_write_51.tif")
wkt = ds.GetProjection()
ds = None
# Create a new GeoTIFF file with same projection
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_51_ref.tif', 1, 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_51_ref.tif", 1, 1, 1)
ds.SetProjection(srs.ExportToWkt())
ds = None
# Read it back as the reference WKT
- ds = gdal.Open('tmp/tiff_write_51_ref.tif')
+ ds = gdal.Open("tmp/tiff_write_51_ref.tif")
expected_wkt = ds.GetProjection()
ds = None
- assert wkt.find('NAD') == -1 and wkt.find('North Am') == -1, \
- 'It appears the NAD27 datum was not properly cleared.'
+ assert (
+ wkt.find("NAD") == -1 and wkt.find("North Am") == -1
+ ), "It appears the NAD27 datum was not properly cleared."
- assert wkt == expected_wkt and wkt.find('WGS 84 / UTM zone 1N') != -1, \
- 'coordinate system does not exactly match.'
+ assert (
+ wkt == expected_wkt and wkt.find("WGS 84 / UTM zone 1N") != -1
+ ), "coordinate system does not exactly match."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_51.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_51_ref.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_51.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_51_ref.tif")
+
###############################################################################
# Test the ability to update a paletted TIFF files color table.
def test_tiff_write_52():
- shutil.copyfile('data/test_average_palette.tif', 'tmp/tiff_write_52.tif')
+ shutil.copyfile("data/test_average_palette.tif", "tmp/tiff_write_52.tif")
test_ct_data = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 255, 0)]
@@ -1611,19 +1818,20 @@ def test_tiff_write_52():
for i, data in enumerate(test_ct_data):
test_ct.SetColorEntry(i, data)
- ds = gdal.Open('tmp/tiff_write_52.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_52.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetRasterColorTable(test_ct)
ds = None
- ds = gdal.Open('tmp/tiff_write_52.tif')
+ ds = gdal.Open("tmp/tiff_write_52.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert ct.GetColorEntry(0) == (255, 0, 0, 255), 'Did not get expected color 0.'
+ assert ct.GetColorEntry(0) == (255, 0, 0, 255), "Did not get expected color 0."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_52.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_52.tif")
+
###############################################################################
# Test the ability to create a paletted image and then update later.
@@ -1636,31 +1844,32 @@ def test_tiff_write_53():
for i, data in enumerate(test_ct_data):
test_ct.SetColorEntry(i, data)
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_53.tif',
- 30, 50, 1,
- options=['PHOTOMETRIC=PALETTE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_53.tif", 30, 50, 1, options=["PHOTOMETRIC=PALETTE"]
+ )
ds.GetRasterBand(1).Fill(10)
ds = None
- ds = gdal.Open('tmp/tiff_write_53.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_53.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetRasterColorTable(test_ct)
ds = None
- ds = gdal.Open('tmp/tiff_write_53.tif')
+ ds = gdal.Open("tmp/tiff_write_53.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert ct.GetColorEntry(0) == (255, 0, 0, 255), 'Did not get expected color 0.'
+ assert ct.GetColorEntry(0) == (255, 0, 0, 255), "Did not get expected color 0."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_53.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_53.tif")
###############################################################################
# Same as before except we create an overview before reopening the file and
# adding the color table
+
def test_tiff_write_53_bis():
test_ct_data = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 255, 0)]
@@ -1668,26 +1877,27 @@ def test_tiff_write_53_bis():
for i, data in enumerate(test_ct_data):
test_ct.SetColorEntry(i, data)
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_53_bis.tif',
- 30, 50, 1,
- options=['PHOTOMETRIC=PALETTE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_53_bis.tif", 30, 50, 1, options=["PHOTOMETRIC=PALETTE"]
+ )
ds.GetRasterBand(1).Fill(10)
- ds.BuildOverviews('NONE', overviewlist=[2])
+ ds.BuildOverviews("NONE", overviewlist=[2])
ds = None
- ds = gdal.Open('tmp/tiff_write_53_bis.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_53_bis.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetRasterColorTable(test_ct)
ds = None
- ds = gdal.Open('tmp/tiff_write_53_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_53_bis.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert ct.GetColorEntry(0) == (255, 0, 0, 255), 'Did not get expected color 0.'
+ assert ct.GetColorEntry(0) == (255, 0, 0, 255), "Did not get expected color 0."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_53_bis.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_53_bis.tif")
+
###############################################################################
# Test the ability to create a JPEG compressed TIFF, with PHOTOMETRIC=YCBCR
@@ -1697,32 +1907,36 @@ def test_tiff_write_53_bis():
def test_tiff_write_54():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_54.tif',
- 256, 256, 3,
- options=['TILED=YES', 'COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_54.tif",
+ 256,
+ 256,
+ 3,
+ options=["TILED=YES", "COMPRESS=JPEG", "PHOTOMETRIC=YCBCR"],
+ )
ds.GetRasterBand(1).Fill(255)
ds.FlushCache()
ds = None
- ds = gdal.Open('tmp/tiff_write_54.tif')
+ ds = gdal.Open("tmp/tiff_write_54.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_54.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_54.tif")
- assert cs != 0, 'did not get expected checksum'
+ assert cs != 0, "did not get expected checksum"
###############################################################################
# Test creating and reading an equirectangular file with all parameters (#2706)
+
def test_tiff_write_55():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_55.tif',
- 256, 256, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_55.tif", 256, 256, 1)
srs_expected = 'PROJCS["Equirectangular Mars",GEOGCS["GCS_Mars",DATUM["unknown",SPHEROID["unnamed",3394813.85797594,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",-2],PARAMETER["central_meridian",184.412994384766],PARAMETER["standard_parallel_1",-15],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'
ds.SetProjection(srs_expected)
@@ -1730,14 +1944,16 @@ def test_tiff_write_55():
ds.SetGeoTransform((100, 1, 0, 200, 0, -1))
ds = None
- ds = gdal.Open('tmp/tiff_write_55.tif')
+ ds = gdal.Open("tmp/tiff_write_55.tif")
srs = ds.GetProjectionRef()
ds = None
- assert srs == srs_expected, \
- 'failed to preserve Equirectangular projection as expected, old libgeotiff?'
+ assert (
+ srs == srs_expected
+ ), "failed to preserve Equirectangular projection as expected, old libgeotiff?"
+
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_55.tif")
- gdaltest.tiff_drv.Delete('tmp/tiff_write_55.tif')
###############################################################################
# Test clearing the colormap from an existing paletted TIFF file.
@@ -1751,27 +1967,28 @@ def test_tiff_write_56():
for i, data in enumerate(test_ct_data):
test_ct.SetColorEntry(i, data)
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_56.tif',
- 30, 50, 1,
- options=['PHOTOMETRIC=PALETTE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_56.tif", 30, 50, 1, options=["PHOTOMETRIC=PALETTE"]
+ )
ds.GetRasterBand(1).Fill(10)
ds = None
test_ct = gdal.ColorTable()
- ds = gdal.Open('tmp/tiff_write_56.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_56.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetRasterColorTable(test_ct)
ds = None
- ds = gdal.Open('tmp/tiff_write_56.tif')
+ ds = gdal.Open("tmp/tiff_write_56.tif")
ct = ds.GetRasterBand(1).GetRasterColorTable()
- assert ct is None, 'color table seemingly not cleared.'
+ assert ct is None, "color table seemingly not cleared."
ct = None
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_56.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_56.tif")
+
###############################################################################
# Test replacing normal norm up georef with rotated georef (#2625)
@@ -1780,22 +1997,29 @@ def test_tiff_write_56():
def test_tiff_write_57():
# copy a file to tmp dir to modify.
- open('tmp/tiff57.tif', 'wb').write(open('data/byte.tif', 'rb').read())
+ open("tmp/tiff57.tif", "wb").write(open("data/byte.tif", "rb").read())
# open and set a non-northup geotransform.
- ds = gdal.Open('tmp/tiff57.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff57.tif", gdal.GA_Update)
ds.SetGeoTransform([100, 1, 3, 200, 3, 1])
ds = None
- ds = gdal.Open('tmp/tiff57.tif')
+ ds = gdal.Open("tmp/tiff57.tif")
gt = ds.GetGeoTransform()
ds = None
- assert gt == (100, 1, 3, 200, 3, 1), \
- 'did not get expected geotransform, perhaps unset is not working?'
+ assert gt == (
+ 100,
+ 1,
+ 3,
+ 200,
+ 3,
+ 1,
+ ), "did not get expected geotransform, perhaps unset is not working?"
+
+ gdaltest.tiff_drv.Delete("tmp/tiff57.tif")
- gdaltest.tiff_drv.Delete('tmp/tiff57.tif')
###############################################################################
# Test writing partial end strips (#2748)
@@ -1805,20 +2029,22 @@ def test_tiff_write_58():
md = gdaltest.tiff_drv.GetMetadata()
- for compression in ('NONE', 'JPEG', 'LZW', 'DEFLATE', 'PACKBITS'):
+ for compression in ("NONE", "JPEG", "LZW", "DEFLATE", "PACKBITS"):
- if md['DMD_CREATIONOPTIONLIST'].find(compression) != -1:
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_58.tif', 4, 4000, 1, options=['COMPRESS=' + compression])
+ if md["DMD_CREATIONOPTIONLIST"].find(compression) != -1:
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_58.tif", 4, 4000, 1, options=["COMPRESS=" + compression]
+ )
ds.GetRasterBand(1).Fill(255)
ds = None
- ds = gdal.Open('tmp/tiff_write_58.tif')
- assert ds.GetRasterBand(1).Checksum() == 65241, 'wrong checksum'
+ ds = gdal.Open("tmp/tiff_write_58.tif")
+ assert ds.GetRasterBand(1).Checksum() == 65241, "wrong checksum"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_58.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_58.tif")
else:
- print(('Skipping compression method %s' % compression))
+ print(("Skipping compression method %s" % compression))
###############################################################################
@@ -1827,22 +2053,29 @@ def test_tiff_write_58():
def test_tiff_write_59():
- ret = 'success'
+ ret = "success"
for nbands in (1, 2):
for nbits in (1, 8, 9, 12, 16, 17, 24, 32):
if nbits <= 8:
gdal_type = gdal.GDT_Byte
- ctype = 'B'
+ ctype = "B"
elif nbits <= 16:
gdal_type = gdal.GDT_UInt16
- ctype = 'h'
+ ctype = "h"
else:
gdal_type = gdal.GDT_UInt32
- ctype = 'i'
-
- ds = gdaltest.tiff_drv.Create("tmp/tiff_write_59.tif", 10, 10, nbands, gdal_type, options=['NBITS=%d' % nbits])
+ ctype = "i"
+
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_59.tif",
+ 10,
+ 10,
+ nbands,
+ gdal_type,
+ options=["NBITS=%d" % nbits],
+ )
ds.GetRasterBand(1).Fill(1)
ds = None
@@ -1860,57 +2093,74 @@ def test_tiff_write_59():
got = struct.unpack(ctype * 10, data)
for g in got:
if g != 0:
- print(('nbands=%d, NBITS=%d' % (nbands, nbits)))
+ print(("nbands=%d, NBITS=%d" % (nbands, nbits)))
print(got)
- ret = 'fail'
+ ret = "fail"
break
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_59.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_59.tif")
return ret
+
###############################################################################
# Test fix for #2760
def test_tiff_write_60():
- tuples = [('TFW=YES', 'tmp/tiff_write_60.tfw'),
- ('WORLDFILE=YES', 'tmp/tiff_write_60.wld')]
+ tuples = [
+ ("TFW=YES", "tmp/tiff_write_60.tfw"),
+ ("WORLDFILE=YES", "tmp/tiff_write_60.wld"),
+ ]
for options_tuple in tuples:
# Create case
with gdaltest.error_handler():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_60.tif', 10, 10, options=[options_tuple[0], 'PROFILE=BASELINE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_60.tif",
+ 10,
+ 10,
+ options=[options_tuple[0], "PROFILE=BASELINE"],
+ )
gt = (0.0, 1.0, 0.0, 50.0, 0.0, -1.0)
ds.SetGeoTransform(gt)
ds = None
with gdaltest.error_handler():
- ds = gdal.Open('tmp/tiff_write_60.tif')
- assert ds.GetGeoTransform() == gt, ('case1: %s != %s' % (ds.GetGeoTransform(), gt))
+ ds = gdal.Open("tmp/tiff_write_60.tif")
+ assert ds.GetGeoTransform() == gt, "case1: %s != %s" % (
+ ds.GetGeoTransform(),
+ gt,
+ )
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_60.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_60.tif")
assert not os.path.exists(options_tuple[1])
# CreateCopy case
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
with gdaltest.error_handler():
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_60.tif', src_ds, options=[options_tuple[0], 'PROFILE=BASELINE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_60.tif",
+ src_ds,
+ options=[options_tuple[0], "PROFILE=BASELINE"],
+ )
gt = (0.0, 1.0, 0.0, 50.0, 0.0, -1.0)
ds.SetGeoTransform(gt)
ds = None
- gdal.Unlink('tmp/tiff_write_60.tif.aux.xml')
+ gdal.Unlink("tmp/tiff_write_60.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_60.tif')
- assert ds.GetGeoTransform() == gt, \
- ('case2: %s != %s' % (ds.GetGeoTransform(), gt))
+ ds = gdal.Open("tmp/tiff_write_60.tif")
+ assert ds.GetGeoTransform() == gt, "case2: %s != %s" % (
+ ds.GetGeoTransform(),
+ gt,
+ )
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_60.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_60.tif")
assert not os.path.exists(options_tuple[1])
@@ -1921,23 +2171,31 @@ def test_tiff_write_60():
def test_tiff_write_61():
- ds = gdaltest.tiff_drv.Create('tmp/bigtiff.tif', 50000, 50000, 1,
- options=['BIGTIFF=IF_NEEDED', 'SPARSE_OK=TRUE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/bigtiff.tif",
+ 50000,
+ 50000,
+ 1,
+ options=["BIGTIFF=IF_NEEDED", "SPARSE_OK=TRUE"],
+ )
ds = None
- ds = gdal.Open('tmp/bigtiff.tif')
+ ds = gdal.Open("tmp/bigtiff.tif")
assert ds is not None
ds = None
- fileobj = open('tmp/bigtiff.tif', mode='rb')
- binvalues = struct.unpack('B' * 4, fileobj.read(4))
+ fileobj = open("tmp/bigtiff.tif", mode="rb")
+ binvalues = struct.unpack("B" * 4, fileobj.read(4))
fileobj.close()
- gdaltest.tiff_drv.Delete('tmp/bigtiff.tif')
+ gdaltest.tiff_drv.Delete("tmp/bigtiff.tif")
# Check classical TIFF signature
- assert (not ((binvalues[2] != 0x2A or binvalues[3] != 0) and
- (binvalues[3] != 0x2A or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2A or binvalues[3] != 0)
+ and (binvalues[3] != 0x2A or binvalues[2] != 0)
+ )
+
###############################################################################
# Test BigTIFF=IF_SAFER creation option
@@ -1945,23 +2203,31 @@ def test_tiff_write_61():
def test_tiff_write_62():
- ds = gdaltest.tiff_drv.Create('tmp/bigtiff.tif', 50000, 50000, 1,
- options=['BIGTIFF=IF_SAFER', 'SPARSE_OK=TRUE'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/bigtiff.tif",
+ 50000,
+ 50000,
+ 1,
+ options=["BIGTIFF=IF_SAFER", "SPARSE_OK=TRUE"],
+ )
ds = None
- ds = gdal.Open('tmp/bigtiff.tif')
+ ds = gdal.Open("tmp/bigtiff.tif")
assert ds is not None
ds = None
- fileobj = open('tmp/bigtiff.tif', mode='rb')
- binvalues = struct.unpack('B' * 4, fileobj.read(4))
+ fileobj = open("tmp/bigtiff.tif", mode="rb")
+ binvalues = struct.unpack("B" * 4, fileobj.read(4))
fileobj.close()
- gdaltest.tiff_drv.Delete('tmp/bigtiff.tif')
+ gdaltest.tiff_drv.Delete("tmp/bigtiff.tif")
# Check BigTIFF signature
- assert (not ((binvalues[2] != 0x2B or binvalues[3] != 0) and
- (binvalues[3] != 0x2B or binvalues[2] != 0)))
+ assert not (
+ (binvalues[2] != 0x2B or binvalues[3] != 0)
+ and (binvalues[3] != 0x2B or binvalues[2] != 0)
+ )
+
###############################################################################
# Test BigTIFF=NO creation option when creating a BigTIFF file would be required
@@ -1969,9 +2235,10 @@ def test_tiff_write_62():
def test_tiff_write_63():
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdaltest.tiff_drv.Create('tmp/bigtiff.tif', 150000, 150000, 1,
- options=['BIGTIFF=NO'])
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/bigtiff.tif", 150000, 150000, 1, options=["BIGTIFF=NO"]
+ )
gdal.PopErrorHandler()
if ds is None:
@@ -1979,27 +2246,29 @@ def test_tiff_write_63():
pytest.fail()
+
###############################################################################
# Test returned projection in WKT format for a WGS84 GeoTIFF (#2787)
def test_tiff_write_64():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_64.tif', 1, 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_64.tif", 1, 1, 1)
srs = osr.SpatialReference()
- srs.SetFromUserInput('WGS84')
+ srs.SetFromUserInput("WGS84")
ds.SetProjection(srs.ExportToWkt())
ds = None
- ds = gdal.Open('tmp/tiff_write_64.tif')
+ ds = gdal.Open("tmp/tiff_write_64.tif")
wkt = ds.GetProjection()
ds = None
expected_wkt = """GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]"""
- assert wkt == expected_wkt, 'coordinate system does not exactly match.'
+ assert wkt == expected_wkt, "coordinate system does not exactly match."
+
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_64.tif")
- gdaltest.tiff_drv.Delete('tmp/tiff_write_64.tif')
###############################################################################
# Verify that we can write XML metadata.
@@ -2007,34 +2276,37 @@ def test_tiff_write_64():
def test_tiff_write_65():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_65.tif', 10, 10)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_65.tif", 10, 10)
doc = ''
- ds.SetMetadata([doc], 'xml:test')
+ ds.SetMetadata([doc], "xml:test")
ds = None
- ds = gdal.Open('tmp/tiff_write_65.tif')
- md = ds.GetMetadata('xml:test')
+ ds = gdal.Open("tmp/tiff_write_65.tif")
+ md = ds.GetMetadata("xml:test")
ds = None
- assert len(md) == 1 and md[0] == doc, 'did not get xml back clean'
+ assert len(md) == 1 and md[0] == doc, "did not get xml back clean"
- gdaltest.tiff_drv.Delete('tmp/tiff_write_65.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_65.tif")
###############################################################################
# Verify that we can write and read a band-interleaved GeoTIFF with 65535 bands (#2838)
+
def test_tiff_write_66():
- if gdal.GetConfigOption('SKIP_MEM_INTENSIVE_TEST') is not None:
+ if gdal.GetConfigOption("SKIP_MEM_INTENSIVE_TEST") is not None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_66.tif', 1, 1, 65535, options=['INTERLEAVE=BAND'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_66.tif", 1, 1, 65535, options=["INTERLEAVE=BAND"]
+ )
ds = None
- ds = gdal.Open('tmp/tiff_write_66.tif')
+ ds = gdal.Open("tmp/tiff_write_66.tif")
assert ds.RasterCount == 65535
assert ds.GetRasterBand(1).Checksum() == 0
@@ -2043,21 +2315,24 @@ def test_tiff_write_66():
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_66.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_66.tif")
###############################################################################
# Verify that we can write and read a pixel-interleaved GeoTIFF with 65535 bands (#2838)
+
def test_tiff_write_67():
- if gdal.GetConfigOption('SKIP_MEM_INTENSIVE_TEST') is not None:
+ if gdal.GetConfigOption("SKIP_MEM_INTENSIVE_TEST") is not None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_67.tif', 1, 1, 65535, options=['INTERLEAVE=PIXEL'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_67.tif", 1, 1, 65535, options=["INTERLEAVE=PIXEL"]
+ )
ds = None
- ds = gdal.Open('tmp/tiff_write_67.tif')
+ ds = gdal.Open("tmp/tiff_write_67.tif")
assert ds.RasterCount == 65535
assert ds.GetRasterBand(1).Checksum() == 0
@@ -2066,7 +2341,8 @@ def test_tiff_write_67():
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_67.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_67.tif")
+
###############################################################################
# Verify that we can set the color table after a Create() (scenario hit by map.tif in #2820)
@@ -2074,7 +2350,9 @@ def test_tiff_write_67():
def test_tiff_write_68():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_68.tif', 151, 161, options=['COMPRESS=LZW'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_68.tif", 151, 161, options=["COMPRESS=LZW"]
+ )
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 255, 255, 255))
ct.SetColorEntry(1, (255, 255, 0, 255))
@@ -2084,11 +2362,12 @@ def test_tiff_write_68():
ds.GetRasterBand(1).Fill(255)
ds = None
- ds = gdal.Open('tmp/tiff_write_68.tif')
+ ds = gdal.Open("tmp/tiff_write_68.tif")
assert ds.GetRasterBand(1).Checksum() != 0
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_68.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_68.tif")
+
###############################################################################
# Verify GTiffRasterBand::NullBlock() when reading empty block without any nodata value set
@@ -2096,14 +2375,17 @@ def test_tiff_write_68():
def test_tiff_write_69():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_69.tif', 32, 32, 1, gdal.GDT_Int16, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_69.tif", 32, 32, 1, gdal.GDT_Int16, options=["SPARSE_OK=YES"]
+ )
ds = None
- ds = gdal.Open('tmp/tiff_write_69.tif')
+ ds = gdal.Open("tmp/tiff_write_69.tif")
assert ds.GetRasterBand(1).Checksum() == 0
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_69.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_69.tif")
+
###############################################################################
# Verify GTiffRasterBand::NullBlock() when reading empty block with nodata value set
@@ -2111,82 +2393,88 @@ def test_tiff_write_69():
def test_tiff_write_70():
- ref_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_70_ref.tif', 32, 32, 1, gdal.GDT_Int16)
+ ref_ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_70_ref.tif", 32, 32, 1, gdal.GDT_Int16
+ )
ref_ds.GetRasterBand(1).Fill(-32768)
ref_ds = None
- ref_ds = gdal.Open('tmp/tiff_write_70_ref.tif')
+ ref_ds = gdal.Open("tmp/tiff_write_70_ref.tif")
expected_cs = ref_ds.GetRasterBand(1).Checksum()
ref_ds = None
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_70.tif', 32, 32, 1, gdal.GDT_Int16, options=['SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_70.tif", 32, 32, 1, gdal.GDT_Int16, options=["SPARSE_OK=YES"]
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
- assert os.stat('tmp/tiff_write_70.tif').st_size <= 8, \
- 'directory should not be crystallized'
+ assert (
+ os.stat("tmp/tiff_write_70.tif").st_size <= 8
+ ), "directory should not be crystallized"
ds = None
- ds = gdal.Open('tmp/tiff_write_70.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_70.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetNoDataValue(-32768)
ds = None
- ds = gdal.Open('tmp/tiff_write_70.tif')
- assert ds.GetRasterBand(1).Checksum() == expected_cs, 'wrong checksum'
+ ds = gdal.Open("tmp/tiff_write_70.tif")
+ assert ds.GetRasterBand(1).Checksum() == expected_cs, "wrong checksum"
ds = None
- ds = gdal.Open('tmp/tiff_write_70.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_70.tif", gdal.GA_Update)
assert ds.GetRasterBand(1).DeleteNoDataValue() == 0
assert ds.GetRasterBand(1).GetNoDataValue() is None
ds = None
with pytest.raises(OSError):
- os.stat('tmp/tiff_write_70.tif.aux.xml')
+ os.stat("tmp/tiff_write_70.tif.aux.xml")
-
- ds = gdal.Open('tmp/tiff_write_70.tif')
+ ds = gdal.Open("tmp/tiff_write_70.tif")
assert ds.GetRasterBand(1).GetNoDataValue() is None
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_70.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_70_ref.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_70.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_70_ref.tif")
###############################################################################
# Test reading in a real BigTIFF file (on filesystems supporting sparse files)
+
def test_tiff_write_71():
# Determine if the filesystem supports sparse files (we don't want to create a real 10 GB
# file !
- if not gdaltest.filesystem_supports_sparse_files('tmp'):
+ if not gdaltest.filesystem_supports_sparse_files("tmp"):
pytest.skip()
- header = open('data/bigtiff_header_extract.tif', 'rb').read()
+ header = open("data/bigtiff_header_extract.tif", "rb").read()
- f = open('tmp/tiff_write_71.tif', 'wb')
+ f = open("tmp/tiff_write_71.tif", "wb")
f.write(header)
# Write StripByteCounts tag
# 100,000 in little endian
for _ in range(100000):
- f.write(b'\xa0\x86\x01\x00\x00\x00\x00\x00')
+ f.write(b"\xa0\x86\x01\x00\x00\x00\x00\x00")
# Write StripOffsets tag
offset = 1600252
for _ in range(100000):
- f.write(struct.pack(' 2180:
print(photometric)
- pytest.fail('did not get expected mean for band1.')
+ pytest.fail("did not get expected mean for band1.")
try:
- compression = dst_ds.GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE')
+ compression = dst_ds.GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE")
except:
- md = dst_ds.GetMetadata('IMAGE_STRUCTURE')
- compression = md['COMPRESSION']
+ md = dst_ds.GetMetadata("IMAGE_STRUCTURE")
+ compression = md["COMPRESSION"]
- if (photometric == 'YCBCR' and compression != 'YCbCr JPEG') or \
- (photometric == 'RGB' and compression != 'JPEG'):
+ if (photometric == "YCBCR" and compression != "YCbCr JPEG") or (
+ photometric == "RGB" and compression != "JPEG"
+ ):
print(('COMPRESSION="%s"' % compression))
- pytest.fail('did not get expected COMPRESSION value')
+ pytest.fail("did not get expected COMPRESSION value")
try:
- nbits = dst_ds.GetRasterBand(3).GetMetadataItem('NBITS', 'IMAGE_STRUCTURE')
+ nbits = dst_ds.GetRasterBand(3).GetMetadataItem("NBITS", "IMAGE_STRUCTURE")
except:
- md = dst_ds.GetRasterBand(3).GetMetadata('IMAGE_STRUCTURE')
- nbits = md['NBITS']
+ md = dst_ds.GetRasterBand(3).GetMetadata("IMAGE_STRUCTURE")
+ nbits = md["NBITS"]
- if nbits != '12':
+ if nbits != "12":
print(photometric)
- pytest.fail('did not get expected NBITS value')
+ pytest.fail("did not get expected NBITS value")
dst_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_74.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_74.tif")
###############################################################################
@@ -2334,11 +2653,12 @@ def test_tiff_write_74():
def test_tiff_write_75():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_75.tif', 1, 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_75.tif", 1, 1, 1)
ds.FlushCache()
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_75.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_75.tif")
+
###############################################################################
# Test generating a G4 band to use the TIFFWriteScanline()
@@ -2346,19 +2666,24 @@ def test_tiff_write_75():
def test_tiff_write_76():
- src_ds = gdal.Open('data/slim_g4.tif')
- compression = src_ds.GetMetadata('IMAGE_STRUCTURE')['COMPRESSION']
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_76.tif', src_ds, options=['BLOCKYSIZE=%d' % src_ds.RasterYSize, 'COMPRESS=' + compression])
+ src_ds = gdal.Open("data/slim_g4.tif")
+ compression = src_ds.GetMetadata("IMAGE_STRUCTURE")["COMPRESSION"]
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_76.tif",
+ src_ds,
+ options=["BLOCKYSIZE=%d" % src_ds.RasterYSize, "COMPRESS=" + compression],
+ )
new_ds = None
- new_ds = gdal.Open('tmp/tiff_write_76.tif')
+ new_ds = gdal.Open("tmp/tiff_write_76.tif")
cs = new_ds.GetRasterBand(1).Checksum()
- assert cs == 3322, 'Got wrong checksum'
+ assert cs == 3322, "Got wrong checksum"
src_ds = None
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_76.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_76.tif")
+
###############################################################################
# Test generating & reading a 8bit all-in-one-strip multiband TIFF (#3904)
@@ -2366,44 +2691,63 @@ def test_tiff_write_76():
def test_tiff_write_77():
- src_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_77_src.tif', 1, 5000, 3)
+ src_ds = gdaltest.tiff_drv.Create("tmp/tiff_write_77_src.tif", 1, 5000, 3)
src_ds.GetRasterBand(2).Fill(255)
- for interleaving in ('PIXEL', 'BAND'):
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_77.tif', src_ds,
- options=['BLOCKYSIZE=%d' % src_ds.RasterYSize,
- 'COMPRESS=LZW',
- 'INTERLEAVE=' + interleaving])
+ for interleaving in ("PIXEL", "BAND"):
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_77.tif",
+ src_ds,
+ options=[
+ "BLOCKYSIZE=%d" % src_ds.RasterYSize,
+ "COMPRESS=LZW",
+ "INTERLEAVE=" + interleaving,
+ ],
+ )
for attempt in range(2):
# Test reading a few samples to check that random reading works
- band_lines = [(1, 0), (1, 5), (1, 3), (2, 10), (1, 100), (2, 1000), (2, 500),
- (1, 500), (2, 500), (2, 4999), (2, 4999), (3, 4999), (1, 4999)]
+ band_lines = [
+ (1, 0),
+ (1, 5),
+ (1, 3),
+ (2, 10),
+ (1, 100),
+ (2, 1000),
+ (2, 500),
+ (1, 500),
+ (2, 500),
+ (2, 4999),
+ (2, 4999),
+ (3, 4999),
+ (1, 4999),
+ ]
for band_line in band_lines:
cs = new_ds.GetRasterBand(band_line[0]).Checksum(0, band_line[1], 1, 1)
if band_line[0] == 2:
expected_cs = 255 % 7
else:
expected_cs = 0 % 7
- assert cs == expected_cs, 'Got wrong checksum'
+ assert cs == expected_cs, "Got wrong checksum"
# Test whole bands
for i in range(3):
cs = new_ds.GetRasterBand(i + 1).Checksum()
expected_cs = src_ds.GetRasterBand(i + 1).Checksum()
- assert cs == expected_cs, 'Got wrong checksum'
+ assert cs == expected_cs, "Got wrong checksum"
if attempt == 0:
new_ds = None
- new_ds = gdal.Open('tmp/tiff_write_77.tif')
+ new_ds = gdal.Open("tmp/tiff_write_77.tif")
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_77.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_77.tif")
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_77_src.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_77_src.tif")
+
###############################################################################
# Test generating & reading a YCbCr JPEG all-in-one-strip multiband TIFF (#3259)
@@ -2412,31 +2756,51 @@ def test_tiff_write_77():
def test_tiff_write_78():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_78_src.tif', 16, 2048, 3)
+ src_ds = gdaltest.tiff_drv.Create("tmp/tiff_write_78_src.tif", 16, 2048, 3)
src_ds.GetRasterBand(2).Fill(255)
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_78.tif', src_ds,
- options=['BLOCKYSIZE=%d' % src_ds.RasterYSize,
- 'COMPRESS=JPEG',
- 'PHOTOMETRIC=YCBCR'])
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_78.tif",
+ src_ds,
+ options=[
+ "BLOCKYSIZE=%d" % src_ds.RasterYSize,
+ "COMPRESS=JPEG",
+ "PHOTOMETRIC=YCBCR",
+ ],
+ )
# Make sure the file is flushed so that we re-read from it rather from cached blocks
new_ds.FlushCache()
# new_ds = None
# new_ds = gdal.Open('tmp/tiff_write_78.tif')
- if 'GetBlockSize' in dir(gdal.Band):
+ if "GetBlockSize" in dir(gdal.Band):
(_, blocky) = new_ds.GetRasterBand(1).GetBlockSize()
if blocky != 1:
- print('')
- print('using regular band (libtiff <= 3.9.2 or <= 4.0.0beta5, or SplitBand disabled by config option)')
+ print("")
+ print(
+ "using regular band (libtiff <= 3.9.2 or <= 4.0.0beta5, or SplitBand disabled by config option)"
+ )
# Test reading a few samples to check that random reading works
- band_lines = [(1, 0), (1, 5), (1, 3), (2, 10), (1, 100), (2, 1000), (2, 500),
- (1, 500), (2, 500), (2, 2047), (2, 2047), (3, 2047), (1, 2047)]
+ band_lines = [
+ (1, 0),
+ (1, 5),
+ (1, 3),
+ (2, 10),
+ (1, 100),
+ (2, 1000),
+ (2, 500),
+ (1, 500),
+ (2, 500),
+ (2, 2047),
+ (2, 2047),
+ (3, 2047),
+ (1, 2047),
+ ]
for band_line in band_lines:
cs = new_ds.GetRasterBand(band_line[0]).Checksum(0, band_line[1], 1, 1)
if band_line[0] == 1:
@@ -2449,7 +2813,7 @@ def test_tiff_write_78():
expected_cs = 1 % 7
if cs != expected_cs:
print(band_line)
- pytest.fail('Got wrong checksum')
+ pytest.fail("Got wrong checksum")
# Test whole bands
for i in range(3):
@@ -2459,13 +2823,14 @@ def test_tiff_write_78():
# We should expect 0, but due to JPEG YCbCr compression & decompression,
# this ends up being 32768
expected_cs = 32768
- assert cs == expected_cs, 'Got wrong checksum'
+ assert cs == expected_cs, "Got wrong checksum"
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_78.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_78.tif")
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_78_src.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_78_src.tif")
+
###############################################################################
# Test reading & updating GDALMD_AREA_OR_POINT (#3522)
@@ -2473,66 +2838,75 @@ def test_tiff_write_78():
def test_tiff_write_79():
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_79.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_79.tif", 1, 1)
srs = osr.SpatialReference()
- srs.SetFromUserInput('EPSG:32601')
+ srs.SetFromUserInput("EPSG:32601")
ds.SetProjection(srs.ExportToWkt())
ds = None
for do_projection_ref in [False, True]:
for check_just_after in [False, True]:
- ds = gdal.Open('tmp/tiff_write_79.tif')
+ ds = gdal.Open("tmp/tiff_write_79.tif")
if do_projection_ref:
ds.GetProjectionRef()
- mdi = ds.GetMetadataItem('AREA_OR_POINT')
- assert mdi == 'Area', \
- ('(1) did not get expected value. do_projection_ref = %d, check_just_after = %d' % (do_projection_ref, check_just_after))
+ mdi = ds.GetMetadataItem("AREA_OR_POINT")
+ assert mdi == "Area", (
+ "(1) did not get expected value. do_projection_ref = %d, check_just_after = %d"
+ % (do_projection_ref, check_just_after)
+ )
ds = None
# Now update to 'Point'
- ds = gdal.Open('tmp/tiff_write_79.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_79.tif", gdal.GA_Update)
if do_projection_ref:
ds.GetProjectionRef()
- ds.SetMetadataItem('AREA_OR_POINT', 'Point')
+ ds.SetMetadataItem("AREA_OR_POINT", "Point")
if check_just_after:
- mdi = ds.GetMetadataItem('AREA_OR_POINT')
- assert mdi == 'Point', \
- ('(3) did not get expected value. do_projection_ref = %d, check_just_after = %d' % (do_projection_ref, check_just_after))
+ mdi = ds.GetMetadataItem("AREA_OR_POINT")
+ assert mdi == "Point", (
+ "(3) did not get expected value. do_projection_ref = %d, check_just_after = %d"
+ % (do_projection_ref, check_just_after)
+ )
ds = None
- assert not os.path.exists('tmp/tiff_write_79.tif.aux.xml')
+ assert not os.path.exists("tmp/tiff_write_79.tif.aux.xml")
# Now should get 'Point'
- ds = gdal.Open('tmp/tiff_write_79.tif')
+ ds = gdal.Open("tmp/tiff_write_79.tif")
if do_projection_ref:
ds.GetProjectionRef()
- mdi = ds.GetMetadataItem('AREA_OR_POINT')
- assert mdi == 'Point', \
- ('(4) did not get expected value. do_projection_ref = %d, check_just_after = %d' % (do_projection_ref, check_just_after))
+ mdi = ds.GetMetadataItem("AREA_OR_POINT")
+ assert mdi == "Point", (
+ "(4) did not get expected value. do_projection_ref = %d, check_just_after = %d"
+ % (do_projection_ref, check_just_after)
+ )
ds = None
# Now update back to 'Area' through SetMetadata()
- ds = gdal.Open('tmp/tiff_write_79.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_79.tif", gdal.GA_Update)
if do_projection_ref:
ds.GetProjectionRef()
md = {}
- md['AREA_OR_POINT'] = 'Area'
+ md["AREA_OR_POINT"] = "Area"
ds.SetMetadata(md)
if check_just_after:
- mdi = ds.GetMetadataItem('AREA_OR_POINT')
- assert mdi == 'Area', \
- ('(5) did not get expected value. do_projection_ref = %d, check_just_after = %d' % (do_projection_ref, check_just_after))
+ mdi = ds.GetMetadataItem("AREA_OR_POINT")
+ assert mdi == "Area", (
+ "(5) did not get expected value. do_projection_ref = %d, check_just_after = %d"
+ % (do_projection_ref, check_just_after)
+ )
ds = None
# Now should get 'Area'
- ds = gdal.Open('tmp/tiff_write_79.tif')
+ ds = gdal.Open("tmp/tiff_write_79.tif")
if do_projection_ref:
ds.GetProjectionRef()
- mdi = ds.GetMetadataItem('AREA_OR_POINT')
- assert mdi == 'Area', '(6) did not get expected value'
+ mdi = ds.GetMetadataItem("AREA_OR_POINT")
+ assert mdi == "Area", "(6) did not get expected value"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_79.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_79.tif")
+
###############################################################################
# Test SetOffset() & SetScale()
@@ -2541,87 +2915,92 @@ def test_tiff_write_79():
def test_tiff_write_80():
# First part : test storing and retrieving scale & offsets from internal metadata
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_80.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_80.tif", 1, 1)
ds.GetRasterBand(1).SetScale(100)
ds.GetRasterBand(1).SetOffset(1000)
ds = None
- assert not os.path.exists('tmp/tiff_write_80.tif.aux.xml')
+ assert not os.path.exists("tmp/tiff_write_80.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_80.tif')
+ ds = gdal.Open("tmp/tiff_write_80.tif")
scale = ds.GetRasterBand(1).GetScale()
offset = ds.GetRasterBand(1).GetOffset()
- assert scale == 100 and offset == 1000, \
- 'did not get expected values in internal case (1)'
+ assert (
+ scale == 100 and offset == 1000
+ ), "did not get expected values in internal case (1)"
ds = None
# Test CreateCopy()
- src_ds = gdal.Open('tmp/tiff_write_80.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_80_copy.tif', src_ds)
+ src_ds = gdal.Open("tmp/tiff_write_80.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/tiff_write_80_copy.tif", src_ds)
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_80_copy.tif')
+ ds = gdal.Open("tmp/tiff_write_80_copy.tif")
scale = ds.GetRasterBand(1).GetScale()
offset = ds.GetRasterBand(1).GetOffset()
- assert scale == 100 and offset == 1000, 'did not get expected values in copy'
+ assert scale == 100 and offset == 1000, "did not get expected values in copy"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_80_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_80_copy.tif")
# Second part : test unsetting scale & offsets from internal metadata
- ds = gdal.Open('tmp/tiff_write_80.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_80.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetScale(1)
ds.GetRasterBand(1).SetOffset(0)
ds = None
- ds = gdal.Open('tmp/tiff_write_80.tif')
+ ds = gdal.Open("tmp/tiff_write_80.tif")
scale = ds.GetRasterBand(1).GetScale()
offset = ds.GetRasterBand(1).GetOffset()
assert not scale
assert not offset
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_80.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_80.tif")
# Third part : test storing and retrieving scale & offsets from PAM metadata
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_80_bis.tif', 1, 1)
- assert ds.GetRasterBand(1).GetScale() is None and ds.GetRasterBand(1).GetOffset() is None, \
- 'expected None values'
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_80_bis.tif", 1, 1)
+ assert (
+ ds.GetRasterBand(1).GetScale() is None
+ and ds.GetRasterBand(1).GetOffset() is None
+ ), "expected None values"
ds = None
- ds = gdal.Open('tmp/tiff_write_80_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_80_bis.tif")
ds.GetRasterBand(1).SetScale(-100)
ds.GetRasterBand(1).SetOffset(-1000)
ds = None
try:
# check that it *goes* to PAM
- os.stat('tmp/tiff_write_80_bis.tif.aux.xml')
+ os.stat("tmp/tiff_write_80_bis.tif.aux.xml")
except OSError:
- pytest.fail('did not go to PAM as expected')
+ pytest.fail("did not go to PAM as expected")
- ds = gdal.Open('tmp/tiff_write_80_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_80_bis.tif")
scale = ds.GetRasterBand(1).GetScale()
offset = ds.GetRasterBand(1).GetOffset()
- assert scale == -100 and offset == -1000, \
- 'did not get expected values in PAM case (1)'
+ assert (
+ scale == -100 and offset == -1000
+ ), "did not get expected values in PAM case (1)"
ds = None
# Fourth part : test unsetting scale & offsets from PAM metadata
- ds = gdal.Open('tmp/tiff_write_80_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_80_bis.tif")
ds.GetRasterBand(1).SetScale(1)
ds.GetRasterBand(1).SetOffset(0)
ds = None
- assert not os.path.exists('tmp/tiff_write_80_bis.tif.aux.xml')
+ assert not os.path.exists("tmp/tiff_write_80_bis.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_80_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_80_bis.tif")
scale = ds.GetRasterBand(1).GetScale()
offset = ds.GetRasterBand(1).GetOffset()
assert not scale
assert not offset
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_80_bis.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_80_bis.tif")
+
###############################################################################
# Test retrieving GCP from PAM
@@ -2629,9 +3008,10 @@ def test_tiff_write_80():
def test_tiff_write_81():
- shutil.copyfile('data/byte.tif', 'tmp/tiff_write_81.tif')
- f = open('tmp/tiff_write_81.tif.aux.xml', 'wt')
- f.write("""
+ shutil.copyfile("data/byte.tif", "tmp/tiff_write_81.tif")
+ f = open("tmp/tiff_write_81.tif.aux.xml", "wt")
+ f.write(
+ """
@@ -2639,20 +3019,23 @@ def test_tiff_write_81():
-""")
+
"""
+ )
f.close()
- ds = gdal.Open('tmp/tiff_write_81.tif')
+ ds = gdal.Open("tmp/tiff_write_81.tif")
- assert (ds.GetGCPProjection().find(
- 'AUTHORITY["EPSG","26711"]') != -1), 'GCP Projection not set properly.'
+ assert (
+ ds.GetGCPProjection().find('AUTHORITY["EPSG","26711"]') != -1
+ ), "GCP Projection not set properly."
gcps = ds.GetGCPs()
- assert len(gcps) == 4, 'GCP count wrong.'
+ assert len(gcps) == 4, "GCP count wrong."
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_81.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_81.tif")
+
###############################################################################
# Test writing & reading a signedbyte 8 bit geotiff
@@ -2660,26 +3043,29 @@ def test_tiff_write_81():
def test_tiff_write_82():
- src_ds = gdal.Open('data/byte.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_82.tif', src_ds, options=['PIXELTYPE=SIGNEDBYTE'])
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_82.tif", src_ds, options=["PIXELTYPE=SIGNEDBYTE"]
+ )
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_82.tif')
- md = ds.GetRasterBand(1).GetMetadata('IMAGE_STRUCTURE')
- assert md['PIXELTYPE'] == 'SIGNEDBYTE', 'did not get SIGNEDBYTE'
+ ds = gdal.Open("tmp/tiff_write_82.tif")
+ md = ds.GetRasterBand(1).GetMetadata("IMAGE_STRUCTURE")
+ assert md["PIXELTYPE"] == "SIGNEDBYTE", "did not get SIGNEDBYTE"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_82.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_82.tif")
###############################################################################
# Test writing & reading an indexed GeoTIFF with an extra transparency band (#3547)
+
def test_tiff_write_83():
# Test Create() method
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_83.tif', 1, 1, 2)
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_83.tif", 1, 1, 2)
ct = gdal.ColorTable()
ct.SetColorEntry(127, (255, 255, 255, 255))
ds.GetRasterBand(1).SetRasterColorTable(ct)
@@ -2688,24 +3074,29 @@ def test_tiff_write_83():
ds = None
# Test CreateCopy() method
- src_ds = gdal.Open('tmp/tiff_write_83.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_83_2.tif', src_ds)
+ src_ds = gdal.Open("tmp/tiff_write_83.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/tiff_write_83_2.tif", src_ds)
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_83_2.tif')
+ ds = gdal.Open("tmp/tiff_write_83_2.tif")
ct2 = ds.GetRasterBand(1).GetRasterColorTable()
- assert ct2.GetColorEntry(127) == (255, 255, 255, 255), \
- 'did not get expected color table'
+ assert ct2.GetColorEntry(127) == (
+ 255,
+ 255,
+ 255,
+ 255,
+ ), "did not get expected color table"
ct2 = None
cs1 = ds.GetRasterBand(1).Checksum()
- assert cs1 == 127 % 7, 'did not get expected checksum for band 1'
+ assert cs1 == 127 % 7, "did not get expected checksum for band 1"
cs2 = ds.GetRasterBand(2).Checksum()
- assert cs2 == 255 % 7, 'did not get expected checksum for band 2'
+ assert cs2 == 255 % 7, "did not get expected checksum for band 2"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_83.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_83_2.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_83.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_83_2.tif")
+
###############################################################################
# Test propagation of non-standard JPEG quality when the current directory
@@ -2716,30 +3107,31 @@ def test_tiff_write_84():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
with gdaltest.SetCacheMax(0):
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_84.tif', 128, 128, 3)
+ ds = gdal.GetDriverByName("GTiff").Create("tmp/tiff_write_84.tif", 128, 128, 3)
ds = None
try:
- os.remove('tmp/tiff_write_84.tif.ovr')
+ os.remove("tmp/tiff_write_84.tif.ovr")
except OSError:
pass
- ds = gdal.Open('tmp/tiff_write_84.tif')
- gdal.SetConfigOption('COMPRESS_OVERVIEW', 'JPEG')
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', '90')
- ds.BuildOverviews('NEAREST', overviewlist=[2])
+ ds = gdal.Open("tmp/tiff_write_84.tif")
+ gdal.SetConfigOption("COMPRESS_OVERVIEW", "JPEG")
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", "90")
+ ds.BuildOverviews("NEAREST", overviewlist=[2])
cs = ds.GetRasterBand(2).GetOverview(0).Checksum()
ds = None
- gdal.SetConfigOption('COMPRESS_OVERVIEW', None)
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', None)
+ gdal.SetConfigOption("COMPRESS_OVERVIEW", None)
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", None)
+
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_84.tif")
- gdaltest.tiff_drv.Delete('tmp/tiff_write_84.tif')
+ assert cs == 0, "did not get expected checksum"
- assert cs == 0, 'did not get expected checksum'
###############################################################################
# Test SetUnitType()
@@ -2748,73 +3140,74 @@ def test_tiff_write_84():
def test_tiff_write_85():
# First part : test storing and retrieving unittype from internal metadata
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_85.tif', 1, 1)
- ds.GetRasterBand(1).SetUnitType('ft')
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_85.tif", 1, 1)
+ ds.GetRasterBand(1).SetUnitType("ft")
ds = None
- assert not os.path.exists('tmp/tiff_write_85.tif.aux.xml')
+ assert not os.path.exists("tmp/tiff_write_85.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_85.tif')
+ ds = gdal.Open("tmp/tiff_write_85.tif")
unittype = ds.GetRasterBand(1).GetUnitType()
- assert unittype == 'ft', 'did not get expected values in internal case (1)'
+ assert unittype == "ft", "did not get expected values in internal case (1)"
ds = None
# Test CreateCopy()
- src_ds = gdal.Open('tmp/tiff_write_85.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_85_copy.tif', src_ds)
+ src_ds = gdal.Open("tmp/tiff_write_85.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/tiff_write_85_copy.tif", src_ds)
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_85_copy.tif')
+ ds = gdal.Open("tmp/tiff_write_85_copy.tif")
unittype = ds.GetRasterBand(1).GetUnitType()
- assert unittype == 'ft', 'did not get expected values in copy'
+ assert unittype == "ft", "did not get expected values in copy"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_85_copy.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_85_copy.tif")
# Second part : test unsetting unittype from internal metadata
- ds = gdal.Open('tmp/tiff_write_85.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/tiff_write_85.tif", gdal.GA_Update)
ds.GetRasterBand(1).SetUnitType(None)
ds = None
- ds = gdal.Open('tmp/tiff_write_85.tif')
+ ds = gdal.Open("tmp/tiff_write_85.tif")
unittype = ds.GetRasterBand(1).GetUnitType()
- assert unittype == '', 'did not get expected values in internal case (2)'
+ assert unittype == "", "did not get expected values in internal case (2)"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_85.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_85.tif")
# Third part : test storing and retrieving unittype from PAM metadata
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_85_bis.tif', 1, 1)
- assert not ds.GetRasterBand(1).GetUnitType(), 'expected None values'
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_85_bis.tif", 1, 1)
+ assert not ds.GetRasterBand(1).GetUnitType(), "expected None values"
ds = None
- ds = gdal.Open('tmp/tiff_write_85_bis.tif')
- ds.GetRasterBand(1).SetUnitType('ft')
+ ds = gdal.Open("tmp/tiff_write_85_bis.tif")
+ ds.GetRasterBand(1).SetUnitType("ft")
ds = None
try:
# check that it *goes* to PAM
- os.stat('tmp/tiff_write_85_bis.tif.aux.xml')
+ os.stat("tmp/tiff_write_85_bis.tif.aux.xml")
except OSError:
- pytest.fail('did not go to PAM as expected')
+ pytest.fail("did not go to PAM as expected")
- ds = gdal.Open('tmp/tiff_write_85_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_85_bis.tif")
unittype = ds.GetRasterBand(1).GetUnitType()
- assert unittype == 'ft', 'did not get expected values in PAM case (1)'
+ assert unittype == "ft", "did not get expected values in PAM case (1)"
ds = None
# Fourth part : test unsetting unittype from PAM metadata
- ds = gdal.Open('tmp/tiff_write_85_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_85_bis.tif")
ds.GetRasterBand(1).SetUnitType(None)
ds = None
- assert not os.path.exists('tmp/tiff_write_85_bis.tif.aux.xml')
+ assert not os.path.exists("tmp/tiff_write_85_bis.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_85_bis.tif')
+ ds = gdal.Open("tmp/tiff_write_85_bis.tif")
unittype = ds.GetRasterBand(1).GetUnitType()
- assert unittype == '', 'did not get expected values in PAM case (2)'
+ assert unittype == "", "did not get expected values in PAM case (2)"
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_85_bis.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_85_bis.tif")
+
###############################################################################
# Test special handling of xml:ESRI domain. When the ESRI_XML_PAM config
@@ -2825,111 +3218,125 @@ def test_tiff_write_85():
def test_tiff_write_86():
- gdal.SetConfigOption('ESRI_XML_PAM', 'YES')
+ gdal.SetConfigOption("ESRI_XML_PAM", "YES")
- ds = gdaltest.tiff_drv.Create('tmp/tiff_write_86.tif', 100, 100,
- 1, gdal.GDT_Byte)
- ds.SetMetadata([''], 'xml:ESRI')
- ds.SetMetadataItem('BaseTest', 'Value')
+ ds = gdaltest.tiff_drv.Create("tmp/tiff_write_86.tif", 100, 100, 1, gdal.GDT_Byte)
+ ds.SetMetadata([""], "xml:ESRI")
+ ds.SetMetadataItem("BaseTest", "Value")
ds = None
# Is the xml:ESRI data available?
- ds = gdal.Open('tmp/tiff_write_86.tif')
- assert ds.GetMetadata('xml:ESRI') == ['\n'], \
- 'did not get expected xml:ESRI metadata.'
+ ds = gdal.Open("tmp/tiff_write_86.tif")
+ assert ds.GetMetadata("xml:ESRI") == [
+ "\n"
+ ], "did not get expected xml:ESRI metadata."
- if ds.GetMetadataItem('BaseTest') != 'Value':
- gdaltest.post_value('missing metadata(1)')
+ if ds.GetMetadataItem("BaseTest") != "Value":
+ gdaltest.post_value("missing metadata(1)")
pytest.fail()
ds = None
# After removing the pam file is it gone, but the conventional
# metadata still available?
- os.rename('tmp/tiff_write_86.tif.aux.xml',
- 'tmp/tiff_write_86.tif.aux.xml.hidden')
+ os.rename("tmp/tiff_write_86.tif.aux.xml", "tmp/tiff_write_86.tif.aux.xml.hidden")
- ds = gdal.Open('tmp/tiff_write_86.tif')
- assert ds.GetMetadata('xml:ESRI') is None, 'unexpectedly got xml:ESRI metadata'
+ ds = gdal.Open("tmp/tiff_write_86.tif")
+ assert ds.GetMetadata("xml:ESRI") is None, "unexpectedly got xml:ESRI metadata"
- if ds.GetMetadataItem('BaseTest') != 'Value':
- gdaltest.post_value('missing metadata(2)')
+ if ds.GetMetadataItem("BaseTest") != "Value":
+ gdaltest.post_value("missing metadata(2)")
pytest.fail()
ds = None
# now confirm that CreateCopy also preserves things similarly.
- os.rename('tmp/tiff_write_86.tif.aux.xml.hidden',
- 'tmp/tiff_write_86.tif.aux.xml')
+ os.rename("tmp/tiff_write_86.tif.aux.xml.hidden", "tmp/tiff_write_86.tif.aux.xml")
- ds_src = gdal.Open('tmp/tiff_write_86.tif')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_86_cc.tif', ds_src)
+ ds_src = gdal.Open("tmp/tiff_write_86.tif")
+ ds = gdaltest.tiff_drv.CreateCopy("tmp/tiff_write_86_cc.tif", ds_src)
ds_src = None
ds = None
# Is the xml:ESRI data available?
- ds = gdal.Open('tmp/tiff_write_86_cc.tif')
- assert ds.GetMetadata('xml:ESRI') == ['\n'], \
- 'did not get expected xml:ESRI metadata (cc).'
+ ds = gdal.Open("tmp/tiff_write_86_cc.tif")
+ assert ds.GetMetadata("xml:ESRI") == [
+ "\n"
+ ], "did not get expected xml:ESRI metadata (cc)."
- if ds.GetMetadataItem('BaseTest') != 'Value':
- gdaltest.post_value('missing metadata(1cc)')
+ if ds.GetMetadataItem("BaseTest") != "Value":
+ gdaltest.post_value("missing metadata(1cc)")
pytest.fail()
ds = None
# After removing the pam file is it gone, but the conventional
# metadata still available?
- os.remove('tmp/tiff_write_86_cc.tif.aux.xml')
+ os.remove("tmp/tiff_write_86_cc.tif.aux.xml")
- ds = gdal.Open('tmp/tiff_write_86_cc.tif')
- assert ds.GetMetadata('xml:ESRI') is None, 'unexpectedly got xml:ESRI metadata(2)'
+ ds = gdal.Open("tmp/tiff_write_86_cc.tif")
+ assert ds.GetMetadata("xml:ESRI") is None, "unexpectedly got xml:ESRI metadata(2)"
- if ds.GetMetadataItem('BaseTest') != 'Value':
- gdaltest.post_value('missing metadata(2cc)')
+ if ds.GetMetadataItem("BaseTest") != "Value":
+ gdaltest.post_value("missing metadata(2cc)")
pytest.fail()
ds = None
# Cleanup
- gdal.SetConfigOption('ESRI_XML_PAM', 'NO')
+ gdal.SetConfigOption("ESRI_XML_PAM", "NO")
- gdaltest.tiff_drv.Delete('tmp/tiff_write_86.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_86_cc.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_86.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_86_cc.tif")
###############################################################################
# Test COPY_SRC_OVERVIEWS creation option
+
def test_tiff_write_87():
- gdal.Translate('tmp/tiff_write_87_src.tif', 'data/utmsmall.tif', options='-a_nodata 0')
+ gdal.Translate(
+ "tmp/tiff_write_87_src.tif", "data/utmsmall.tif", options="-a_nodata 0"
+ )
- src_ds = gdal.Open('tmp/tiff_write_87_src.tif', gdal.GA_Update)
- src_ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ src_ds = gdal.Open("tmp/tiff_write_87_src.tif", gdal.GA_Update)
+ src_ds.BuildOverviews("NEAR", overviewlist=[2, 4])
expected_cs1 = src_ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs2 = src_ds.GetRasterBand(1).GetOverview(1).Checksum()
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_87_dst.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES', 'ENDIANNESS=LITTLE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_87_dst.tif",
+ src_ds,
+ options=["COPY_SRC_OVERVIEWS=YES", "ENDIANNESS=LITTLE"],
+ )
ds = None
src_ds = None
- ds = gdal.Open('tmp/tiff_write_87_dst.tif')
+ ds = gdal.Open("tmp/tiff_write_87_dst.tif")
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
nodata_ovr_0 = ds.GetRasterBand(1).GetOverview(0).GetNoDataValue()
nodata_ovr_1 = ds.GetRasterBand(1).GetOverview(1).GetNoDataValue()
- ifd_main = int(ds.GetRasterBand(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- ifd_ovr_0 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- ifd_ovr_1 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- data_ovr_1 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- data_ovr_0 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- data_main = int(ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- size_main = int(ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_0', 'TIFF'))
- with open('tmp/tiff_write_87_dst.tif', 'rb') as f:
+ ifd_main = int(ds.GetRasterBand(1).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ ifd_ovr_0 = int(
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ ifd_ovr_1 = int(
+ ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ data_ovr_1 = int(
+ ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ )
+ data_ovr_0 = int(
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ )
+ data_main = int(ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF"))
+ size_main = int(ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_0", "TIFF"))
+ with open("tmp/tiff_write_87_dst.tif", "rb") as f:
f.seek(data_main - 4)
- size_from_header = struct.unpack(' 4.2 GB without SPARSE_OK
- src_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_88_src.tif', 60000, 60000, 1,
- options=['TILED=YES', 'SPARSE_OK=YES'])
- src_ds.BuildOverviews('NONE', overviewlist=[2, 4])
+ src_ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_88_src.tif",
+ 60000,
+ 60000,
+ 1,
+ options=["TILED=YES", "SPARSE_OK=YES"],
+ )
+ src_ds.BuildOverviews("NONE", overviewlist=[2, 4])
# Just write one data block so that we can truncate it
data = src_ds.GetRasterBand(1).GetOverview(1).ReadRaster(0, 0, 128, 128)
src_ds.GetRasterBand(1).GetOverview(1).WriteRaster(0, 0, 128, 128, data)
@@ -2968,40 +3387,47 @@ def test_tiff_write_88():
# Truncate the file to cause an I/O error on reading
# so that the CreateCopy() aborts quickly
- f = open('tmp/tiff_write_88_src.tif', 'rb')
+ f = open("tmp/tiff_write_88_src.tif", "rb")
f.seek(0, 2)
length = f.tell()
f.seek(0, 0)
data = f.read(length - 1)
f.close()
- f = open('tmp/tiff_write_88_src.tif', 'wb')
+ f = open("tmp/tiff_write_88_src.tif", "wb")
f.write(data)
f.close()
- src_ds = gdal.Open('tmp/tiff_write_88_src.tif')
+ src_ds = gdal.Open("tmp/tiff_write_88_src.tif")
# for testing only. We need to keep the file to check it was a bigtiff
- gdal.SetConfigOption('GTIFF_DELETE_ON_ERROR', 'NO')
- gdal.SetConfigOption('CHECK_DISK_FREE_SPACE', 'NO') # we don't want free space to be an issue here
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_88_dst.tif', src_ds,
- options=['TILED=YES', 'COPY_SRC_OVERVIEWS=YES', 'ENDIANNESS=LITTLE'])
+ gdal.SetConfigOption("GTIFF_DELETE_ON_ERROR", "NO")
+ gdal.SetConfigOption(
+ "CHECK_DISK_FREE_SPACE", "NO"
+ ) # we don't want free space to be an issue here
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_88_dst.tif",
+ src_ds,
+ options=["TILED=YES", "COPY_SRC_OVERVIEWS=YES", "ENDIANNESS=LITTLE"],
+ )
gdal.PopErrorHandler()
- gdal.SetConfigOption('GTIFF_DELETE_ON_ERROR', None)
- gdal.SetConfigOption('CHECK_DISK_FREE_SPACE', None)
+ gdal.SetConfigOption("GTIFF_DELETE_ON_ERROR", None)
+ gdal.SetConfigOption("CHECK_DISK_FREE_SPACE", None)
del ds
src_ds = None
- f = open('tmp/tiff_write_88_dst.tif', 'rb')
+ f = open("tmp/tiff_write_88_dst.tif", "rb")
data = f.read(8)
f.close()
- os.remove('tmp/tiff_write_88_src.tif')
- os.remove('tmp/tiff_write_88_dst.tif')
+ os.remove("tmp/tiff_write_88_src.tif")
+ os.remove("tmp/tiff_write_88_dst.tif")
+
+ ar = struct.unpack("B" * 8, data)
+ assert ar[2] == 43, "not a BIGTIFF file"
+ assert (
+ ar[4] == 8 and ar[5] == 0 and ar[6] == 0 and ar[7] == 0
+ ), "first IFD is not at offset 8"
- ar = struct.unpack('B' * 8, data)
- assert ar[2] == 43, 'not a BIGTIFF file'
- assert ar[4] == 8 and ar[5] == 0 and ar[6] == 0 and ar[7] == 0, \
- 'first IFD is not at offset 8'
###############################################################################
# Test JPEG_QUALITY propagation while creating a (default compressed) mask band
@@ -3009,19 +3435,24 @@ def test_tiff_write_88():
def test_tiff_write_89():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
last_size = 0
for quality in [90, 75, 30]:
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_89.tif', 1024, 1024, 3,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEG_QUALITY=%d' % quality])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_89.tif",
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEG_QUALITY=%d" % quality],
+ )
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', 'YES')
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", "YES")
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', None)
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", None)
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3038,7 +3469,7 @@ def test_tiff_write_89():
except AttributeError:
os.SEEK_END = 2
- f = open('tmp/tiff_write_89.tif', 'rb')
+ f = open("tmp/tiff_write_89.tif", "rb")
f.seek(0, os.SEEK_END)
size = f.tell()
f.close()
@@ -3046,11 +3477,12 @@ def test_tiff_write_89():
# print('quality = %d, size = %d' % (quality, size))
if quality != 90:
- assert size < last_size, 'did not get decreasing file sizes'
+ assert size < last_size, "did not get decreasing file sizes"
last_size = size
- gdaltest.tiff_drv.Delete('tmp/tiff_write_89.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_89.tif")
+
###############################################################################
# Test JPEG_QUALITY propagation/override while creating (internal) overviews
@@ -3058,17 +3490,22 @@ def test_tiff_write_89():
def test_tiff_write_90():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
checksums = {}
- qualities = [90,75,75]
+ qualities = [90, 75, 75]
for i, quality in enumerate(qualities):
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- fname = 'tmp/tiff_write_90_%d' % i
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ fname = "tmp/tiff_write_90_%d" % i
- ds = gdal.GetDriverByName('GTiff').Create(fname, 1024, 1024, 3,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEG_QUALITY=%d' % quality])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname,
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEG_QUALITY=%d" % quality],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3076,16 +3513,18 @@ def test_tiff_write_90():
ds.GetRasterBand(3).WriteRaster(0, 0, 1024, 1024, data)
if i == 2:
quality = 30
- with gdaltest.config_option('JPEG_QUALITY_OVERVIEW', '%d'%quality):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ with gdaltest.config_option("JPEG_QUALITY_OVERVIEW", "%d" % quality):
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
src_ds = None
ds = None
ds = gdal.Open(fname)
- checksums[i] = [ ds.GetRasterBand(1).Checksum(),
- ds.GetRasterBand(1).GetOverview(0).Checksum(),
- ds.GetRasterBand(1).GetOverview(1).Checksum() ]
+ checksums[i] = [
+ ds.GetRasterBand(1).Checksum(),
+ ds.GetRasterBand(1).GetOverview(0).Checksum(),
+ ds.GetRasterBand(1).GetOverview(1).Checksum(),
+ ]
ds = None
gdaltest.tiff_drv.Delete(fname)
@@ -3101,24 +3540,27 @@ def test_tiff_write_90():
assert checksums[1][1] != checksums[2][1]
assert checksums[1][2] != checksums[2][2]
+
###############################################################################
# Test WEBP_LEVEL propagation and overriding while creating overviews
# on a newly created dataset
+
@pytest.mark.parametrize("external_ovr", [True, False])
def test_tiff_write_90_webp(external_ovr):
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
checksums = {}
- qualities = [90,75,75]
+ qualities = [90, 75, 75]
for i, quality in enumerate(qualities):
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- fname = 'tmp/tiff_write_90_webp_%d' % i
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ fname = "tmp/tiff_write_90_webp_%d" % i
- ds = gdal.GetDriverByName('GTiff').Create(fname, 512, 512, 3,
- options=['COMPRESS=WEBP', 'WEBP_LEVEL=%d' % quality])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname, 512, 512, 3, options=["COMPRESS=WEBP", "WEBP_LEVEL=%d" % quality]
+ )
data = src_ds.GetRasterBand(1).ReadRaster()
ds.GetRasterBand(1).WriteRaster(0, 0, 512, 512, data)
@@ -3130,18 +3572,20 @@ def test_tiff_write_90_webp(external_ovr):
if external_ovr:
ds = None
ds = gdal.Open(fname)
- options['COMPRESS_OVERVIEW'] = 'WEBP'
- options['WEBP_LEVEL_OVERVIEW'] = '%d' % quality
+ options["COMPRESS_OVERVIEW"] = "WEBP"
+ options["WEBP_LEVEL_OVERVIEW"] = "%d" % quality
with gdaltest.config_options(options):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
src_ds = None
ds = None
ds = gdal.Open(fname)
- checksums[i] = [ ds.GetRasterBand(1).Checksum(),
- ds.GetRasterBand(1).GetOverview(0).Checksum(),
- ds.GetRasterBand(1).GetOverview(1).Checksum() ]
+ checksums[i] = [
+ ds.GetRasterBand(1).Checksum(),
+ ds.GetRasterBand(1).GetOverview(0).Checksum(),
+ ds.GetRasterBand(1).GetOverview(1).Checksum(),
+ ]
ds = None
gdaltest.tiff_drv.Delete(fname)
@@ -3161,17 +3605,23 @@ def test_tiff_write_90_webp(external_ovr):
###############################################################################
# Test JPEG_QUALITY propagation while creating (internal) overviews after re-opening
+
def test_tiff_write_91():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
checksums = {}
for quality in [90, 75, 30]:
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_91.tif', 1024, 1024, 3,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEG_QUALITY=%d' % quality])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_91.tif",
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEG_QUALITY=%d" % quality],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3179,22 +3629,23 @@ def test_tiff_write_91():
ds.GetRasterBand(3).WriteRaster(0, 0, 1024, 1024, data)
ds = None
- ds = gdal.Open('tmp/tiff_write_91.tif', gdal.GA_Update)
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', '%d' % quality)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', None)
+ ds = gdal.Open("tmp/tiff_write_91.tif", gdal.GA_Update)
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", "%d" % quality)
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", None)
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_91.tif')
- checksums[quality] = [ ds.GetRasterBand(1).Checksum(),
- ds.GetRasterBand(1).GetOverview(0).Checksum(),
- ds.GetRasterBand(1).GetOverview(1).Checksum() ]
+ ds = gdal.Open("tmp/tiff_write_91.tif")
+ checksums[quality] = [
+ ds.GetRasterBand(1).Checksum(),
+ ds.GetRasterBand(1).GetOverview(0).Checksum(),
+ ds.GetRasterBand(1).GetOverview(1).Checksum(),
+ ]
ds = None
-
- gdaltest.tiff_drv.Delete('tmp/tiff_write_91.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_91.tif")
assert checksums[75][0] != checksums[90][0]
assert checksums[75][1] != checksums[90][1]
@@ -3208,21 +3659,24 @@ def test_tiff_write_91():
assert checksums[90][1] != checksums[30][1]
assert checksums[90][2] != checksums[30][2]
+
###############################################################################
# Test WEBP_LEVEL_OVERVIEW while creating (internal) overviews after re-opening
+
def test_tiff_write_91_webp():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
checksums = {}
for quality in [90, 75, 30]:
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- fname = 'tmp/tiff_write_91_webp_%d' % quality
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ fname = "tmp/tiff_write_91_webp_%d" % quality
- ds = gdal.GetDriverByName('GTiff').Create(fname, 1024, 1024, 3,
- options=['COMPRESS=WEBP'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname, 1024, 1024, 3, options=["COMPRESS=WEBP"]
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3232,15 +3686,17 @@ def test_tiff_write_91_webp():
src_ds = None
ds = gdal.Open(fname, gdal.GA_Update)
- with gdaltest.config_option('WEBP_LEVEL_OVERVIEW', '%d'%quality):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ with gdaltest.config_option("WEBP_LEVEL_OVERVIEW", "%d" % quality):
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
ds = None
ds = gdal.Open(fname)
- checksums[quality] = [ ds.GetRasterBand(1).Checksum(),
- ds.GetRasterBand(1).GetOverview(0).Checksum(),
- ds.GetRasterBand(1).GetOverview(1).Checksum() ]
+ checksums[quality] = [
+ ds.GetRasterBand(1).Checksum(),
+ ds.GetRasterBand(1).GetOverview(0).Checksum(),
+ ds.GetRasterBand(1).GetOverview(1).Checksum(),
+ ]
ds = None
gdaltest.tiff_drv.Delete(fname)
@@ -3257,22 +3713,29 @@ def test_tiff_write_91_webp():
assert checksums[90][1] != checksums[30][1]
assert checksums[90][2] != checksums[30][2]
+
###############################################################################
# Test the effect of JPEG_QUALITY_OVERVIEW while creating (internal) overviews after re-opening
# This will test that we correctly guess the quality of the main dataset
+
def test_tiff_write_92():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
last_size = 0
quality = 30
for jpeg_quality_overview in [False, 30, 40]:
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_92.tif', 1024, 1024, 3,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEG_QUALITY=%d' % quality])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_92.tif",
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEG_QUALITY=%d" % quality],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3280,17 +3743,17 @@ def test_tiff_write_92():
ds.GetRasterBand(3).WriteRaster(0, 0, 1024, 1024, data)
ds = None
- ds = gdal.Open('tmp/tiff_write_92.tif', gdal.GA_Update)
- assert ds.GetMetadataItem('JPEG_QUALITY', 'IMAGE_STRUCTURE') == str(quality)
+ ds = gdal.Open("tmp/tiff_write_92.tif", gdal.GA_Update)
+ assert ds.GetMetadataItem("JPEG_QUALITY", "IMAGE_STRUCTURE") == str(quality)
if jpeg_quality_overview is not False:
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', '%d' % jpeg_quality_overview)
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', None)
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", "%d" % jpeg_quality_overview)
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", None)
src_ds = None
ds = None
- f = open('tmp/tiff_write_92.tif', 'rb')
+ f = open("tmp/tiff_write_92.tif", "rb")
f.seek(0, os.SEEK_END)
size = f.tell()
f.close()
@@ -3298,13 +3761,14 @@ def test_tiff_write_92():
# print('quality = %d, size = %d' % (quality, size))
if jpeg_quality_overview == 30:
- assert size == last_size, 'did not get equal file sizes'
+ assert size == last_size, "did not get equal file sizes"
elif jpeg_quality_overview == 40:
- assert size > last_size, 'did not get growing file sizes'
+ assert size > last_size, "did not get growing file sizes"
last_size = size
- gdaltest.tiff_drv.Delete('tmp/tiff_write_92.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_92.tif")
+
###############################################################################
# Test JPEG_QUALITY_OVERVIEW propagation while creating external overviews
@@ -3312,12 +3776,17 @@ def test_tiff_write_92():
def test_tiff_write_93():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_93.tif', 1024, 1024, 3,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR'])
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_93.tif",
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR"],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
@@ -3331,21 +3800,21 @@ def test_tiff_write_93():
for quality in [90, 75, 30]:
try:
- os.remove('tmp/tiff_write_93.tif.ovr')
+ os.remove("tmp/tiff_write_93.tif.ovr")
except OSError:
pass
- ds = gdal.Open('tmp/tiff_write_93.tif')
- gdal.SetConfigOption('COMPRESS_OVERVIEW', 'JPEG')
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', '%d' % quality)
- gdal.SetConfigOption('PHOTOMETRIC_OVERVIEW', 'YCBCR')
- ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- gdal.SetConfigOption('COMPRESS_OVERVIEW', None)
- gdal.SetConfigOption('JPEG_QUALITY_OVERVIEW', None)
- gdal.SetConfigOption('PHOTOMETRIC_OVERVIEW', None)
+ ds = gdal.Open("tmp/tiff_write_93.tif")
+ gdal.SetConfigOption("COMPRESS_OVERVIEW", "JPEG")
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", "%d" % quality)
+ gdal.SetConfigOption("PHOTOMETRIC_OVERVIEW", "YCBCR")
+ ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ gdal.SetConfigOption("COMPRESS_OVERVIEW", None)
+ gdal.SetConfigOption("JPEG_QUALITY_OVERVIEW", None)
+ gdal.SetConfigOption("PHOTOMETRIC_OVERVIEW", None)
ds = None
- f = open('tmp/tiff_write_93.tif.ovr', 'rb')
+ f = open("tmp/tiff_write_93.tif.ovr", "rb")
f.seek(0, os.SEEK_END)
size = f.tell()
f.close()
@@ -3353,47 +3822,55 @@ def test_tiff_write_93():
# print('quality = %d, size = %d' % (quality, size))
if quality != 90:
- assert size < last_size, 'did not get decreasing file sizes'
+ assert size < last_size, "did not get decreasing file sizes"
- assert not (quality == 30 and size >= 83000), \
- 'file larger than expected. should be about 69100. perhaps jpeg quality is not well propagated'
+ assert not (
+ quality == 30 and size >= 83000
+ ), "file larger than expected. should be about 69100. perhaps jpeg quality is not well propagated"
last_size = size
- gdaltest.tiff_drv.Delete('tmp/tiff_write_93.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_93.tif")
###############################################################################
# Test CreateCopy() of a dataset with a mask into a JPEG compressed dataset
# and check JPEG_QUALITY propagation without warning
+
def test_tiff_write_94():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_94_src.tif', 1024, 1024, 3)
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', 'YES')
+ src_ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_94_src.tif", 1024, 1024, 3
+ )
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", "YES")
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', None)
- src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, '\xff', 1, 1)
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", None)
+ src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, "\xff", 1, 1)
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', 'YES')
- ds = gdal.GetDriverByName('GTiff').CreateCopy('tmp/tiff_write_94_dst.tif', src_ds,
- options=['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEG_QUALITY=30'])
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', None)
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", "YES")
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ "tmp/tiff_write_94_dst.tif",
+ src_ds,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEG_QUALITY=30"],
+ )
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", None)
src_ds = None
ds = None
- ds = gdal.Open('tmp/tiff_write_94_dst.tif')
+ ds = gdal.Open("tmp/tiff_write_94_dst.tif")
cs = ds.GetRasterBand(1).GetMaskBand().Checksum()
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_94_src.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_94_dst.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_94_src.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_94_dst.tif")
+
+ assert cs == 3, "wrong checksum"
- assert cs == 3, 'wrong checksum'
###############################################################################
# Test that COPY_SRC_OVERVIEWS deal well with rounding issues when computing
@@ -3402,62 +3879,88 @@ def test_tiff_write_94():
def test_tiff_write_95():
- src_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_95_src.tif', 7171, 6083, options=['SPARSE_OK=YES'])
- src_ds.BuildOverviews('NONE', overviewlist=[2, 4, 8, 16, 32, 64])
- gdal.SetConfigOption('GTIFF_DONT_WRITE_BLOCKS', 'YES')
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_95_dst.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES'])
- gdal.SetConfigOption('GTIFF_DONT_WRITE_BLOCKS', None)
+ src_ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_95_src.tif", 7171, 6083, options=["SPARSE_OK=YES"]
+ )
+ src_ds.BuildOverviews("NONE", overviewlist=[2, 4, 8, 16, 32, 64])
+ gdal.SetConfigOption("GTIFF_DONT_WRITE_BLOCKS", "YES")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_95_dst.tif", src_ds, options=["COPY_SRC_OVERVIEWS=YES"]
+ )
+ gdal.SetConfigOption("GTIFF_DONT_WRITE_BLOCKS", None)
ok = ds is not None
ds = None
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_95_src.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_95_dst.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_95_src.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_95_dst.tif")
assert ok
+
###############################################################################
# Test that COPY_SRC_OVERVIEWS combined with GDAL_TIFF_INTERNAL_MASK=YES work well
-def test_tiff_write_96(other_options = [], nbands = 1, nbits = 8):
+def test_tiff_write_96(other_options=[], nbands=1, nbits=8):
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', 'YES')
- src_ds = gdaltest.tiff_drv.Create('tmp/tiff_write_96_src.tif', 100, 100, nbands, options = ['NBITS=' + str(nbits)])
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", "YES")
+ src_ds = gdaltest.tiff_drv.Create(
+ "tmp/tiff_write_96_src.tif", 100, 100, nbands, options=["NBITS=" + str(nbits)]
+ )
src_ds.GetRasterBand(1).Fill(255 if nbits == 8 else 127)
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(
- 25, 25, 50, 50, b'\xff', 1, 1)
- src_ds.BuildOverviews('NEAR', overviewlist=[2, 4])
+ src_ds.GetRasterBand(1).GetMaskBand().WriteRaster(25, 25, 50, 50, b"\xff", 1, 1)
+ src_ds.BuildOverviews("NEAR", overviewlist=[2, 4])
expected_cs = src_ds.GetRasterBand(1).Checksum()
expected_cs_mask = src_ds.GetRasterBand(1).GetMaskBand().Checksum()
expected_cs_ovr_1 = src_ds.GetRasterBand(1).GetOverview(0).Checksum()
- expected_cs_ovr_mask_1 = src_ds.GetRasterBand(1).GetOverview(0).GetMaskBand().Checksum()
+ expected_cs_ovr_mask_1 = (
+ src_ds.GetRasterBand(1).GetOverview(0).GetMaskBand().Checksum()
+ )
expected_cs_ovr_2 = src_ds.GetRasterBand(1).GetOverview(1).Checksum()
- expected_cs_ovr_mask_2 = src_ds.GetRasterBand(1).GetOverview(1).GetMaskBand().Checksum()
+ expected_cs_ovr_mask_2 = (
+ src_ds.GetRasterBand(1).GetOverview(1).GetMaskBand().Checksum()
+ )
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_96_dst.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES'] + other_options + ['NBITS=' + str(nbits)])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_96_dst.tif",
+ src_ds,
+ options=["COPY_SRC_OVERVIEWS=YES"] + other_options + ["NBITS=" + str(nbits)],
+ )
ds = None
src_ds = None
- gdal.SetConfigOption('GDAL_TIFF_INTERNAL_MASK', None)
+ gdal.SetConfigOption("GDAL_TIFF_INTERNAL_MASK", None)
- ds = gdal.Open('tmp/tiff_write_96_dst.tif')
+ ds = gdal.Open("tmp/tiff_write_96_dst.tif")
cs = ds.GetRasterBand(1).Checksum()
cs_mask = ds.GetRasterBand(1).GetMaskBand().Checksum()
cs_ovr_1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs_ovr_mask_1 = ds.GetRasterBand(1).GetOverview(0).GetMaskBand().Checksum()
cs_ovr_2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
cs_ovr_mask_2 = ds.GetRasterBand(1).GetOverview(1).GetMaskBand().Checksum()
- assert ds.GetMetadataItem('HAS_USED_READ_ENCODED_API', '_DEBUG_') == '1'
- ds = None
-
- assert [expected_cs, expected_cs_mask, expected_cs_ovr_1, expected_cs_ovr_mask_1, expected_cs_ovr_2, expected_cs_ovr_mask_2] == \
- [cs, cs_mask, cs_ovr_1, cs_ovr_mask_1, cs_ovr_2, cs_ovr_mask_2], \
- 'did not get expected checksums'
+ assert ds.GetMetadataItem("HAS_USED_READ_ENCODED_API", "_DEBUG_") == "1"
+ ds = None
+
+ assert [
+ expected_cs,
+ expected_cs_mask,
+ expected_cs_ovr_1,
+ expected_cs_ovr_mask_1,
+ expected_cs_ovr_2,
+ expected_cs_ovr_mask_2,
+ ] == [
+ cs,
+ cs_mask,
+ cs_ovr_1,
+ cs_ovr_mask_1,
+ cs_ovr_2,
+ cs_ovr_mask_2,
+ ], "did not get expected checksums"
if check_libtiff_internal_or_at_least(4, 0, 11):
- with gdaltest.config_option('GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE', 'YES'):
- ds = gdal.Open('tmp/tiff_write_96_dst.tif')
+ with gdaltest.config_option("GTIFF_HAS_OPTIMIZED_READ_MULTI_RANGE", "YES"):
+ ds = gdal.Open("tmp/tiff_write_96_dst.tif")
cs = ds.GetRasterBand(1).Checksum()
cs_mask = ds.GetRasterBand(1).GetMaskBand().Checksum()
cs_ovr_1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
@@ -3465,23 +3968,50 @@ def test_tiff_write_96(other_options = [], nbands = 1, nbits = 8):
cs_ovr_2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
cs_ovr_mask_2 = ds.GetRasterBand(1).GetOverview(1).GetMaskBand().Checksum()
- assert [expected_cs, expected_cs_mask, expected_cs_ovr_1, expected_cs_ovr_mask_1, expected_cs_ovr_2, expected_cs_ovr_mask_2] == \
- [cs, cs_mask, cs_ovr_1, cs_ovr_mask_1, cs_ovr_2, cs_ovr_mask_2], \
- 'did not get expected checksums'
- assert ds.GetMetadataItem('HAS_USED_READ_ENCODED_API', '_DEBUG_') == '0'
+ assert [
+ expected_cs,
+ expected_cs_mask,
+ expected_cs_ovr_1,
+ expected_cs_ovr_mask_1,
+ expected_cs_ovr_2,
+ expected_cs_ovr_mask_2,
+ ] == [
+ cs,
+ cs_mask,
+ cs_ovr_1,
+ cs_ovr_mask_1,
+ cs_ovr_2,
+ cs_ovr_mask_2,
+ ], "did not get expected checksums"
+ assert ds.GetMetadataItem("HAS_USED_READ_ENCODED_API", "_DEBUG_") == "0"
ds = None
- _check_cog('tmp/tiff_write_96_dst.tif', check_tiled=False, full_check=True)
+ _check_cog("tmp/tiff_write_96_dst.tif", check_tiled=False, full_check=True)
- gdaltest.tiff_drv.Delete('tmp/tiff_write_96_src.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_96_dst.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_96_src.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_96_dst.tif")
def test_tiff_write_96_tiled_threads_nbits7_nbands1():
- return test_tiff_write_96(['TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=32', 'NUM_THREADS=ALL_CPUS'], nbands = 1, nbits = 7)
+ return test_tiff_write_96(
+ ["TILED=YES", "BLOCKXSIZE=16", "BLOCKYSIZE=32", "NUM_THREADS=ALL_CPUS"],
+ nbands=1,
+ nbits=7,
+ )
+
def test_tiff_write_96_tiled_threads_nbits7_nbands2():
- return test_tiff_write_96(['BIGTIFF=YES', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=32', 'NUM_THREADS=ALL_CPUS'], nbands = 2, nbits = 7)
+ return test_tiff_write_96(
+ [
+ "BIGTIFF=YES",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=32",
+ "NUM_THREADS=ALL_CPUS",
+ ],
+ nbands=2,
+ nbits=7,
+ )
###############################################################################
@@ -3493,19 +4023,39 @@ def test_tiff_write_ifd_offsets():
if not check_libtiff_internal_or_at_least(4, 0, 11):
pytest.skip()
- src_ds = gdal.GetDriverByName('MEM').Create('', 100, 100)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 100, 100)
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- src_ds.BuildOverviews('NEAR', overviewlist=[2, 4])
-
- filename = '/vsimem/test_tiff_write_ifd_offsets.tif'
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=['COPY_SRC_OVERVIEWS=YES', 'TILED=YES', 'COMPRESS=LZW'])
- val0_ref = int(ds.GetRasterBand(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val1_ref = int(ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val2_ref = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val3_ref = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val4_ref = int(ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val5_ref = int(ds.GetRasterBand(1).GetOverview(1).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
+ src_ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+
+ filename = "/vsimem/test_tiff_write_ifd_offsets.tif"
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename,
+ src_ds,
+ options=["COPY_SRC_OVERVIEWS=YES", "TILED=YES", "COMPRESS=LZW"],
+ )
+ val0_ref = int(ds.GetRasterBand(1).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ val1_ref = int(
+ ds.GetRasterBand(1).GetMaskBand().GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ val2_ref = int(
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ val3_ref = int(
+ ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ val4_ref = int(
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ val5_ref = int(
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .GetMaskBand()
+ .GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
ds = None
assert val0_ref < val1_ref
@@ -3516,43 +4066,65 @@ def test_tiff_write_ifd_offsets():
assert val5_ref < 1100
# Retry with larger file
- src_ds = gdal.GetDriverByName('MEM').Create('', 4096, 4096)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 4096, 4096)
src_ds.CreateMaskBand(gdal.GMF_PER_DATASET)
- src_ds.BuildOverviews('NEAR', overviewlist=[2, 4])
-
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds = gdal.GetDriverByName('GTiff').CreateCopy(filename, src_ds, options=['COPY_SRC_OVERVIEWS=YES', 'TILED=YES', 'COMPRESS=LZW'])
- val0 = int(ds.GetRasterBand(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val1 = int(ds.GetRasterBand(1).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val2 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val3 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val4 = int(ds.GetRasterBand(1).GetOverview(0).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
- val5 = int(ds.GetRasterBand(1).GetOverview(1).GetMaskBand().GetMetadataItem('IFD_OFFSET', 'TIFF'))
+ src_ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(
+ filename,
+ src_ds,
+ options=["COPY_SRC_OVERVIEWS=YES", "TILED=YES", "COMPRESS=LZW"],
+ )
+ val0 = int(ds.GetRasterBand(1).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ val1 = int(ds.GetRasterBand(1).GetMaskBand().GetMetadataItem("IFD_OFFSET", "TIFF"))
+ val2 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ val3 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ val4 = int(
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMaskBand()
+ .GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ val5 = int(
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .GetMaskBand()
+ .GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
ds = None
# Test rewriting but without changing strile size
ds = gdal.Open(filename, gdal.GA_Update)
ds.GetRasterBand(1).Fill(0)
ds = None
- assert gdal.GetLastErrorMsg() == ''
- f = gdal.VSIFOpenL(filename, 'rb')
- data = gdal.VSIFReadL(1, 1000, f).decode('LATIN1')
+ assert gdal.GetLastErrorMsg() == ""
+ f = gdal.VSIFOpenL(filename, "rb")
+ data = gdal.VSIFReadL(1, 1000, f).decode("LATIN1")
gdal.VSIFCloseL(f)
- assert 'KNOWN_INCOMPATIBLE_EDITION=NO\n ' in data
+ assert "KNOWN_INCOMPATIBLE_EDITION=NO\n " in data
# Test rewriting with changing strile size
ds = gdal.Open(filename, gdal.GA_Update)
- ds.GetRasterBand(1).WriteRaster(0,0,1,1,'x')
+ ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, "x")
ds = None
- assert gdal.GetLastErrorMsg() != ''
- f = gdal.VSIFOpenL(filename, 'rb')
- data = gdal.VSIFReadL(1, 1000, f).decode('LATIN1')
+ assert gdal.GetLastErrorMsg() != ""
+ f = gdal.VSIFOpenL(filename, "rb")
+ data = gdal.VSIFReadL(1, 1000, f).decode("LATIN1")
gdal.VSIFCloseL(f)
- assert 'KNOWN_INCOMPATIBLE_EDITION=YES\n' in data
+ assert "KNOWN_INCOMPATIBLE_EDITION=YES\n" in data
+
+ gdal.GetDriverByName("GTiff").Delete(filename)
- gdal.GetDriverByName('GTiff').Delete(filename)
+ assert (val0_ref, val1_ref, val2_ref, val3_ref, val4_ref, val5_ref) == (
+ val0,
+ val1,
+ val2,
+ val3,
+ val4,
+ val5,
+ )
- assert (val0_ref, val1_ref, val2_ref, val3_ref, val4_ref, val5_ref) == (val0, val1, val2, val3, val4, val5)
###############################################################################
# Create a simple file by copying from an existing one - PixelIsPoint
@@ -3560,60 +4132,63 @@ def test_tiff_write_ifd_offsets():
def test_tiff_write_97():
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'FALSE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "FALSE")
- src_ds = gdal.Open('data/byte_point.tif')
+ src_ds = gdal.Open("data/byte_point.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_97.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_97.tif", src_ds)
gt = new_ds.GetGeoTransform()
- md = new_ds.GetMetadataItem('AREA_OR_POINT')
+ md = new_ds.GetMetadataItem("AREA_OR_POINT")
new_ds = None
gt_expected = (440690.0, 60.0, 0.0, 3751350.0, 0.0, -60.0)
- assert gt == gt_expected, 'did not get expected geotransform'
+ assert gt == gt_expected, "did not get expected geotransform"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
- gdaltest.tiff_drv.Delete('tmp/test_97.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_97.tif")
# Again, but ignoring PixelIsPoint
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', 'TRUE')
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", "TRUE")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_97_2.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_97_2.tif", src_ds)
gt = new_ds.GetGeoTransform()
- md = new_ds.GetMetadataItem('AREA_OR_POINT')
+ md = new_ds.GetMetadataItem("AREA_OR_POINT")
new_ds = None
src_ds = None
gt_expected = (440690.0, 60.0, 0.0, 3751350.0, 0.0, -60.0)
- assert gt == gt_expected, \
- 'did not get expected geotransform when ignoring PixelIsPoint'
+ assert (
+ gt == gt_expected
+ ), "did not get expected geotransform when ignoring PixelIsPoint"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
- gdal.SetConfigOption('GTIFF_POINT_GEO_IGNORE', None)
+ gdal.SetConfigOption("GTIFF_POINT_GEO_IGNORE", None)
# read back this file with pixelispoint behavior enabled.
- new_ds = gdal.Open('tmp/test_97_2.tif')
+ new_ds = gdal.Open("tmp/test_97_2.tif")
gt = new_ds.GetGeoTransform()
- md = new_ds.GetMetadataItem('AREA_OR_POINT')
+ md = new_ds.GetMetadataItem("AREA_OR_POINT")
new_ds = None
gt_expected = (440660.0, 60.0, 0.0, 3751380.0, 0.0, -60.0)
- assert gt == gt_expected, \
- 'did not get expected geotransform when ignoring PixelIsPoint (2)'
+ assert (
+ gt == gt_expected
+ ), "did not get expected geotransform when ignoring PixelIsPoint (2)"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
+
+ gdaltest.tiff_drv.Delete("tmp/test_97_2.tif")
- gdaltest.tiff_drv.Delete('tmp/test_97_2.tif')
###############################################################################
# Create a rotated geotiff file (uses a geomatrix) with - PixelIsPoint
@@ -3621,39 +4196,40 @@ def test_tiff_write_97():
def test_tiff_write_98():
- with gdaltest.config_option('GTIFF_POINT_GEO_IGNORE', 'FALSE'):
- src_ds = gdal.Open('data/geomatrix.tif')
+ with gdaltest.config_option("GTIFF_POINT_GEO_IGNORE", "FALSE"):
+ src_ds = gdal.Open("data/geomatrix.tif")
- with gdaltest.config_option('GTIFF_POINT_GEO_IGNORE', 'TRUE'):
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_98.tif', src_ds)
+ with gdaltest.config_option("GTIFF_POINT_GEO_IGNORE", "TRUE"):
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_98.tif", src_ds)
gt = new_ds.GetGeoTransform()
- md = new_ds.GetMetadataItem('AREA_OR_POINT')
+ md = new_ds.GetMetadataItem("AREA_OR_POINT")
new_ds = None
src_ds = None
gt_expected = (1841001.75, 1.5, -5.0, 1144003.25, -5.0, -1.5)
- assert gt == gt_expected, 'did not get expected geotransform'
+ assert gt == gt_expected, "did not get expected geotransform"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
- with gdaltest.config_option('GTIFF_POINT_GEO_IGNORE', 'FALSE'):
+ with gdaltest.config_option("GTIFF_POINT_GEO_IGNORE", "FALSE"):
- new_ds = gdal.Open('tmp/test_98.tif')
+ new_ds = gdal.Open("tmp/test_98.tif")
gt = new_ds.GetGeoTransform()
- md = new_ds.GetMetadataItem('AREA_OR_POINT')
+ md = new_ds.GetMetadataItem("AREA_OR_POINT")
new_ds = None
src_ds = None
gt_expected = (1841003.5, 1.5, -5.0, 1144006.5, -5.0, -1.5)
- assert gt == gt_expected, 'did not get expected geotransform (2)'
+ assert gt == gt_expected, "did not get expected geotransform (2)"
+
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
+ gdaltest.tiff_drv.Delete("tmp/test_98.tif")
- gdaltest.tiff_drv.Delete('tmp/test_98.tif')
###############################################################################
# Create a rotated geotiff file (uses a geomatrix) with - PixelIsPoint
@@ -3661,54 +4237,61 @@ def test_tiff_write_98():
def test_tiff_write_tiepoints_pixelispoint():
- tmpfilename = '/vsimem/test_tiff_write_tiepoints_pixelispoint.tif'
+ tmpfilename = "/vsimem/test_tiff_write_tiepoints_pixelispoint.tif"
- gdal.Translate(tmpfilename, 'data/byte_gcp_pixelispoint.tif')
+ gdal.Translate(tmpfilename, "data/byte_gcp_pixelispoint.tif")
ds = gdal.Open(tmpfilename)
- assert ds.GetMetadataItem('AREA_OR_POINT') == 'Point'
+ assert ds.GetMetadataItem("AREA_OR_POINT") == "Point"
assert ds.GetGCPCount() == 4
gcp = ds.GetGCPs()[0]
- assert (gcp.GCPPixel == pytest.approx(0.5, abs=1e-5) and \
- gcp.GCPLine == pytest.approx(0.5, abs=1e-5) and \
- gcp.GCPX == pytest.approx(-180, abs=1e-5) and \
- gcp.GCPY == pytest.approx(90, abs=1e-5) and \
- gcp.GCPZ == pytest.approx(0, abs=1e-5))
-
-
- with gdaltest.config_option('GTIFF_POINT_GEO_IGNORE', 'YES'):
- gdal.Translate(tmpfilename, 'data/byte_gcp_pixelispoint.tif')
+ assert (
+ gcp.GCPPixel == pytest.approx(0.5, abs=1e-5)
+ and gcp.GCPLine == pytest.approx(0.5, abs=1e-5)
+ and gcp.GCPX == pytest.approx(-180, abs=1e-5)
+ and gcp.GCPY == pytest.approx(90, abs=1e-5)
+ and gcp.GCPZ == pytest.approx(0, abs=1e-5)
+ )
+
+ with gdaltest.config_option("GTIFF_POINT_GEO_IGNORE", "YES"):
+ gdal.Translate(tmpfilename, "data/byte_gcp_pixelispoint.tif")
ds = gdal.Open(tmpfilename)
- assert ds.GetMetadataItem('AREA_OR_POINT') == 'Point'
+ assert ds.GetMetadataItem("AREA_OR_POINT") == "Point"
assert ds.GetGCPCount() == 4
gcp = ds.GetGCPs()[0]
- assert (gcp.GCPPixel == pytest.approx(0, abs=1e-5) and \
- gcp.GCPLine == pytest.approx(0, abs=1e-5) and \
- gcp.GCPX == pytest.approx(-180, abs=1e-5) and \
- gcp.GCPY == pytest.approx(90, abs=1e-5) and \
- gcp.GCPZ == pytest.approx(0, abs=1e-5))
+ assert (
+ gcp.GCPPixel == pytest.approx(0, abs=1e-5)
+ and gcp.GCPLine == pytest.approx(0, abs=1e-5)
+ and gcp.GCPX == pytest.approx(-180, abs=1e-5)
+ and gcp.GCPY == pytest.approx(90, abs=1e-5)
+ and gcp.GCPZ == pytest.approx(0, abs=1e-5)
+ )
gdal.Unlink(tmpfilename)
+
###############################################################################
# Create copy into a RGB JPEG-IN-TIFF (#3887)
def test_tiff_write_99():
- src_ds = gdal.Open('data/rgbsmall.tif')
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_99.tif', src_ds, options=['COMPRESS=JPEG'])
+ src_ds = gdal.Open("data/rgbsmall.tif")
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/test_99.tif", src_ds, options=["COMPRESS=JPEG"]
+ )
del new_ds
src_ds = None
- ds = gdal.Open('tmp/test_99.tif')
+ ds = gdal.Open("tmp/test_99.tif")
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
cs3 = ds.GetRasterBand(3).Checksum()
ds = None
- gdaltest.tiff_drv.Delete('tmp/test_99.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_99.tif")
+
+ assert (cs1, cs2, cs3) == (21629, 21651, 21371), "%d,%d,%d" % (cs1, cs2, cs3)
- assert (cs1, cs2, cs3) == (21629, 21651, 21371), ('%d,%d,%d' % (cs1, cs2, cs3))
###############################################################################
# Create copy into a 2 band JPEG-IN-TIFF (#3887)
@@ -3716,21 +4299,24 @@ def test_tiff_write_99():
def test_tiff_write_100():
- src_ds = gdaltest.tiff_drv.Create('/vsimem/test_100_src.tif', 16, 16, 2)
+ src_ds = gdaltest.tiff_drv.Create("/vsimem/test_100_src.tif", 16, 16, 2)
src_ds.GetRasterBand(1).Fill(255)
- new_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/test_100_dst.tif', src_ds, options=['COMPRESS=JPEG'])
+ new_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/test_100_dst.tif", src_ds, options=["COMPRESS=JPEG"]
+ )
del new_ds
src_ds = None
- ds = gdal.Open('/vsimem/test_100_dst.tif')
+ ds = gdal.Open("/vsimem/test_100_dst.tif")
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/test_100_src.tif')
- gdaltest.tiff_drv.Delete('/vsimem/test_100_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/test_100_src.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/test_100_dst.tif")
+
+ assert (cs1, cs2) == (3118, 0), "%d,%d" % (cs1, cs2)
- assert (cs1, cs2) == (3118, 0), ('%d,%d' % (cs1, cs2))
###############################################################################
# Test CHUNKY_STRIP_READ_SUPPORT (#3894)
@@ -3744,21 +4330,25 @@ def test_tiff_write_101():
if not gdaltest.run_slow_tests():
pytest.skip()
- if sys.platform.startswith('linux'):
+ if sys.platform.startswith("linux"):
# Much faster to use /dev/urandom than python random generator !
- f = open('/dev/urandom', 'rb')
+ f = open("/dev/urandom", "rb")
rand_array = f.read(10 * 1024 * 1024)
f.close()
else:
import random
- rand_array = b''.join(struct.pack('B', random.randint(0, 255)) for _ in range(10 * 1024 * 1024))
- f = open('tmp/tiff_write_101.bin', 'wb')
+ rand_array = b"".join(
+ struct.pack("B", random.randint(0, 255)) for _ in range(10 * 1024 * 1024)
+ )
+
+ f = open("tmp/tiff_write_101.bin", "wb")
f.write(rand_array)
f.close()
- f = open('tmp/tiff_write_101.hdr', 'wb')
- f.write("""ENVI
+ f = open("tmp/tiff_write_101.hdr", "wb")
+ f.write(
+ """ENVI
samples = 2500
lines = 4000
bands = 1
@@ -3769,40 +4359,54 @@ def test_tiff_write_101():
byte order = 0
map info = {UTM, 1, 1, 440720.000000, 3751320.000000, 60.000000, 60.000000, 11, North}
band names = {
-Band 1}""".encode('ascii'))
+Band 1}""".encode(
+ "ascii"
+ )
+ )
f.close()
- src_ds = gdal.Open('tmp/tiff_write_101.bin')
+ src_ds = gdal.Open("tmp/tiff_write_101.bin")
expected_cs = src_ds.GetRasterBand(1).Checksum()
- for compression_method in ['DEFLATE', 'LZW', 'JPEG', 'PACKBITS', 'LZMA']:
- if md['DMD_CREATIONOPTIONLIST'].find(compression_method) == -1:
+ for compression_method in ["DEFLATE", "LZW", "JPEG", "PACKBITS", "LZMA"]:
+ if md["DMD_CREATIONOPTIONLIST"].find(compression_method) == -1:
continue
- ds = gdaltest.tiff_drv.CreateCopy('tmp/tiff_write_101.tif', src_ds,
- options=['COMPRESS=' + compression_method, 'BLOCKXSIZE=2500', 'BLOCKYSIZE=4000'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "tmp/tiff_write_101.tif",
+ src_ds,
+ options=[
+ "COMPRESS=" + compression_method,
+ "BLOCKXSIZE=2500",
+ "BLOCKYSIZE=4000",
+ ],
+ )
ds = None
- ds = gdal.Open('tmp/tiff_write_101.tif')
+ ds = gdal.Open("tmp/tiff_write_101.tif")
gdal.ErrorReset()
cs = ds.GetRasterBand(1).Checksum()
error_msg = gdal.GetLastErrorMsg()
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_101.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_101.tif")
- if error_msg != '':
+ if error_msg != "":
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_101.bin')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_101.bin")
pytest.fail()
- if compression_method != 'JPEG' and cs != expected_cs:
+ if compression_method != "JPEG" and cs != expected_cs:
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_101.bin')
- pytest.fail('for compression method %s, got %d instead of %d' % (compression_method, cs, expected_cs))
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_101.bin")
+ pytest.fail(
+ "for compression method %s, got %d instead of %d"
+ % (compression_method, cs, expected_cs)
+ )
src_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_101.bin')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_101.bin")
+
###############################################################################
# Test writing and reading back COMPD_CS
@@ -3810,83 +4414,97 @@ def test_tiff_write_101():
def test_tiff_write_102():
- if int(gdal.GetDriverByName('GTiff').GetMetadataItem('LIBGEOTIFF')) < 1600:
- pytest.skip('requires libgeotiff >= 1.6')
+ if int(gdal.GetDriverByName("GTiff").GetMetadataItem("LIBGEOTIFF")) < 1600:
+ pytest.skip("requires libgeotiff >= 1.6")
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_102.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_102.tif", 1, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(7401)
- name = sr.GetAttrValue('COMPD_CS')
+ name = sr.GetAttrValue("COMPD_CS")
wkt = sr.ExportToWkt()
ds.SetProjection(wkt)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_102.tif')
+ ds = gdal.Open("/vsimem/tiff_write_102.tif")
wkt1 = ds.GetProjectionRef()
ds = None
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'NO'):
- ds = gdal.Open('/vsimem/tiff_write_102.tif')
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "NO"):
+ ds = gdal.Open("/vsimem/tiff_write_102.tif")
wkt2 = ds.GetProjectionRef()
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_102.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_102.tif")
- assert wkt1.startswith('COMPD_CS'), 'expected COMPD_CS, but got something else'
+ assert wkt1.startswith("COMPD_CS"), "expected COMPD_CS, but got something else"
- assert not wkt2.startswith('COMPD_CS'), 'got COMPD_CS, but did not expected it'
+ assert not wkt2.startswith("COMPD_CS"), "got COMPD_CS, but did not expected it"
sr2 = osr.SpatialReference()
sr2.SetFromUserInput(wkt1)
- got_name = sr2.GetAttrValue('COMPD_CS')
+ got_name = sr2.GetAttrValue("COMPD_CS")
assert got_name == name, wkt2
+
###############################################################################
# Test -co COPY_SRC_OVERVIEWS=YES on a multiband source with external overviews (#3938)
def test_tiff_write_103():
import test_cli_utilities
+
if test_cli_utilities.get_gdaladdo_path() is None:
pytest.skip()
- gdal.Translate('tmp/tiff_write_103_src.tif', 'data/rgbsmall.tif', options='-outsize 260 260')
- gdaltest.runexternal(test_cli_utilities.get_gdaladdo_path() + ' -ro tmp/tiff_write_103_src.tif 2')
- gdal.Translate('tmp/tiff_write_103_dst.tif', 'tmp/tiff_write_103_src.tif', options='-co COPY_SRC_OVERVIEWS=YES')
-
- src_ds = gdal.Open('tmp/tiff_write_103_src.tif')
- dst_ds = gdal.Open('tmp/tiff_write_103_dst.tif')
+ gdal.Translate(
+ "tmp/tiff_write_103_src.tif", "data/rgbsmall.tif", options="-outsize 260 260"
+ )
+ gdaltest.runexternal(
+ test_cli_utilities.get_gdaladdo_path() + " -ro tmp/tiff_write_103_src.tif 2"
+ )
+ gdal.Translate(
+ "tmp/tiff_write_103_dst.tif",
+ "tmp/tiff_write_103_src.tif",
+ options="-co COPY_SRC_OVERVIEWS=YES",
+ )
+
+ src_ds = gdal.Open("tmp/tiff_write_103_src.tif")
+ dst_ds = gdal.Open("tmp/tiff_write_103_dst.tif")
src_cs = src_ds.GetRasterBand(1).GetOverview(0).Checksum()
dst_cs = dst_ds.GetRasterBand(1).GetOverview(0).Checksum()
src_ds = None
dst_ds = None
- gdaltest.tiff_drv.Delete('tmp/tiff_write_103_src.tif')
- gdaltest.tiff_drv.Delete('tmp/tiff_write_103_dst.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_103_src.tif")
+ gdaltest.tiff_drv.Delete("tmp/tiff_write_103_dst.tif")
- assert src_cs == dst_cs, 'did not get expected checksum'
+ assert src_cs == dst_cs, "did not get expected checksum"
###############################################################################
# Confirm as best we can that we can write geotiff files with detailed
# projection parameters with the correct linear units set. (#3901)
+
def test_tiff_write_104():
- src_ds = gdal.Open('data/spaf27_correct.tif')
- dst_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_104.tif', src_ds)
+ src_ds = gdal.Open("data/spaf27_correct.tif")
+ dst_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_104.tif", src_ds)
src_ds = None
del dst_ds
- ds = gdal.Open('tmp/test_104.tif')
+ ds = gdal.Open("tmp/test_104.tif")
wkt = ds.GetProjectionRef()
ds = None
srs = osr.SpatialReference(wkt)
fe = srs.GetProjParm(osr.SRS_PP_FALSE_EASTING)
- assert fe == pytest.approx(2000000.0, abs=0.001), 'did not get expected false easting'
+ assert fe == pytest.approx(
+ 2000000.0, abs=0.001
+ ), "did not get expected false easting"
+
+ gdaltest.tiff_drv.Delete("tmp/test_104.tif")
- gdaltest.tiff_drv.Delete('tmp/test_104.tif')
###############################################################################
# Confirm as best we can that we can write geotiff files with detailed
@@ -3895,35 +4513,38 @@ def test_tiff_write_104():
def test_tiff_write_105():
- shutil.copyfile('data/bug4468.tif', 'tmp/bug4468.tif')
+ shutil.copyfile("data/bug4468.tif", "tmp/bug4468.tif")
# Update a pixel and close again.
- ds = gdal.Open('tmp/bug4468.tif', gdal.GA_Update)
+ ds = gdal.Open("tmp/bug4468.tif", gdal.GA_Update)
data = ds.ReadRaster(0, 0, 1, 1)
ds.WriteRaster(0, 0, 1, 1, data)
ds = None
# Now check if the image is still intact.
- ds = gdal.Open('tmp/bug4468.tif')
+ ds = gdal.Open("tmp/bug4468.tif")
cs = ds.GetRasterBand(1).Checksum()
- assert cs == 2923, ('Did not get expected checksum, got %d.' % cs)
+ assert cs == 2923, "Did not get expected checksum, got %d." % cs
ds = None
- gdaltest.tiff_drv.Delete('tmp/bug4468.tif')
+ gdaltest.tiff_drv.Delete("tmp/bug4468.tif")
+
###############################################################################
# Test the direct copy mechanism of JPEG source
-def test_tiff_write_106(filename='../gdrivers/data/jpeg/byte_with_xmp.jpg', options=None, check_cs=True):
+def test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/byte_with_xmp.jpg", options=None, check_cs=True
+):
if options is None:
- options = ['COMPRESS=JPEG']
+ options = ["COMPRESS=JPEG"]
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
src_ds = gdal.Open(filename)
@@ -3932,68 +4553,95 @@ def test_tiff_write_106(filename='../gdrivers/data/jpeg/byte_with_xmp.jpg', opti
for i in range(nbands):
src_cs.append(src_ds.GetRasterBand(i + 1).Checksum())
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_106.tif', src_ds, options=options)
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_106.tif", src_ds, options=options
+ )
out_ds = None
- out_ds = gdal.Open('/vsimem/tiff_write_106.tif')
+ out_ds = gdal.Open("/vsimem/tiff_write_106.tif")
cs = []
for i in range(nbands):
cs.append(out_ds.GetRasterBand(i + 1).Checksum())
out_ds = None
- gdal.Unlink('/vsimem/tiff_write_106.tif')
+ gdal.Unlink("/vsimem/tiff_write_106.tif")
if check_cs:
for i in range(nbands):
- assert cs[i] == src_cs[i], 'did not get expected checksum'
+ assert cs[i] == src_cs[i], "did not get expected checksum"
else:
for i in range(nbands):
- assert cs[i] != 0, 'did not get expected checksum'
-
+ assert cs[i] != 0, "did not get expected checksum"
def test_tiff_write_107():
- return test_tiff_write_106(options=['COMPRESS=JPEG', 'BLOCKYSIZE=8'])
+ return test_tiff_write_106(options=["COMPRESS=JPEG", "BLOCKYSIZE=8"])
def test_tiff_write_108():
- return test_tiff_write_106(options=['COMPRESS=JPEG', 'BLOCKYSIZE=20'])
+ return test_tiff_write_106(options=["COMPRESS=JPEG", "BLOCKYSIZE=20"])
def test_tiff_write_109():
- return test_tiff_write_106(options=['COMPRESS=JPEG', 'TILED=YES', 'BLOCKYSIZE=16', 'BLOCKXSIZE=16'])
+ return test_tiff_write_106(
+ options=["COMPRESS=JPEG", "TILED=YES", "BLOCKYSIZE=16", "BLOCKXSIZE=16"]
+ )
+
# Strip organization of YCbCr does *NOT* give exact pixels w.r.t. original image
def test_tiff_write_110():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/albania.jpg', check_cs=False)
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/albania.jpg", check_cs=False
+ )
+
# Whole copy of YCbCr *DOES* give exact pixels w.r.t. original image
def test_tiff_write_111():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/albania.jpg', options=['COMPRESS=JPEG', 'BLOCKYSIZE=260'])
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/albania.jpg",
+ options=["COMPRESS=JPEG", "BLOCKYSIZE=260"],
+ )
def test_tiff_write_111_bis():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/albania.jpg', options=['COMPRESS=JPEG', 'BLOCKYSIZE=260', 'INTERLEAVE=PIXEL'])
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/albania.jpg",
+ options=["COMPRESS=JPEG", "BLOCKYSIZE=260", "INTERLEAVE=PIXEL"],
+ )
def test_tiff_write_111_ter():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/albania.jpg', options=['COMPRESS=JPEG', 'BLOCKYSIZE=260', 'INTERLEAVE=BAND'], check_cs=False)
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/albania.jpg",
+ options=["COMPRESS=JPEG", "BLOCKYSIZE=260", "INTERLEAVE=BAND"],
+ check_cs=False,
+ )
+
# Tiled organization of YCbCr does *NOT* give exact pixels w.r.t. original image
def test_tiff_write_112():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/albania.jpg', options=['COMPRESS=JPEG', 'TILED=YES'], check_cs=False)
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/albania.jpg",
+ options=["COMPRESS=JPEG", "TILED=YES"],
+ check_cs=False,
+ )
+
# The source is a JPEG in RGB colorspace (usually it is YCbCr).
def test_tiff_write_113():
- return test_tiff_write_106(filename='../gdrivers/data/jpeg/rgbsmall_rgb.jpg', options=['COMPRESS=JPEG', 'BLOCKYSIZE=8'])
+ return test_tiff_write_106(
+ filename="../gdrivers/data/jpeg/rgbsmall_rgb.jpg",
+ options=["COMPRESS=JPEG", "BLOCKYSIZE=8"],
+ )
+
###############################################################################
# Test CreateCopy() interruption
@@ -4001,36 +4649,37 @@ def test_tiff_write_113():
def test_tiff_write_114():
- tst = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672)
+ tst = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672)
return tst.testCreateCopy(vsimem=1, interrupt_during_copy=True)
+
###############################################################################
# Test writing a pixel interleaved RGBA JPEG-compressed TIFF
def test_tiff_write_115():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- tmpfilename = '/vsimem/tiff_write_115.tif'
+ tmpfilename = "/vsimem/tiff_write_115.tif"
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
- ds = gdaltest.tiff_drv.CreateCopy(tmpfilename, src_ds, options=['COMPRESS=JPEG'])
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(tmpfilename, src_ds, options=["COMPRESS=JPEG"])
assert ds is not None
ds = None
src_ds = None
- f = gdal.VSIFOpenL(tmpfilename + '.aux.xml', 'rb')
+ f = gdal.VSIFOpenL(tmpfilename + ".aux.xml", "rb")
if f is not None:
gdal.VSIFCloseL(f)
gdal.Unlink(tmpfilename)
pytest.fail()
ds = gdal.Open(tmpfilename)
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- if md['INTERLEAVE'] != 'PIXEL':
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ if md["INTERLEAVE"] != "PIXEL":
ds = None
gdal.Unlink(tmpfilename)
pytest.fail()
@@ -4043,7 +4692,10 @@ def test_tiff_write_115():
gdal.Unlink(tmpfilename)
pytest.fail()
- if ds.GetRasterBand(i + 1).GetRasterColorInterpretation() != gdal.GCI_RedBand + i:
+ if (
+ ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ != gdal.GCI_RedBand + i
+ ):
ds = None
gdal.Unlink(tmpfilename)
pytest.fail()
@@ -4051,32 +4703,35 @@ def test_tiff_write_115():
ds = None
gdal.Unlink(tmpfilename)
+
###############################################################################
# Test writing a band interleaved RGBA JPEG-compressed TIFF
def test_tiff_write_116():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- tmpfilename = '/vsimem/tiff_write_116.tif'
+ tmpfilename = "/vsimem/tiff_write_116.tif"
- src_ds = gdal.Open('data/stefan_full_rgba.tif')
- ds = gdaltest.tiff_drv.CreateCopy(tmpfilename, src_ds, options=['COMPRESS=JPEG', 'INTERLEAVE=BAND'])
+ src_ds = gdal.Open("data/stefan_full_rgba.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ tmpfilename, src_ds, options=["COMPRESS=JPEG", "INTERLEAVE=BAND"]
+ )
assert ds is not None
ds = None
src_ds = None
- f = gdal.VSIFOpenL(tmpfilename + '.aux.xml', 'rb')
+ f = gdal.VSIFOpenL(tmpfilename + ".aux.xml", "rb")
if f is not None:
gdal.VSIFCloseL(f)
gdal.Unlink(tmpfilename)
pytest.fail()
ds = gdal.Open(tmpfilename)
- md = ds.GetMetadata('IMAGE_STRUCTURE')
- if md['INTERLEAVE'] != 'BAND':
+ md = ds.GetMetadata("IMAGE_STRUCTURE")
+ if md["INTERLEAVE"] != "BAND":
ds = None
gdal.Unlink(tmpfilename)
pytest.fail()
@@ -4089,7 +4744,10 @@ def test_tiff_write_116():
gdal.Unlink(tmpfilename)
pytest.fail()
- if ds.GetRasterBand(i + 1).GetRasterColorInterpretation() != gdal.GCI_RedBand + i:
+ if (
+ ds.GetRasterBand(i + 1).GetRasterColorInterpretation()
+ != gdal.GCI_RedBand + i
+ ):
ds = None
gdal.Unlink(tmpfilename)
pytest.fail()
@@ -4097,6 +4755,7 @@ def test_tiff_write_116():
ds = None
gdal.Unlink(tmpfilename)
+
###############################################################################
# Test bugfix for ticket #4771 (rewriting of a deflate compressed tile, libtiff bug)
@@ -4104,7 +4763,7 @@ def test_tiff_write_116():
def test_tiff_write_117():
# This fail with a libtiff 4.x older than 2012-08-13
md = gdaltest.tiff_drv.GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
+ if md["LIBTIFF"] != "INTERNAL":
pytest.skip()
import random
@@ -4112,11 +4771,19 @@ def test_tiff_write_117():
# so that we have always the same random :-)
random.seed(0)
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_117.tif', 512, 256, 2, options=['COMPRESS=DEFLATE', 'TILED=YES'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_117.tif",
+ 512,
+ 256,
+ 2,
+ options=["COMPRESS=DEFLATE", "TILED=YES"],
+ )
# Write first tile so that its byte count of that tile is 2048 (a multiple of 1024)
adjust = 1254
- data = '0' * (65536 - adjust) + ''.join([('%c' % random.randint(0, 255)) for _ in range(adjust)])
+ data = "0" * (65536 - adjust) + "".join(
+ [("%c" % random.randint(0, 255)) for _ in range(adjust)]
+ )
ds.GetRasterBand(1).WriteRaster(0, 0, 256, 256, data)
# Second tile will be implicitly written at closing, or we could write
@@ -4124,13 +4791,13 @@ def test_tiff_write_117():
ds = None
- ds = gdal.Open('/vsimem/tiff_write_117.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_117.tif", gdal.GA_Update)
# Will adjust tif_rawdatasize to TIFFroundup_64((uint64)size, 1024) = TIFFroundup_64(2048, 1024) = 2048
ds.GetRasterBand(1).ReadRaster(0, 0, 256, 256)
# The new bytecount will be greater than 2048
- data = ''.join([('%c' % random.randint(0, 255)) for _ in range(256 * 256)])
+ data = "".join([("%c" % random.randint(0, 255)) for _ in range(256 * 256)])
ds.GetRasterBand(1).WriteRaster(0, 0, 256, 256, data)
# Make sure that data is written now
@@ -4141,10 +4808,12 @@ def test_tiff_write_117():
ds = None
- gdal.Unlink('/vsimem/tiff_write_117.tif')
+ gdal.Unlink("/vsimem/tiff_write_117.tif")
+
+ assert (
+ data is not None
+ ), "if GDAL is configured with external libtiff 4.x, it can fail if it is older than 4.0.3. With internal libtiff, should not fail"
- assert data is not None, \
- 'if GDAL is configured with external libtiff 4.x, it can fail if it is older than 4.0.3. With internal libtiff, should not fail'
###############################################################################
# Test bugfix for ticket gh #4538 (rewriting of a deflate compressed tile, libtiff bug)
@@ -4153,28 +4822,38 @@ def test_tiff_write_117():
def test_tiff_write_rewrite_in_place_issue_gh_4538():
# This fail with libtiff <= 4.3.0
md = gdaltest.tiff_drv.GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
+ if md["LIBTIFF"] != "INTERNAL":
pytest.skip()
# Defeats the logic that fixed test_tiff_write_117
import array
- filename = '/vsimem/tmp.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 144*2, 128, 1,
- options = ['TILED=YES',
- 'COMPRESS=PACKBITS',
- 'BLOCKXSIZE=144',
- 'BLOCKYSIZE=128'])
- x = ((144*128)//2) - 645
- ds.GetRasterBand(1).WriteRaster(0, 0, 144, 128,
- b'\x00' * x + array.array('B', [i % 255 for i in range(144*128-x)]))
- block1_data = b'\x00' * (x + 8) + array.array('B', [i % 255 for i in range(144*128-(x+8))])
+
+ filename = "/vsimem/tmp.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(
+ filename,
+ 144 * 2,
+ 128,
+ 1,
+ options=["TILED=YES", "COMPRESS=PACKBITS", "BLOCKXSIZE=144", "BLOCKYSIZE=128"],
+ )
+ x = ((144 * 128) // 2) - 645
+ ds.GetRasterBand(1).WriteRaster(
+ 0,
+ 0,
+ 144,
+ 128,
+ b"\x00" * x + array.array("B", [i % 255 for i in range(144 * 128 - x)]),
+ )
+ block1_data = b"\x00" * (x + 8) + array.array(
+ "B", [i % 255 for i in range(144 * 128 - (x + 8))]
+ )
ds.GetRasterBand(1).WriteRaster(144, 0, 144, 128, block1_data)
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
ds.GetRasterBand(1).ReadRaster(144, 0, 144, 128)
- block0_data = array.array('B', [i % 255 for i in range(144*128)])
+ block0_data = array.array("B", [i % 255 for i in range(144 * 128)])
ds.GetRasterBand(1).WriteRaster(0, 0, 144, 128, block0_data)
ds = None
@@ -4185,42 +4864,45 @@ def test_tiff_write_rewrite_in_place_issue_gh_4538():
gdal.Unlink(filename)
+
###############################################################################
# Test bugfix for ticket #4816
def test_tiff_write_118():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_118.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_write_118.tif", 1, 1)
# Should be rejected in a non-XML domain
- ds.SetMetadata('bla', 'foo')
+ ds.SetMetadata("bla", "foo")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_118.tif')
- md = ds.GetMetadata('foo')
+ ds = gdal.Open("/vsimem/tiff_write_118.tif")
+ md = ds.GetMetadata("foo")
ds = None
- gdal.Unlink('/vsimem/tiff_write_118.tif')
+ gdal.Unlink("/vsimem/tiff_write_118.tif")
assert not md
+
###############################################################################
# Test bugfix for ticket #4816
def test_tiff_write_119():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_119.tif', 1, 1)
- ds.SetMetadata('foo=bar', 'foo')
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_write_119.tif", 1, 1)
+ ds.SetMetadata("foo=bar", "foo")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_119.tif')
- md = ds.GetMetadata('foo')
+ ds = gdal.Open("/vsimem/tiff_write_119.tif")
+ md = ds.GetMetadata("foo")
ds = None
- gdal.Unlink('/vsimem/tiff_write_119.tif')
+ gdal.Unlink("/vsimem/tiff_write_119.tif")
+
+ assert md["foo"] == "bar"
- assert md['foo'] == 'bar'
###############################################################################
# Test bugfix for ticket #4816
@@ -4228,18 +4910,19 @@ def test_tiff_write_119():
def test_tiff_write_120():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_120.tif', 1, 1)
- ds.SetMetadata('', 'xml:foo')
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_write_120.tif", 1, 1)
+ ds.SetMetadata("", "xml:foo")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_120.tif')
- md = ds.GetMetadata('xml:foo')
+ ds = gdal.Open("/vsimem/tiff_write_120.tif")
+ md = ds.GetMetadata("xml:foo")
ds = None
- gdal.Unlink('/vsimem/tiff_write_120.tif')
+ gdal.Unlink("/vsimem/tiff_write_120.tif")
assert len(md) == 1
- assert md[0] == ''
+ assert md[0] == ""
+
###############################################################################
# Test error cases of COPY_SRC_OVERVIEWS creation option
@@ -4248,7 +4931,8 @@ def test_tiff_write_120():
def test_tiff_write_121():
# Test when the overview band is NULL
- src_ds = gdal.Open("""
+ src_ds = gdal.Open(
+ """
data/byte.tif
@@ -4259,15 +4943,19 @@ def test_tiff_write_121():
1
-""")
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_121.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES'])
+"""
+ )
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_121.tif", src_ds, options=["COPY_SRC_OVERVIEWS=YES"]
+ )
gdal.PopErrorHandler()
assert ds is None
src_ds = None
# Test when the overview count isn't the same on all base bands
- src_ds = gdal.Open("""
+ src_ds = gdal.Open(
+ """
data/byte.tif
@@ -4284,15 +4972,19 @@ def test_tiff_write_121():
1
-""")
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_121.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES'])
+"""
+ )
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_121.tif", src_ds, options=["COPY_SRC_OVERVIEWS=YES"]
+ )
gdal.PopErrorHandler()
assert ds is None
src_ds = None
# Test when the overview bands of same level have not the same dimensions
- src_ds = gdal.Open("""
+ src_ds = gdal.Open(
+ """
data/byte.tif
@@ -4313,13 +5005,17 @@ def test_tiff_write_121():
1
-""")
- gdal.PushErrorHandler('CPLQuietErrorHandler')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_121.tif', src_ds, options=['COPY_SRC_OVERVIEWS=YES'])
+"""
+ )
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_121.tif", src_ds, options=["COPY_SRC_OVERVIEWS=YES"]
+ )
gdal.PopErrorHandler()
assert ds is None
src_ds = None
+
###############################################################################
# Test write and read of some TIFFTAG_RESOLUTIONUNIT tags where '*'/'' is
# specified (gdalwarp conflicts)
@@ -4327,27 +5023,33 @@ def test_tiff_write_121():
def test_tiff_write_122():
- new_ds = gdaltest.tiff_drv.Create('tmp/tags122.tif', 1, 1, 1)
+ new_ds = gdaltest.tiff_drv.Create("tmp/tags122.tif", 1, 1, 1)
- new_ds.SetMetadata({
- 'TIFFTAG_RESOLUTIONUNIT': '*',
- })
+ new_ds.SetMetadata(
+ {
+ "TIFFTAG_RESOLUTIONUNIT": "*",
+ }
+ )
new_ds = None
# hopefully it's closed now!
- new_ds = gdal.Open('tmp/tags122.tif')
+ new_ds = gdal.Open("tmp/tags122.tif")
md = new_ds.GetMetadata()
- if 'TIFFTAG_RESOLUTIONUNIT' not in md:
- pytest.fail('Couldnt find tag TIFFTAG_RESOLUTIONUNIT')
+ if "TIFFTAG_RESOLUTIONUNIT" not in md:
+ pytest.fail("Couldnt find tag TIFFTAG_RESOLUTIONUNIT")
- elif md['TIFFTAG_RESOLUTIONUNIT'] != '1 (unitless)':
- pytest.fail("Got unexpected tag TIFFTAG_RESOLUTIONUNIT='%s' (expected ='1 (unitless)')" % md['TIFFTAG_RESOLUTIONUNIT'])
+ elif md["TIFFTAG_RESOLUTIONUNIT"] != "1 (unitless)":
+ pytest.fail(
+ "Got unexpected tag TIFFTAG_RESOLUTIONUNIT='%s' (expected ='1 (unitless)')"
+ % md["TIFFTAG_RESOLUTIONUNIT"]
+ )
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/tags122.tif')
+ gdaltest.tiff_drv.Delete("tmp/tags122.tif")
+
###############################################################################
# Test implicit photometric interpretation
@@ -4355,171 +5057,217 @@ def test_tiff_write_122():
def test_tiff_write_123():
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_src.tif', 1, 1, 5, gdal.GDT_Int16)
+ src_ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_src.tif", 1, 1, 5, gdal.GDT_Int16
+ )
src_ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_GreenBand)
src_ds.GetRasterBand(5).SetColorInterpretation(gdal.GCI_AlphaBand)
src_ds.GetRasterBand(3).SetColorInterpretation(gdal.GCI_BlueBand)
src_ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_RedBand)
src_ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_src.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- src_ds = gdal.Open('/vsimem/tiff_write_123_src.tif')
- assert src_ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect a TIFFTAG_GDAL_METADATA tag'
- assert src_ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '2'
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_src.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ src_ds = gdal.Open("/vsimem/tiff_write_123_src.tif")
+ assert (
+ src_ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect a TIFFTAG_GDAL_METADATA tag"
+ assert src_ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "2"
assert src_ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
assert src_ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_Undefined
assert src_ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
- assert src_ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0,2'
+ assert src_ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0,2"
- new_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_123.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_123.tif", src_ds)
del new_ds
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123.tif')
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect a TIFFTAG_GDAL_METADATA tag'
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123.tif")
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect a TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
assert src_ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_Undefined
assert src_ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0,2'
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0,2"
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_src.tif')
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_src.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123.tif")
# From implicit RGB to BGR (with Photometric = MinIsBlack)
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_bgr.tif', 1, 1, 3, gdal.GDT_Byte)
- assert ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '2'
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') is None
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_bgr.tif", 1, 1, 3, gdal.GDT_Byte
+ )
+ assert ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "2"
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") is None
ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_BlueBand)
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_BlueBand
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_GreenBand)
ds.GetRasterBand(3).SetColorInterpretation(gdal.GCI_RedBand)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_bgr.tif.aux.xml',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect a PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123_bgr.tif')
- assert ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '1'
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0,0'
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is not None, \
- 'expected a TIFFTAG_GDAL_METADATA tag'
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_bgr.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect a PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123_bgr.tif")
+ assert ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "1"
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0,0"
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is not None
+ ), "expected a TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_BlueBand
assert ds.GetRasterBand(2).GetColorInterpretation() == gdal.GCI_GreenBand
assert ds.GetRasterBand(3).GetColorInterpretation() == gdal.GCI_RedBand
ds = None
# Test overriding internal color interpretation with PAM one (read-only mode)
- ds = gdal.Open('/vsimem/tiff_write_123_bgr.tif')
+ ds = gdal.Open("/vsimem/tiff_write_123_bgr.tif")
ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_RedBand)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_bgr.tif.aux.xml',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is not None, 'expected a PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123_bgr.tif')
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_bgr.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is not None, "expected a PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123_bgr.tif")
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
assert ds.GetRasterBand(2).GetColorInterpretation() == gdal.GCI_GreenBand
assert ds.GetRasterBand(3).GetColorInterpretation() == gdal.GCI_RedBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_bgr.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_bgr.tif")
# Create a BGR with PROFILE=BASELINE --> no TIFFTAG_GDAL_METADATA tag, but .aux.xml instead
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_bgr.tif', 1, 1, 3,
- options=['PROFILE=BASELINE'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_bgr.tif", 1, 1, 3, options=["PROFILE=BASELINE"]
+ )
ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_BlueBand)
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_GreenBand)
ds.GetRasterBand(3).SetColorInterpretation(gdal.GCI_RedBand)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_bgr.tif.aux.xml',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is not None, 'expected a PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123_bgr.tif')
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect a TIFFTAG_GDAL_METADATA tag'
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_bgr.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is not None, "expected a PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123_bgr.tif")
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect a TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_BlueBand
assert ds.GetRasterBand(2).GetColorInterpretation() == gdal.GCI_GreenBand
assert ds.GetRasterBand(3).GetColorInterpretation() == gdal.GCI_RedBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_bgr.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_bgr.tif")
# From implicit RGBA to MINISBLACK
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_rgba.tif', 1, 1, 4, gdal.GDT_Byte)
- assert ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '2'
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_rgba.tif", 1, 1, 4, gdal.GDT_Byte
+ )
+ assert ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "2"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
assert ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_AlphaBand
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '2'
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "2"
ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_Undefined)
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_Undefined
- assert ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '1'
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') == '0,0,2'
+ assert ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "1"
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") == "0,0,2"
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgba.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgba.tif")
# From that implicit RGBA to Gray,Undefined,Undefined,Alpha doesn't
# produce PAM file
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_guua.tif', 1, 1, 4, gdal.GDT_Byte)
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_guua.tif", 1, 1, 4, gdal.GDT_Byte
+ )
ds.GetRasterBand(1).SetColorInterpretation(gdal.GCI_GrayIndex)
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_Undefined)
ds.GetRasterBand(3).SetColorInterpretation(gdal.GCI_Undefined)
ds.GetRasterBand(4).SetColorInterpretation(gdal.GCI_AlphaBand)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_guua.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123_guua.tif')
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect TIFFTAG_GDAL_METADATA tag'
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_guua.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123_guua.tif")
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_GrayIndex
assert ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_AlphaBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_guua.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_guua.tif")
# Test that CreateCopy() from a RGB UInt16 doesn't generate ExtraSamples
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_rgb_src.tif',
- 1, 1, 3, gdal.GDT_UInt16, options=['PHOTOMETRIC=RGB'])
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_123_rgb.tif', src_ds)
+ src_ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_rgb_src.tif",
+ 1,
+ 1,
+ 3,
+ gdal.GDT_UInt16,
+ options=["PHOTOMETRIC=RGB"],
+ )
+ ds = gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_123_rgb.tif", src_ds)
src_ds = None
- assert ds.GetMetadataItem('TIFFTAG_PHOTOMETRIC', '_DEBUG_') == '2'
- assert ds.GetMetadataItem('TIFFTAG_EXTRASAMPLES', '_DEBUG_') is None
+ assert ds.GetMetadataItem("TIFFTAG_PHOTOMETRIC", "_DEBUG_") == "2"
+ assert ds.GetMetadataItem("TIFFTAG_EXTRASAMPLES", "_DEBUG_") is None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgb_src.tif')
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgb.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgb_src.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgb.tif")
# Test that PHOTOMETRIC=RGB overrides the source color interpretation of the
# first 3 bands
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 3)
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_123_rgb.tif', src_ds,
- options=['PHOTOMETRIC=RGB'])
- ds = gdal.Open('/vsimem/tiff_write_123_rgb.tif')
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 3)
+ gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_123_rgb.tif", src_ds, options=["PHOTOMETRIC=RGB"]
+ )
+ ds = gdal.Open("/vsimem/tiff_write_123_rgb.tif")
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgb.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgb.tif")
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 5)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 5)
src_ds.GetRasterBand(5).SetColorInterpretation(gdal.GCI_AlphaBand)
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_123_rgbua.tif', src_ds,
- options=['PHOTOMETRIC=RGB'])
- ds = gdal.Open('/vsimem/tiff_write_123_rgbua.tif')
+ gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_123_rgbua.tif", src_ds, options=["PHOTOMETRIC=RGB"]
+ )
+ ds = gdal.Open("/vsimem/tiff_write_123_rgbua.tif")
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
assert ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_Undefined
assert ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgbua.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgbua.tif")
# Test updating alpha to undefined
- gdaltest.tiff_drv.Create('/vsimem/tiff_write_123_rgba_to_undefined.tif', 1, 1, 4,
- options=['PHOTOMETRIC=RGB', 'ALPHA=YES'])
- ds = gdal.Open('/vsimem/tiff_write_123_rgba_to_undefined.tif', gdal.GA_Update)
+ gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_123_rgba_to_undefined.tif",
+ 1,
+ 1,
+ 4,
+ options=["PHOTOMETRIC=RGB", "ALPHA=YES"],
+ )
+ ds = gdal.Open("/vsimem/tiff_write_123_rgba_to_undefined.tif", gdal.GA_Update)
ds.GetRasterBand(4).SetColorInterpretation(gdal.GCI_Undefined)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_123_rgba_to_undefined.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_123_rgba_to_undefined.tif')
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_123_rgba_to_undefined.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_123_rgba_to_undefined.tif")
assert ds.GetRasterBand(4).GetColorInterpretation() == gdal.GCI_Undefined
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_123_rgba_to_undefined.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_123_rgba_to_undefined.tif")
+
###############################################################################
# Test error cases with palette creation
@@ -4527,15 +5275,15 @@ def test_tiff_write_123():
def test_tiff_write_124():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_124.tif', 1, 1, 3, gdal.GDT_Byte)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_124.tif", 1, 1, 3, gdal.GDT_Byte)
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
# Test "SetColorTable() can only be called on band 1"
ret = ds.GetRasterBand(2).SetColorTable(gdal.ColorTable())
gdal.PopErrorHandler()
assert ret != 0
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
# Test "SetColorTable() not supported for multi-sample TIFF files"
ret = ds.GetRasterBand(1).SetColorTable(gdal.ColorTable())
gdal.PopErrorHandler()
@@ -4543,21 +5291,31 @@ def test_tiff_write_124():
ds = None
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_124.tif', 1, 1, 1, gdal.GDT_UInt32)
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_124.tif", 1, 1, 1, gdal.GDT_UInt32
+ )
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
# Test "SetColorTable() only supported for Byte or UInt16 bands in TIFF format."
ret = ds.GetRasterBand(1).SetColorTable(gdal.ColorTable())
gdal.PopErrorHandler()
assert ret != 0
ds = None
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
# Test "SetColorTable() only supported for Byte or UInt16 bands in TIFF format."
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_124.tif', 1, 1, 1, gdal.GDT_UInt32, options=['PHOTOMETRIC=PALETTE'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_124.tif",
+ 1,
+ 1,
+ 1,
+ gdal.GDT_UInt32,
+ options=["PHOTOMETRIC=PALETTE"],
+ )
gdal.PopErrorHandler()
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_124.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_124.tif")
+
###############################################################################
# Test out-of-memory conditions with SplitBand and SplitBitmapBand
@@ -4565,30 +5323,49 @@ def test_tiff_write_124():
def test_tiff_write_125():
- if gdal.GetConfigOption('SKIP_MEM_INTENSIVE_TEST') is not None:
+ if gdal.GetConfigOption("SKIP_MEM_INTENSIVE_TEST") is not None:
pytest.skip()
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_125.tif', 2147000000, 5000, 65535, options=['SPARSE_OK=YES', 'BLOCKYSIZE=5000', 'COMPRESS=LZW', 'BIGTIFF=NO'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_125.tif",
+ 2147000000,
+ 5000,
+ 65535,
+ options=["SPARSE_OK=YES", "BLOCKYSIZE=5000", "COMPRESS=LZW", "BIGTIFF=NO"],
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_write_125.tif')
+ ds = gdal.Open("/vsimem/tiff_write_125.tif")
# Will not open on 32-bit due to overflow
if ds is not None:
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ds.GetRasterBand(1).ReadBlock(0, 0)
gdal.PopErrorHandler()
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_125.tif', 2147000000, 5000, 1, options=['NBITS=1', 'SPARSE_OK=YES', 'BLOCKYSIZE=5000', 'COMPRESS=LZW', 'BIGTIFF=NO'])
- ds = None
-
- ds = gdal.Open('/vsimem/tiff_write_125.tif')
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_125.tif",
+ 2147000000,
+ 5000,
+ 1,
+ options=[
+ "NBITS=1",
+ "SPARSE_OK=YES",
+ "BLOCKYSIZE=5000",
+ "COMPRESS=LZW",
+ "BIGTIFF=NO",
+ ],
+ )
+ ds = None
+
+ ds = gdal.Open("/vsimem/tiff_write_125.tif")
# Will not open on 32-bit due to overflow
if ds is not None:
- gdal.PushErrorHandler('CPLQuietErrorHandler')
+ gdal.PushErrorHandler("CPLQuietErrorHandler")
ds.GetRasterBand(1).ReadBlock(0, 0)
gdal.PopErrorHandler()
- gdal.Unlink('/vsimem/tiff_write_125.tif')
+ gdal.Unlink("/vsimem/tiff_write_125.tif")
+
###############################################################################
# Test implicit JPEG-in-TIFF overviews
@@ -4597,31 +5374,100 @@ def test_tiff_write_125():
def test_tiff_write_126():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.Open('../gdrivers/data/small_world_400pct.vrt')
-
- options_list = [(['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR'], [48788, 56561, 56462], [61397, 2463, 2454, 2727], [29605, 33654, 34633], [10904, 10453, 10361]),
- (['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'JPEGTABLESMODE=0'], [48788, 56561, 56462], [61397, 2463, 2454, 2727], [29605, 33654, 34633], [10904, 10453, 10361]),
- (['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'TILED=YES'], [48788, 56561, 56462], [61397, 2463, 2454, 2727], [29605, 33654, 34633], [10904, 10453, 10361]),
- (['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'BLOCKYSIZE=800'], [48788, 56561, 56462], [61397, 2463, 2454, 2727], [29605, 33654, 34633], [10904, 10453, 10361]),
- (['COMPRESS=JPEG', 'PHOTOMETRIC=YCBCR', 'BLOCKYSIZE=64'], [48788, 56561, 56462], [61397, 2463, 2454, 2727], [29605, 33654, 34633], [10904, 10453, 10361]),
- (['COMPRESS=JPEG'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'INTERLEAVE=BAND'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'INTERLEAVE=BAND', 'TILED=YES'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'INTERLEAVE=BAND', 'BLOCKYSIZE=800'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'INTERLEAVE=BAND', 'BLOCKYSIZE=32'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'BLOCKYSIZE=8'], [49887, 58937], [59311, 2826], [30829, 34806], [11664, 58937]),
- ]
+ src_ds = gdal.Open("../gdrivers/data/small_world_400pct.vrt")
+
+ options_list = [
+ (
+ ["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR"],
+ [48788, 56561, 56462],
+ [61397, 2463, 2454, 2727],
+ [29605, 33654, 34633],
+ [10904, 10453, 10361],
+ ),
+ (
+ ["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "JPEGTABLESMODE=0"],
+ [48788, 56561, 56462],
+ [61397, 2463, 2454, 2727],
+ [29605, 33654, 34633],
+ [10904, 10453, 10361],
+ ),
+ (
+ ["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "TILED=YES"],
+ [48788, 56561, 56462],
+ [61397, 2463, 2454, 2727],
+ [29605, 33654, 34633],
+ [10904, 10453, 10361],
+ ),
+ (
+ ["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "BLOCKYSIZE=800"],
+ [48788, 56561, 56462],
+ [61397, 2463, 2454, 2727],
+ [29605, 33654, 34633],
+ [10904, 10453, 10361],
+ ),
+ (
+ ["COMPRESS=JPEG", "PHOTOMETRIC=YCBCR", "BLOCKYSIZE=64"],
+ [48788, 56561, 56462],
+ [61397, 2463, 2454, 2727],
+ [29605, 33654, 34633],
+ [10904, 10453, 10361],
+ ),
+ (
+ ["COMPRESS=JPEG"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "INTERLEAVE=BAND"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "INTERLEAVE=BAND", "TILED=YES"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "INTERLEAVE=BAND", "BLOCKYSIZE=800"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "INTERLEAVE=BAND", "BLOCKYSIZE=32"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "BLOCKYSIZE=8"],
+ [49887, 58937],
+ [59311, 2826],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ ]
for (options, cs1, cs2, cs3, cs4) in options_list:
- os.environ['JPEGMEM'] = '500M'
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_126.tif', src_ds, options=options)
+ os.environ["JPEGMEM"] = "500M"
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_126.tif", src_ds, options=options
+ )
ds = None
- del os.environ['JPEGMEM']
+ del os.environ["JPEGMEM"]
- ds = gdal.Open('/vsimem/tiff_write_126.tif')
+ ds = gdal.Open("/vsimem/tiff_write_126.tif")
# Officially we have 0 public overviews...
assert ds.GetRasterBand(1).GetOverviewCount() == 0, options
# But they do exist...
@@ -4635,28 +5481,48 @@ def test_tiff_write_126():
assert cs in cs4, options
assert ds.GetRasterBand(1).GetOverview(-1) is None, options
assert ds.GetRasterBand(1).GetOverview(3) is None, options
- ovr_1_data = ds.GetRasterBand(1).GetOverview(1).GetDataset().ReadRaster(0, 0, 400, 200)
+ ovr_1_data = (
+ ds.GetRasterBand(1).GetOverview(1).GetDataset().ReadRaster(0, 0, 400, 200)
+ )
subsampled_data = ds.ReadRaster(0, 0, 1600, 800, 400, 200)
assert ovr_1_data == subsampled_data, options
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126.tif')
-
- src_ds = gdal.Open('../gdrivers/data/small_world_400pct_1band.vrt')
-
- options_list = [(['COMPRESS=JPEG'], [49887, 58937], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'TILED=YES'], [49887, 58937], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'BLOCKYSIZE=800'], [49887, 58937], [30829, 34806], [11664, 58937]),
- (['COMPRESS=JPEG', 'BLOCKYSIZE=32'], [49887, 58937], [30829, 34806], [11664, 58937]),
- ]
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126.tif")
+
+ src_ds = gdal.Open("../gdrivers/data/small_world_400pct_1band.vrt")
+
+ options_list = [
+ (["COMPRESS=JPEG"], [49887, 58937], [30829, 34806], [11664, 58937]),
+ (
+ ["COMPRESS=JPEG", "TILED=YES"],
+ [49887, 58937],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "BLOCKYSIZE=800"],
+ [49887, 58937],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ (
+ ["COMPRESS=JPEG", "BLOCKYSIZE=32"],
+ [49887, 58937],
+ [30829, 34806],
+ [11664, 58937],
+ ),
+ ]
for (options, cs1, cs3, cs4) in options_list:
- os.environ['JPEGMEM'] = '500M'
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_126.tif', src_ds, options=options)
+ os.environ["JPEGMEM"] = "500M"
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_126.tif", src_ds, options=options
+ )
ds = None
- del os.environ['JPEGMEM']
+ del os.environ["JPEGMEM"]
- ds = gdal.Open('/vsimem/tiff_write_126.tif')
+ ds = gdal.Open("/vsimem/tiff_write_126.tif")
# Officially we have 0 public overviews...
assert ds.GetRasterBand(1).GetOverviewCount() == 0, options
# But they do exist...
@@ -4666,22 +5532,28 @@ def test_tiff_write_126():
assert cs in cs3, options
cs = ds.GetRasterBand(1).GetOverview(2).Checksum()
assert cs in cs4, options
- ovr_1_data = ds.GetRasterBand(1).GetOverview(1).GetDataset().ReadRaster(0, 0, 400, 200)
+ ovr_1_data = (
+ ds.GetRasterBand(1).GetOverview(1).GetDataset().ReadRaster(0, 0, 400, 200)
+ )
subsampled_data = ds.ReadRaster(0, 0, 1600, 800, 400, 200)
assert ovr_1_data == subsampled_data, options
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126.tif")
# Test single-strip, opened as split band
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_126_src.tif', 8, 2001)
+ src_ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_126_src.tif", 8, 2001)
src_ds.GetRasterBand(1).Fill(255)
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_126.tif', src_ds, options=['COMPRESS=JPEG', 'BLOCKYSIZE=2001'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_126.tif",
+ src_ds,
+ options=["COMPRESS=JPEG", "BLOCKYSIZE=2001"],
+ )
src_ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126_src.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126_src.tif")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_126.tif')
+ ds = gdal.Open("/vsimem/tiff_write_126.tif")
assert ds.GetRasterBand(1).GetBlockSize() == [8, 1]
ovr_ds = ds.GetRasterBand(1).GetOverview(1).GetDataset()
ovr_1_data = ovr_ds.ReadRaster(0, 0, ovr_ds.RasterXSize, ovr_ds.RasterYSize, 1, 1)
@@ -4689,36 +5561,48 @@ def test_tiff_write_126():
assert ovr_1_data == subsampled_data
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126.tif")
# We need libtiff 4.0.4 (unreleased at that time)
- if md['LIBTIFF'] != 'INTERNAL':
- print('skipping tests that will fail without internal libtiff')
+ if md["LIBTIFF"] != "INTERNAL":
+ print("skipping tests that will fail without internal libtiff")
return
# Test with completely sparse file
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_126.tif', 1024, 1024, options=['COMPRESS=JPEG', 'SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_126.tif",
+ 1024,
+ 1024,
+ options=["COMPRESS=JPEG", "SPARSE_OK=YES"],
+ )
ds = None
- ds = gdal.Open('/vsimem/tiff_write_126.tif')
+ ds = gdal.Open("/vsimem/tiff_write_126.tif")
assert ds.GetRasterBand(1).GetOverview(0) is not None
- assert ds.GetRasterBand(1).GetMetadataItem('JPEGTABLES', 'TIFF') is not None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF') is None
- assert ds.GetRasterBand(1).GetMetadataItem('BLOCK_SIZE_0_0', 'TIFF') is None
+ assert ds.GetRasterBand(1).GetMetadataItem("JPEGTABLES", "TIFF") is not None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF") is None
+ assert ds.GetRasterBand(1).GetMetadataItem("BLOCK_SIZE_0_0", "TIFF") is None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126.tif")
# Test with partially sparse file
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_126.tif', 1024, 1024, 3, options=['COMPRESS=JPEG', 'SPARSE_OK=YES', 'INTERLEAVE=BAND'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_126.tif",
+ 1024,
+ 1024,
+ 3,
+ options=["COMPRESS=JPEG", "SPARSE_OK=YES", "INTERLEAVE=BAND"],
+ )
# Fill band 3, but let blocks of band 1 unwritten.
ds.GetRasterBand(3).Fill(0)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_126.tif')
+ ds = gdal.Open("/vsimem/tiff_write_126.tif")
cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs == 0
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_126.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_126.tif")
+
###############################################################################
# Test setting/unsetting metadata in update mode (#5628)
@@ -4726,52 +5610,53 @@ def test_tiff_write_126():
def test_tiff_write_127():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_127.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_127.tif", 1, 1)
ds = None
for i in range(2):
- ds = gdal.Open('/vsimem/tiff_write_127.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_127.tif", gdal.GA_Update)
obj = ds if i == 0 else ds.GetRasterBand(1)
- obj.SetMetadata({'key': 'value'})
+ obj.SetMetadata({"key": "value"})
obj = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_127.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_127.tif", gdal.GA_Update)
obj = ds if i == 0 else ds.GetRasterBand(1)
- if obj.GetMetadataItem('key') != 'value':
+ if obj.GetMetadataItem("key") != "value":
print(i)
pytest.fail(obj.GetMetadata())
obj.SetMetadata({})
obj = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_127.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_127.tif", gdal.GA_Update)
obj = ds if i == 0 else ds.GetRasterBand(1)
assert not obj.GetMetadata(), i
- obj.SetMetadataItem('key', 'value')
+ obj.SetMetadataItem("key", "value")
obj = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_127.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_127.tif", gdal.GA_Update)
obj = ds if i == 0 else ds.GetRasterBand(1)
- assert obj.GetMetadataItem('key') == 'value', i
- obj.SetMetadataItem('key', None)
+ assert obj.GetMetadataItem("key") == "value", i
+ obj.SetMetadataItem("key", None)
obj = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_127.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_127.tif", gdal.GA_Update)
obj = ds if i == 0 else ds.GetRasterBand(1)
assert not obj.GetMetadata(), i
obj = None
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_127.tif.aux.xml')
+ statBuf = gdal.VSIStatL("/vsimem/tiff_write_127.tif.aux.xml")
if statBuf is not None:
print(i)
- pytest.fail('unexpected PAM file')
+ pytest.fail("unexpected PAM file")
+
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_127.tif")
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_127.tif')
###############################################################################
# Test lossless copying of a CMYK JPEG into JPEG-in-TIFF (#5712)
@@ -4780,61 +5665,87 @@ def test_tiff_write_127():
def test_tiff_write_128():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', 'NO')
- src_ds = gdal.Open('../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg')
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', None)
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", "NO")
+ src_ds = gdal.Open("../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg")
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", None)
# Will received implicitly CMYK photometric interpretation.
- old_val = gdal.GetConfigOption('GDAL_PAM_ENABLED')
- gdal.SetConfigOption('GDAL_PAM_ENABLED', 'NO')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_128.tif', src_ds, options=['COMPRESS=JPEG'])
+ old_val = gdal.GetConfigOption("GDAL_PAM_ENABLED")
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", "NO")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_128.tif", src_ds, options=["COMPRESS=JPEG"]
+ )
ds = None
- gdal.SetConfigOption('GDAL_PAM_ENABLED', old_val)
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", old_val)
# We need to reopen in raw to avoig automatic CMYK->RGBA to trigger
- ds = gdal.Open('GTIFF_RAW:/vsimem/tiff_write_128.tif')
+ ds = gdal.Open("GTIFF_RAW:/vsimem/tiff_write_128.tif")
for i in range(4):
- assert src_ds.GetRasterBand(i + 1).GetColorInterpretation() == ds.GetRasterBand(i + 1).GetColorInterpretation()
- assert src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ src_ds.GetRasterBand(i + 1).GetColorInterpretation()
+ == ds.GetRasterBand(i + 1).GetColorInterpretation()
+ )
+ assert (
+ src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_128.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_128.tif")
# Try with explicit CMYK photometric interpretation
- old_val = gdal.GetConfigOption('GDAL_PAM_ENABLED')
- gdal.SetConfigOption('GDAL_PAM_ENABLED', 'NO')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_128.tif', src_ds, options=['COMPRESS=JPEG', 'PHOTOMETRIC=CMYK'])
+ old_val = gdal.GetConfigOption("GDAL_PAM_ENABLED")
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", "NO")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_128.tif",
+ src_ds,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=CMYK"],
+ )
ds = None
- gdal.SetConfigOption('GDAL_PAM_ENABLED', old_val)
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", old_val)
# We need to reopen in raw to avoig automatic CMYK->RGBA to trigger
- ds = gdal.Open('GTIFF_RAW:/vsimem/tiff_write_128.tif')
+ ds = gdal.Open("GTIFF_RAW:/vsimem/tiff_write_128.tif")
for i in range(4):
- assert src_ds.GetRasterBand(i + 1).GetColorInterpretation() == ds.GetRasterBand(i + 1).GetColorInterpretation()
- assert src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ src_ds.GetRasterBand(i + 1).GetColorInterpretation()
+ == ds.GetRasterBand(i + 1).GetColorInterpretation()
+ )
+ assert (
+ src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_128.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_128.tif")
# Try with more neutral colorspace in the case the source JPEG is not really CMYK (yes that happens !)
- old_val = gdal.GetConfigOption('GDAL_PAM_ENABLED')
- gdal.SetConfigOption('GDAL_PAM_ENABLED', 'NO')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_128.tif', src_ds, options=['COMPRESS=JPEG', 'PHOTOMETRIC=MINISBLACK', 'PROFILE=BASELINE'])
+ old_val = gdal.GetConfigOption("GDAL_PAM_ENABLED")
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", "NO")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_128.tif",
+ src_ds,
+ options=["COMPRESS=JPEG", "PHOTOMETRIC=MINISBLACK", "PROFILE=BASELINE"],
+ )
ds = None
- gdal.SetConfigOption('GDAL_PAM_ENABLED', old_val)
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", old_val)
# Here we can reopen without GTIFF_RAW trick
- ds = gdal.Open('/vsimem/tiff_write_128.tif')
+ ds = gdal.Open("/vsimem/tiff_write_128.tif")
for i in range(4):
# The color interpretation will NOT be CMYK
- assert src_ds.GetRasterBand(i + 1).GetColorInterpretation() != ds.GetRasterBand(i + 1).GetColorInterpretation()
- assert src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ assert (
+ src_ds.GetRasterBand(i + 1).GetColorInterpretation()
+ != ds.GetRasterBand(i + 1).GetColorInterpretation()
+ )
+ assert (
+ src_ds.GetRasterBand(i + 1).Checksum() == ds.GetRasterBand(i + 1).Checksum()
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_128.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_128.tif")
+
###############################################################################
# Check effective guessing of existing JPEG quality
@@ -4842,31 +5753,44 @@ def test_tiff_write_128():
def test_tiff_write_129():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- for jpegtablesmode in ['1', '3']:
- for photometric in ['RGB', 'YCBCR']:
+ for jpegtablesmode in ["1", "3"]:
+ for photometric in ["RGB", "YCBCR"]:
cs_ref = 0
for i in range(2):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_129.tif', 64, 32, 3,
- options=['COMPRESS=JPEG', 'TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32', 'JPEG_QUALITY=50', 'PHOTOMETRIC=' + photometric, 'JPEGTABLESMODE=' + jpegtablesmode])
- src_ds = gdal.Open('data/rgbsmall.tif')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_129.tif",
+ 64,
+ 32,
+ 3,
+ options=[
+ "COMPRESS=JPEG",
+ "TILED=YES",
+ "BLOCKXSIZE=32",
+ "BLOCKYSIZE=32",
+ "JPEG_QUALITY=50",
+ "PHOTOMETRIC=" + photometric,
+ "JPEGTABLESMODE=" + jpegtablesmode,
+ ],
+ )
+ src_ds = gdal.Open("data/rgbsmall.tif")
data = src_ds.ReadRaster(0, 0, 32, 32)
ds.WriteRaster(0, 0, 32, 32, data)
# In second pass, we re-open the dataset
if i == 1:
ds = None
- ds = gdal.Open('/vsimem/tiff_write_129.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_129.tif", gdal.GA_Update)
ds.WriteRaster(32, 0, 32, 32, data)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_129.tif')
+ ds = gdal.Open("/vsimem/tiff_write_129.tif")
with gdaltest.SetCacheMax(0):
cs = ds.GetRasterBand(1).Checksum()
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_129.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_129.tif")
if i == 0:
cs_ref = cs
@@ -4882,32 +5806,37 @@ def test_tiff_write_129():
def test_tiff_write_130():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- shutil.copyfile('data/byte_jpg_unusual_jpegtable.tif', 'tmp/byte_jpg_unusual_jpegtable.tif')
- ds = gdal.Open('tmp/byte_jpg_unusual_jpegtable.tif', gdal.GA_Update)
+ shutil.copyfile(
+ "data/byte_jpg_unusual_jpegtable.tif", "tmp/byte_jpg_unusual_jpegtable.tif"
+ )
+ ds = gdal.Open("tmp/byte_jpg_unusual_jpegtable.tif", gdal.GA_Update)
assert ds.GetRasterBand(1).Checksum() == 4771
- src_ds = gdal.Open('data/byte.tif', gdal.GA_Update)
+ src_ds = gdal.Open("data/byte.tif", gdal.GA_Update)
ds.WriteRaster(0, 0, 20, 20, src_ds.ReadRaster())
src_ds = None
ds = None
- ds = gdal.Open('tmp/byte_jpg_unusual_jpegtable.tif')
+ ds = gdal.Open("tmp/byte_jpg_unusual_jpegtable.tif")
assert ds.GetRasterBand(1).Checksum() == 4743
ds = None
- os.unlink('tmp/byte_jpg_unusual_jpegtable.tif')
+ os.unlink("tmp/byte_jpg_unusual_jpegtable.tif")
- shutil.copyfile('data/byte_jpg_tablesmodezero.tif', 'tmp/byte_jpg_tablesmodezero.tif')
- ds = gdal.Open('tmp/byte_jpg_tablesmodezero.tif', gdal.GA_Update)
+ shutil.copyfile(
+ "data/byte_jpg_tablesmodezero.tif", "tmp/byte_jpg_tablesmodezero.tif"
+ )
+ ds = gdal.Open("tmp/byte_jpg_tablesmodezero.tif", gdal.GA_Update)
assert ds.GetRasterBand(1).Checksum() == 4743
- src_ds = gdal.Open('data/byte.tif', gdal.GA_Update)
+ src_ds = gdal.Open("data/byte.tif", gdal.GA_Update)
ds.WriteRaster(0, 0, 20, 20, src_ds.ReadRaster())
src_ds = None
ds = None
- ds = gdal.Open('tmp/byte_jpg_tablesmodezero.tif')
+ ds = gdal.Open("tmp/byte_jpg_tablesmodezero.tif")
assert ds.GetRasterBand(1).Checksum() == 4743
ds = None
- os.unlink('tmp/byte_jpg_tablesmodezero.tif')
+ os.unlink("tmp/byte_jpg_tablesmodezero.tif")
+
###############################################################################
# Test LZMA compression
@@ -4916,18 +5845,19 @@ def test_tiff_write_130():
def test_tiff_write_131(level=1):
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LZMA') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LZMA") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_131.tif'
- src_ds = gdal.Open('data/byte.tif')
- ds = gdaltest.tiff_drv.CreateCopy(filename, src_ds,
- options=['COMPRESS=LZMA', 'LZMA_PRESET=' + str(level)])
+ filename = "/vsimem/tiff_write_131.tif"
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ filename, src_ds, options=["COMPRESS=LZMA", "LZMA_PRESET=" + str(level)]
+ )
assert ds.GetRasterBand(1).Checksum() == 4672
ds = None
# LZMA requires an howful amount of memory even on small files
- if gdal.GetLastErrorMsg().find('cannot allocate memory') >= 0:
+ if gdal.GetLastErrorMsg().find("cannot allocate memory") >= 0:
gdal.Unlink(filename)
pytest.skip()
@@ -4950,36 +5880,39 @@ def test_tiff_write_132():
for i in range(2):
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_132.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_132.tif", 1, 1)
ds = None
# Open in read-only
- ds = gdal.Open('/vsimem/tiff_write_132.tif')
- ds.SetMetadataItem('FOO', 'BAR')
- ds.GetRasterBand(1).SetMetadataItem('FOO', 'BAR')
+ ds = gdal.Open("/vsimem/tiff_write_132.tif")
+ ds.SetMetadataItem("FOO", "BAR")
+ ds.GetRasterBand(1).SetMetadataItem("FOO", "BAR")
ds = None
# Check that PAM file exists
- assert gdal.VSIStatL('/vsimem/tiff_write_132.tif.aux.xml') is not None
+ assert gdal.VSIStatL("/vsimem/tiff_write_132.tif.aux.xml") is not None
# Open in read-write
- ds = gdal.Open('/vsimem/tiff_write_132.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_132.tif", gdal.GA_Update)
if i == 0:
- ds.SetMetadataItem('FOO', 'BAZ')
- ds.GetRasterBand(1).SetMetadataItem('FOO', 'BAZ')
+ ds.SetMetadataItem("FOO", "BAZ")
+ ds.GetRasterBand(1).SetMetadataItem("FOO", "BAZ")
else:
- ds.SetMetadata({'FOO': 'BAZ'})
- ds.GetRasterBand(1).SetMetadata({'FOO': 'BAZ'})
+ ds.SetMetadata({"FOO": "BAZ"})
+ ds.GetRasterBand(1).SetMetadata({"FOO": "BAZ"})
ds = None
# Check that PAM file no longer exists
- assert gdal.VSIStatL('/vsimem/tiff_write_132.tif.aux.xml') is None, i
+ assert gdal.VSIStatL("/vsimem/tiff_write_132.tif.aux.xml") is None, i
- ds = gdal.Open('/vsimem/tiff_write_132.tif')
- assert ds.GetMetadataItem('FOO') == 'BAZ' and ds.GetRasterBand(1).GetMetadataItem('FOO') == 'BAZ'
+ ds = gdal.Open("/vsimem/tiff_write_132.tif")
+ assert (
+ ds.GetMetadataItem("FOO") == "BAZ"
+ and ds.GetRasterBand(1).GetMetadataItem("FOO") == "BAZ"
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_132.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_132.tif")
###############################################################################
@@ -4988,12 +5921,14 @@ def test_tiff_write_132():
def test_tiff_write_133():
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_133.tif', 1024, 1000, 3, options=['STREAMABLE_OUTPUT=YES'])
+ src_ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_133.tif", 1024, 1000, 3, options=["STREAMABLE_OUTPUT=YES"]
+ )
src_ds.SetGeoTransform([1, 2, 0, 3, 0, -2])
srs = osr.SpatialReference()
- srs.SetFromUserInput('EPSG:32601')
+ srs.SetFromUserInput("EPSG:32601")
src_ds.SetProjection(srs.ExportToWkt())
- src_ds.SetMetadataItem('FOO', 'BAR')
+ src_ds.SetMetadataItem("FOO", "BAR")
src_ds.GetRasterBand(1).SetNoDataValue(127)
src_ds.GetRasterBand(1).Fill(64)
src_ds.GetRasterBand(2).Fill(127)
@@ -5009,7 +5944,7 @@ def test_tiff_write_133():
gdal.PopErrorHandler()
assert ret != 0
gdal.PushErrorHandler()
- ret = src_ds.SetMetadataItem('FOO', 'BAZ')
+ ret = src_ds.SetMetadataItem("FOO", "BAZ")
gdal.PopErrorHandler()
assert ret != 0
gdal.PushErrorHandler()
@@ -5017,7 +5952,7 @@ def test_tiff_write_133():
gdal.PopErrorHandler()
assert ret != 0
gdal.PushErrorHandler()
- ret = src_ds.GetRasterBand(1).SetMetadataItem('FOO', 'BAZ')
+ ret = src_ds.GetRasterBand(1).SetMetadataItem("FOO", "BAZ")
gdal.PopErrorHandler()
assert ret != 0
gdal.PushErrorHandler()
@@ -5030,16 +5965,20 @@ def test_tiff_write_133():
assert ret != 0
# Pixel interleaved
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_133_dst.tif', src_ds, options=['STREAMABLE_OUTPUT=YES', 'BLOCKYSIZE=32'])
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_133_dst.tif",
+ src_ds,
+ options=["STREAMABLE_OUTPUT=YES", "BLOCKYSIZE=32"],
+ )
out_ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
- ds = gdal.Open('/vsimem/tiff_write_133_dst.tif')
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
- assert ds.GetProjectionRef().find('32601') >= 0
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
+ ds = gdal.Open("/vsimem/tiff_write_133_dst.tif")
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
+ assert ds.GetProjectionRef().find("32601") >= 0
assert ds.GetGeoTransform() == (1.0, 2.0, 0.0, 3.0, 0.0, -2.0)
- assert ds.GetMetadataItem('FOO') == 'BAR'
- assert ds.GetMetadataItem('UNORDERED_BLOCKS', 'TIFF') is None
+ assert ds.GetMetadataItem("FOO") == "BAR"
+ assert ds.GetMetadataItem("UNORDERED_BLOCKS", "TIFF") is None
with gdaltest.SetCacheMax(0):
for y in range(1000):
@@ -5053,19 +5992,23 @@ def test_tiff_write_133():
gdal.PopErrorHandler()
assert got_data is None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_133_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_133_dst.tif")
# Tiled
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_133_dst.tif', src_ds, options=['STREAMABLE_OUTPUT=YES', 'TILED=YES'])
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_133_dst.tif",
+ src_ds,
+ options=["STREAMABLE_OUTPUT=YES", "TILED=YES"],
+ )
out_ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
- ds = gdal.Open('/vsimem/tiff_write_133_dst.tif')
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
- assert ds.GetProjectionRef().find('32601') >= 0
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
+ ds = gdal.Open("/vsimem/tiff_write_133_dst.tif")
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
+ assert ds.GetProjectionRef().find("32601") >= 0
assert ds.GetGeoTransform() == (1.0, 2.0, 0.0, 3.0, 0.0, -2.0)
- assert ds.GetMetadataItem('FOO') == 'BAR'
- assert ds.GetMetadataItem('UNORDERED_BLOCKS', 'TIFF') is None
+ assert ds.GetMetadataItem("FOO") == "BAR"
+ assert ds.GetMetadataItem("UNORDERED_BLOCKS", "TIFF") is None
with gdaltest.SetCacheMax(0):
for yblock in range(int((1000 + 256 - 1) / 256)):
@@ -5082,16 +6025,20 @@ def test_tiff_write_133():
assert got_data is not None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_133_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_133_dst.tif")
# Band interleaved
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_133_dst.tif', src_ds, options=['STREAMABLE_OUTPUT=YES', 'INTERLEAVE=BAND'])
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_133_dst.tif",
+ src_ds,
+ options=["STREAMABLE_OUTPUT=YES", "INTERLEAVE=BAND"],
+ )
out_ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
- ds = gdal.Open('/vsimem/tiff_write_133_dst.tif')
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
- assert ds.GetMetadataItem('UNORDERED_BLOCKS', 'TIFF') is None
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
+ ds = gdal.Open("/vsimem/tiff_write_133_dst.tif")
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
+ assert ds.GetMetadataItem("UNORDERED_BLOCKS", "TIFF") is None
with gdaltest.SetCacheMax(0):
for band in range(3):
@@ -5099,18 +6046,22 @@ def test_tiff_write_133():
got_data = ds.GetRasterBand(band + 1).ReadRaster(0, y, 1024, 1)
assert got_data is not None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_133_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_133_dst.tif")
# BIGTIFF
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('BigTIFF') >= 0:
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_133_dst.tif', src_ds, options=['STREAMABLE_OUTPUT=YES', 'BIGTIFF=YES'])
+ if md["DMD_CREATIONOPTIONLIST"].find("BigTIFF") >= 0:
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_133_dst.tif",
+ src_ds,
+ options=["STREAMABLE_OUTPUT=YES", "BIGTIFF=YES"],
+ )
out_ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
- ds = gdal.Open('/vsimem/tiff_write_133_dst.tif')
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
- assert ds.GetMetadataItem('UNORDERED_BLOCKS', 'TIFF') is None
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
+ ds = gdal.Open("/vsimem/tiff_write_133_dst.tif")
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
+ assert ds.GetMetadataItem("UNORDERED_BLOCKS", "TIFF") is None
with gdaltest.SetCacheMax(0):
for y in range(1000):
@@ -5118,61 +6069,73 @@ def test_tiff_write_133():
assert got_data is not None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_133_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_133_dst.tif")
# Compression not supported
gdal.PushErrorHandler()
- out_ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_133_dst.tif', src_ds, options=['STREAMABLE_OUTPUT=YES', 'COMPRESS=DEFLATE'])
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_133_dst.tif",
+ src_ds,
+ options=["STREAMABLE_OUTPUT=YES", "COMPRESS=DEFLATE"],
+ )
gdal.PopErrorHandler()
assert out_ds is None
# Test writing into a non authorized file
- ds = gdaltest.tiff_drv.Create('/foo/bar', 1024, 1000, 3, options=['STREAMABLE_OUTPUT=YES', 'BLOCKYSIZE=1'])
+ ds = gdaltest.tiff_drv.Create(
+ "/foo/bar", 1024, 1000, 3, options=["STREAMABLE_OUTPUT=YES", "BLOCKYSIZE=1"]
+ )
assert ds is None
gdal.PushErrorHandler()
- out_ds = gdaltest.tiff_drv.CreateCopy('/foo/bar', src_ds, options=['STREAMABLE_OUTPUT=YES'])
+ out_ds = gdaltest.tiff_drv.CreateCopy(
+ "/foo/bar", src_ds, options=["STREAMABLE_OUTPUT=YES"]
+ )
gdal.PopErrorHandler()
assert out_ds is None
src_ds = None
# Classical TIFF with IFD not at offset 8
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
gdal.PushErrorHandler()
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
gdal.PopErrorHandler()
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
assert ds is None
# BigTIFF with IFD not at offset 16
- if md['DMD_CREATIONOPTIONLIST'].find('BigTIFF') >= 0:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_133.tif', 1024, 1000, 3, options=['BIGTIFF=YES'])
+ if md["DMD_CREATIONOPTIONLIST"].find("BigTIFF") >= 0:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_133.tif", 1024, 1000, 3, options=["BIGTIFF=YES"]
+ )
ds.GetRasterBand(1).Fill(0)
ds.FlushCache()
ds.SetGeoTransform([1, 2, 0, 3, 0, -2])
ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
gdal.PushErrorHandler()
- ds = gdal.Open('/vsimem/tiff_write_133.tif')
+ ds = gdal.Open("/vsimem/tiff_write_133.tif")
gdal.PopErrorHandler()
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
assert ds is None
# Test reading strips in not increasing order
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_133.tif', 1024, 1000, 3, options=['BLOCKYSIZE=1'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_133.tif", 1024, 1000, 3, options=["BLOCKYSIZE=1"]
+ )
for y in range(1000):
- ds.WriteRaster(0, 1000 - y - 1, 1024, 1, 'a' * (3 * 1024))
+ ds.WriteRaster(0, 1000 - y - 1, 1024, 1, "a" * (3 * 1024))
ds.FlushCache()
ds = None
- gdal.SetConfigOption('TIFF_READ_STREAMING', 'YES')
+ gdal.SetConfigOption("TIFF_READ_STREAMING", "YES")
gdal.PushErrorHandler()
- ds = gdal.Open('/vsimem/tiff_write_133.tif')
+ ds = gdal.Open("/vsimem/tiff_write_133.tif")
gdal.PopErrorHandler()
- gdal.SetConfigOption('TIFF_READ_STREAMING', None)
- assert ds.GetMetadataItem('UNORDERED_BLOCKS', 'TIFF') == 'YES'
+ gdal.SetConfigOption("TIFF_READ_STREAMING", None)
+ assert ds.GetMetadataItem("UNORDERED_BLOCKS", "TIFF") == "YES"
with gdaltest.SetCacheMax(0):
for y in range(1000):
@@ -5180,26 +6143,39 @@ def test_tiff_write_133():
assert got_data is not None
# Test writing strips in not increasing order in a streamable output
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_133.tif', 1024, 1000, 3, options=['STREAMABLE_OUTPUT=YES', 'BLOCKYSIZE=1'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_133.tif",
+ 1024,
+ 1000,
+ 3,
+ options=["STREAMABLE_OUTPUT=YES", "BLOCKYSIZE=1"],
+ )
gdal.ErrorReset()
gdal.PushErrorHandler()
- ret = ds.WriteRaster(0, 999, 1024, 1, 'a' * (3 * 1024))
+ ret = ds.WriteRaster(0, 999, 1024, 1, "a" * (3 * 1024))
ds.FlushCache()
gdal.PopErrorHandler()
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
ds = None
# Test writing tiles in not increasing order in a streamable output
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_133.tif', 1024, 1000, 3, options=['STREAMABLE_OUTPUT=YES', 'TILED=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_133.tif",
+ 1024,
+ 1000,
+ 3,
+ options=["STREAMABLE_OUTPUT=YES", "TILED=YES"],
+ )
gdal.ErrorReset()
gdal.PushErrorHandler()
- ret = ds.WriteRaster(256, 256, 256, 256, 'a' * (3 * 256 * 256))
+ ret = ds.WriteRaster(256, 256, 256, 256, "a" * (3 * 256 * 256))
ds.FlushCache()
gdal.PopErrorHandler()
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_133.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_133.tif")
+
###############################################################################
# Test DISCARD_LSB
@@ -5207,82 +6183,144 @@ def test_tiff_write_133():
def test_tiff_write_134():
- for interleave in ['BAND', 'PIXEL']:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 3, options=['DISCARD_LSB=0,1,3', 'INTERLEAVE='+interleave])
+ for interleave in ["BAND", "PIXEL"]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 3,
+ options=["DISCARD_LSB=0,1,3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).Fill(127)
ds.GetRasterBand(2).Fill(127)
ds.GetRasterBand(3).Fill(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster())[0]
- val2 = struct.unpack('B', ds.GetRasterBand(2).ReadRaster())[0]
- val3 = struct.unpack('B', ds.GetRasterBand(3).ReadRaster())[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack("B", ds.GetRasterBand(1).ReadRaster())[0]
+ val2 = struct.unpack("B", ds.GetRasterBand(2).ReadRaster())[0]
+ val3 = struct.unpack("B", ds.GetRasterBand(3).ReadRaster())[0]
assert val1 == 127 and val2 == 126 and val3 == 128
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134_src.tif', 1, 1, 3)
+ src_ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_134_src.tif", 1, 1, 3)
src_ds.GetRasterBand(1).Fill(127)
src_ds.GetRasterBand(2).Fill(127)
src_ds.GetRasterBand(3).Fill(255)
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_134.tif', src_ds, options=['DISCARD_LSB=0,1,3'])
- ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster())[0]
- val2 = struct.unpack('B', ds.GetRasterBand(2).ReadRaster())[0]
- val3 = struct.unpack('B', ds.GetRasterBand(3).ReadRaster())[0]
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_134.tif", src_ds, options=["DISCARD_LSB=0,1,3"]
+ )
+ ds = None
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack("B", ds.GetRasterBand(1).ReadRaster())[0]
+ val2 = struct.unpack("B", ds.GetRasterBand(2).ReadRaster())[0]
+ val3 = struct.unpack("B", ds.GetRasterBand(3).ReadRaster())[0]
assert val1 == 127 and val2 == 126 and val3 == 255
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134_src.tif')
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
-
- for (inval, expected_val) in [(0, 0), (1, 0), (2, 0), (3, 0), (4, 8), (254, 255), (255, 255)]:
- for interleave in ['BAND', 'PIXEL']:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, gdal.GDT_Byte, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134_src.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
+
+ for (inval, expected_val) in [
+ (0, 0),
+ (1, 0),
+ (2, 0),
+ (3, 0),
+ (4, 8),
+ (254, 255),
+ (255, 255),
+ ]:
+ for interleave in ["BAND", "PIXEL"]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ gdal.GDT_Byte,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).Fill(inval)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster())[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack("B", ds.GetRasterBand(1).ReadRaster())[0]
assert val1 == expected_val, (inval, expected_val)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
-
- for (inval, expected_val) in [(-32768, -32768),
- (-32767,-32768),
- (-32764,-32768),
- (-8, -8),
- (-1, -8), # this truncation is questionable
- (0, 0),
- (1,0),
- (3, 0),
- (4,8),
- (8,8),
- (32766,32760),
- (32767, 32760)]:
- for interleave in ['BAND', 'PIXEL']:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, gdal.GDT_Int16, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
+
+ for (inval, expected_val) in [
+ (-32768, -32768),
+ (-32767, -32768),
+ (-32764, -32768),
+ (-8, -8),
+ (-1, -8), # this truncation is questionable
+ (0, 0),
+ (1, 0),
+ (3, 0),
+ (4, 8),
+ (8, 8),
+ (32766, 32760),
+ (32767, 32760),
+ ]:
+ for interleave in ["BAND", "PIXEL"]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ gdal.GDT_Int16,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).Fill(inval)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('h', ds.GetRasterBand(1).ReadRaster())[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack("h", ds.GetRasterBand(1).ReadRaster())[0]
assert val1 == expected_val, (inval, expected_val)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
-
- for (inval, expected_val) in [(0,0), (1,0), (3, 0), (4,8), (8,8), (65534,65528), (65535,65528)]:
- for interleave in ['BAND', 'PIXEL']:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, gdal.GDT_UInt16, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
+
+ for (inval, expected_val) in [
+ (0, 0),
+ (1, 0),
+ (3, 0),
+ (4, 8),
+ (8, 8),
+ (65534, 65528),
+ (65535, 65528),
+ ]:
+ for interleave in ["BAND", "PIXEL"]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ gdal.GDT_UInt16,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).Fill(inval)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('H', ds.GetRasterBand(1).ReadRaster())[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack("H", ds.GetRasterBand(1).ReadRaster())[0]
assert val1 == expected_val, (inval, expected_val)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
-
- for interleave in ['BAND', 'PIXEL']:
- for dt in [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16, gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 3, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
+
+ for interleave in ["BAND", "PIXEL"]:
+ for dt in [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 3,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
if dt == gdal.GDT_Int16:
ds.GetRasterBand(1).Fill(-127)
else:
@@ -5290,109 +6328,203 @@ def test_tiff_write_134():
ds.GetRasterBand(2).Fill(123)
ds.GetRasterBand(3).Fill(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('h', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Int16))[0]
- val2 = struct.unpack('h', ds.GetRasterBand(2).ReadRaster(0,0,1,1,1,1,gdal.GDT_Int16))[0]
- val3 = struct.unpack('h', ds.GetRasterBand(3).ReadRaster(0,0,1,1,1,1,gdal.GDT_Int16))[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack(
+ "h", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Int16)
+ )[0]
+ val2 = struct.unpack(
+ "h", ds.GetRasterBand(2).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Int16)
+ )[0]
+ val3 = struct.unpack(
+ "h", ds.GetRasterBand(3).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Int16)
+ )[0]
if dt in (gdal.GDT_Float32, gdal.GDT_Float64):
- assert val1 == 127 and val2 == 123 and val3 == 127, (interleave, dt, (val1, val2, val3))
+ assert val1 == 127 and val2 == 123 and val3 == 127, (
+ interleave,
+ dt,
+ (val1, val2, val3),
+ )
elif dt == gdal.GDT_Int16:
- assert val1 == -128 and val2 == 120 and val3 == 128, (interleave, dt, (val1, val2, val3))
+ assert val1 == -128 and val2 == 120 and val3 == 128, (
+ interleave,
+ dt,
+ (val1, val2, val3),
+ )
else:
- assert val1 == 128 and val2 == 120 and val3 == 128, (interleave, dt, (val1, val2, val3))
+ assert val1 == 128 and val2 == 120 and val3 == 128, (
+ interleave,
+ dt,
+ (val1, val2, val3),
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Test with nodata
- for interleave in ['BAND', 'PIXEL']:
- for dt in [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16, gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ for interleave in ["BAND", "PIXEL"]:
+ for dt in [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).SetNoDataValue(127)
ds.GetRasterBand(1).Fill(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Byte))[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack(
+ "B", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Byte)
+ )[0]
assert val1 == 127, (interleave, dt, val1)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Test with nodata and discarding non-nodata value would result to nodata without correction
- for interleave in ['BAND', 'PIXEL']:
- for dt in [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16, gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ for interleave in ["BAND", "PIXEL"]:
+ for dt in [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).SetNoDataValue(0)
ds.GetRasterBand(1).Fill(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Byte))[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack(
+ "B", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Byte)
+ )[0]
if dt in (gdal.GDT_Float32, gdal.GDT_Float64):
assert val1 == 1, (interleave, dt, val1)
else:
assert val1 == 8, (interleave, dt, val1)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Test with nodata out of range for integer values
- for interleave in ['BAND', 'PIXEL']:
- for dt in [gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16, gdal.GDT_Int32, gdal.GDT_UInt32, gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ for interleave in ["BAND", "PIXEL"]:
+ for dt in [
+ gdal.GDT_Byte,
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).SetNoDataValue(127.5)
ds.GetRasterBand(1).Fill(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
assert ds.GetRasterBand(1).GetNoDataValue() == 127.5
- val1 = struct.unpack('B', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Byte))[0]
+ val1 = struct.unpack(
+ "B", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Byte)
+ )[0]
if dt in (gdal.GDT_Float32, gdal.GDT_Float64):
assert val1 == 127, (interleave, dt, val1)
else:
assert val1 == 128, (interleave, dt, val1)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Test with some non-integer float value
- for interleave in ['BAND', 'PIXEL']:
+ for interleave in ["BAND", "PIXEL"]:
for dt in [gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
ds.GetRasterBand(1).Fill(-0.3)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('d', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Float64))[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack(
+ "d", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Float64)
+ )[0]
assert val1 != -0.3 and abs(val1 - -0.3) < 1e-5, dt
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Test with nan
- for interleave in ['BAND', 'PIXEL']:
+ for interleave in ["BAND", "PIXEL"]:
for dt in [gdal.GDT_Float32, gdal.GDT_Float64]:
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1, 2, dt, options=['DISCARD_LSB=3', 'INTERLEAVE='+interleave])
- ds.GetRasterBand(1).Fill(float('nan'))
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ 2,
+ dt,
+ options=["DISCARD_LSB=3", "INTERLEAVE=" + interleave],
+ )
+ ds.GetRasterBand(1).Fill(float("nan"))
ds = None
- ds = gdal.Open('/vsimem/tiff_write_134.tif')
- val1 = struct.unpack('f', ds.GetRasterBand(1).ReadRaster(0,0,1,1,1,1,gdal.GDT_Float32))[0]
+ ds = gdal.Open("/vsimem/tiff_write_134.tif")
+ val1 = struct.unpack(
+ "f", ds.GetRasterBand(1).ReadRaster(0, 0, 1, 1, 1, 1, gdal.GDT_Float32)
+ )[0]
assert math.isnan(val1)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_134.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_134.tif")
# Error cases
gdal.ErrorReset()
with gdaltest.error_handler():
- gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1,
- options=['DISCARD_LSB=1', 'PHOTOMETRIC=PALETTE'])
- assert gdal.GetLastErrorMsg() != ''
+ gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif",
+ 1,
+ 1,
+ options=["DISCARD_LSB=1", "PHOTOMETRIC=PALETTE"],
+ )
+ assert gdal.GetLastErrorMsg() != ""
gdal.ErrorReset()
with gdaltest.error_handler():
# Too many elements
- gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1,
- options=['DISCARD_LSB=1,2'])
- assert gdal.GetLastErrorMsg() != ''
+ gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif", 1, 1, options=["DISCARD_LSB=1,2"]
+ )
+ assert gdal.GetLastErrorMsg() != ""
gdal.ErrorReset()
with gdaltest.error_handler():
# Too many elements
- gdaltest.tiff_drv.Create('/vsimem/tiff_write_134.tif', 1, 1,
- options=['DISCARD_LSB=1', 'NBITS=7'])
- assert gdal.GetLastErrorMsg() != ''
+ gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_134.tif", 1, 1, options=["DISCARD_LSB=1", "NBITS=7"]
+ )
+ assert gdal.GetLastErrorMsg() != ""
+
###############################################################################
# Test clearing GCPs (#5945)
@@ -5401,54 +6533,55 @@ def test_tiff_write_134():
def test_tiff_write_135():
# Simple clear
- src_ds = gdal.Open('data/gcps.vrt')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_135.tif', src_ds)
+ src_ds = gdal.Open("data/gcps.vrt")
+ ds = gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_135.tif", src_ds)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif', gdal.GA_Update)
- ds.SetGCPs([], '')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif", gdal.GA_Update)
+ ds.SetGCPs([], "")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif")
assert not ds.GetGCPs()
- assert ds.GetGCPProjection() == ''
+ assert ds.GetGCPProjection() == ""
ds = None
# Double clear
- src_ds = gdal.Open('data/gcps.vrt')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_135.tif', src_ds)
+ src_ds = gdal.Open("data/gcps.vrt")
+ ds = gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_135.tif", src_ds)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif', gdal.GA_Update)
- ds.SetGCPs([], '')
- ds.SetGCPs([], '')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif", gdal.GA_Update)
+ ds.SetGCPs([], "")
+ ds.SetGCPs([], "")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif")
assert not ds.GetGCPs()
- assert ds.GetGCPProjection() == ''
+ assert ds.GetGCPProjection() == ""
ds = None
# Clear + set geotransform and new projection
- src_ds = gdal.Open('data/gcps.vrt')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_135.tif', src_ds)
+ src_ds = gdal.Open("data/gcps.vrt")
+ ds = gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_135.tif", src_ds)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif', gdal.GA_Update)
- ds.SetGCPs([], '')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif", gdal.GA_Update)
+ ds.SetGCPs([], "")
ds.SetGeoTransform([1, 2, 3, 4, 5, -6])
srs = osr.SpatialReference()
- srs.SetFromUserInput('EPSG:32601')
+ srs.SetFromUserInput("EPSG:32601")
ds.SetProjection(srs.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/tiff_write_135.tif')
+ ds = gdal.Open("/vsimem/tiff_write_135.tif")
assert not ds.GetGCPs()
assert ds.GetGeoTransform() == (1, 2, 3, 4, 5, -6)
- assert ds.GetProjectionRef().find('32601') >= 0
+ assert ds.GetProjectionRef().find("32601") >= 0
ds = None
- gdal.Unlink('/vsimem/tiff_write_135.tif')
+ gdal.Unlink("/vsimem/tiff_write_135.tif")
+
###############################################################################
# Test writing a single-strip mono-bit dataset
@@ -5456,19 +6589,24 @@ def test_tiff_write_135():
def test_tiff_write_136():
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_136_src.tif', 8, 2001)
+ src_ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_136_src.tif", 8, 2001)
src_ds.GetRasterBand(1).Fill(1)
expected_cs = src_ds.GetRasterBand(1).Checksum()
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_136.tif', src_ds, options=['NBITS=1', 'COMPRESS=DEFLATE', 'BLOCKYSIZE=2001'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_136.tif",
+ src_ds,
+ options=["NBITS=1", "COMPRESS=DEFLATE", "BLOCKYSIZE=2001"],
+ )
src_ds = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_136.tif')
+ ds = gdal.Open("/vsimem/tiff_write_136.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == expected_cs
- gdal.Unlink('/vsimem/tiff_write_136_src.tif')
- gdal.Unlink('/vsimem/tiff_write_136.tif')
- gdal.Unlink('/vsimem/tiff_write_136.tif.aux.xml')
+ gdal.Unlink("/vsimem/tiff_write_136_src.tif")
+ gdal.Unlink("/vsimem/tiff_write_136.tif")
+ gdal.Unlink("/vsimem/tiff_write_136.tif.aux.xml")
+
###############################################################################
# Test multi-threaded writing
@@ -5476,66 +6614,88 @@ def test_tiff_write_136():
def test_tiff_write_137():
- src_ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_137_src.tif', 4000, 4000)
+ src_ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_137_src.tif", 4000, 4000)
src_ds.GetRasterBand(1).Fill(1)
data = src_ds.GetRasterBand(1).ReadRaster()
expected_cs = src_ds.GetRasterBand(1).Checksum()
# Test NUM_THREADS as creation option
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_137.tif', src_ds,
- options=['BLOCKYSIZE=16', 'COMPRESS=DEFLATE', 'NUM_THREADS=ALL_CPUS'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_137.tif",
+ src_ds,
+ options=["BLOCKYSIZE=16", "COMPRESS=DEFLATE", "NUM_THREADS=ALL_CPUS"],
+ )
src_ds = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_137.tif')
+ ds = gdal.Open("/vsimem/tiff_write_137.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
# Test NUM_THREADS as creation option with Create()
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_137.tif', 4000, 4000, 1,
- options=['BLOCKYSIZE=16', 'COMPRESS=DEFLATE', 'NUM_THREADS=ALL_CPUS'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_137.tif",
+ 4000,
+ 4000,
+ 1,
+ options=["BLOCKYSIZE=16", "COMPRESS=DEFLATE", "NUM_THREADS=ALL_CPUS"],
+ )
ds.GetRasterBand(1).WriteRaster(0, 0, 4000, 4000, data)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_137.tif')
+ ds = gdal.Open("/vsimem/tiff_write_137.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
# Test NUM_THREADS as open option
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_137.tif', 4000, 4000,
- options=['TILED=YES', 'COMPRESS=DEFLATE', 'PREDICTOR=2', 'SPARSE_OK=YES'])
- ds = None
- ds = gdal.OpenEx('/vsimem/tiff_write_137.tif', gdal.OF_UPDATE, open_options=['NUM_THREADS=4'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_137.tif",
+ 4000,
+ 4000,
+ options=["TILED=YES", "COMPRESS=DEFLATE", "PREDICTOR=2", "SPARSE_OK=YES"],
+ )
+ ds = None
+ ds = gdal.OpenEx(
+ "/vsimem/tiff_write_137.tif", gdal.OF_UPDATE, open_options=["NUM_THREADS=4"]
+ )
ds.GetRasterBand(1).Fill(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_137.tif')
+ ds = gdal.Open("/vsimem/tiff_write_137.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
# Ask data immediately while the block is compressed
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_137.tif', 4000, 4000,
- options=['BLOCKYSIZE=3999', 'COMPRESS=DEFLATE', 'NUM_THREADS=4'])
- ds.WriteRaster(0, 0, 1, 1, 'A')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_137.tif",
+ 4000,
+ 4000,
+ options=["BLOCKYSIZE=3999", "COMPRESS=DEFLATE", "NUM_THREADS=4"],
+ )
+ ds.WriteRaster(0, 0, 1, 1, "A")
ds.FlushCache()
- val = ds.ReadRaster(0, 0, 1, 1).decode('ascii')
- assert val == 'A'
+ val = ds.ReadRaster(0, 0, 1, 1).decode("ascii")
+ assert val == "A"
ds = None
- gdal.Unlink('/vsimem/tiff_write_137_src.tif')
- gdal.Unlink('/vsimem/tiff_write_137.tif')
+ gdal.Unlink("/vsimem/tiff_write_137_src.tif")
+ gdal.Unlink("/vsimem/tiff_write_137.tif")
# Test NUM_THREADS with raster == tile
- src_ds = gdal.Open('data/byte.tif')
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_137.tif', src_ds,
- options=['BLOCKYSIZE=20', 'COMPRESS=DEFLATE', 'NUM_THREADS=ALL_CPUS'])
+ src_ds = gdal.Open("data/byte.tif")
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_137.tif",
+ src_ds,
+ options=["BLOCKYSIZE=20", "COMPRESS=DEFLATE", "NUM_THREADS=ALL_CPUS"],
+ )
src_ds = None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_137.tif')
+ ds = gdal.Open("/vsimem/tiff_write_137.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == 4672, expected_cs
- gdal.Unlink('/vsimem/tiff_write_137.tif')
+ gdal.Unlink("/vsimem/tiff_write_137.tif")
+
###############################################################################
# Test that pixel-interleaved writing generates optimal size
@@ -5545,42 +6705,46 @@ def test_tiff_write_138():
# Test that consecutive IWriteBlock() calls for the same block but in
# different bands only generate a single tile write, and not 3 rewrites
- ds = gdal.GetDriverByName('GTiff').Create(
- '/vsimem/tiff_write_138.tif', 10, 1, 3, options=['COMPRESS=DEFLATE'])
- ds.GetRasterBand(1).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_138.tif", 10, 1, 3, options=["COMPRESS=DEFLATE"]
+ )
+ ds.GetRasterBand(1).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
ds.GetRasterBand(1).FlushCache()
- ds.GetRasterBand(2).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
+ ds.GetRasterBand(2).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
ds.GetRasterBand(2).FlushCache()
- ds.GetRasterBand(3).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
+ ds.GetRasterBand(3).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
ds.GetRasterBand(3).FlushCache()
ds = None
- size = gdal.VSIStatL('/vsimem/tiff_write_138.tif').size
+ size = gdal.VSIStatL("/vsimem/tiff_write_138.tif").size
assert size == 181
# Test fix for #5999
# Create a file with a huge block that will saturate the block cache.
with gdaltest.SetCacheMax(1000000):
- tmp_ds = gdal.GetDriverByName('GTiff').Create(
- '/vsimem/tiff_write_138_saturate.tif', gdal.GetCacheMax(), 1)
+ tmp_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_138_saturate.tif", gdal.GetCacheMax(), 1
+ )
tmp_ds = None
- ds = gdal.GetDriverByName('GTiff').Create(
- '/vsimem/tiff_write_138.tif', 10, 1, 3, options=['COMPRESS=DEFLATE'])
- ds.GetRasterBand(1).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
- ds.GetRasterBand(2).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
- ds.GetRasterBand(3).WriteRaster(0, 0, 10, 1, 'A', buf_xsize=1, buf_ysize=1)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_138.tif", 10, 1, 3, options=["COMPRESS=DEFLATE"]
+ )
+ ds.GetRasterBand(1).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
+ ds.GetRasterBand(2).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
+ ds.GetRasterBand(3).WriteRaster(0, 0, 10, 1, "A", buf_xsize=1, buf_ysize=1)
# When internalizing the huge block, check that the 3 above dirty blocks
# get written as a single tile write.
- tmp_ds = gdal.Open('/vsimem/tiff_write_138_saturate.tif')
+ tmp_ds = gdal.Open("/vsimem/tiff_write_138_saturate.tif")
tmp_ds.GetRasterBand(1).Checksum()
tmp_ds = None
ds = None
- size = gdal.VSIStatL('/vsimem/tiff_write_138.tif').size
+ size = gdal.VSIStatL("/vsimem/tiff_write_138.tif").size
assert size == 181
- gdal.Unlink('/vsimem/tiff_write_138.tif')
- gdal.Unlink('/vsimem/tiff_write_138_saturate.tif')
+ gdal.Unlink("/vsimem/tiff_write_138.tif")
+ gdal.Unlink("/vsimem/tiff_write_138_saturate.tif")
+
###############################################################################
# Test that pixel-interleaved writing generates optimal size
@@ -5588,100 +6752,130 @@ def test_tiff_write_138():
def test_tiff_write_139():
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
# Only post 4.0.5 has the fix for non-byte swabing case
- has_inverted_swab_fix = drv.GetMetadataItem('LIBTIFF') == 'INTERNAL'
+ has_inverted_swab_fix = drv.GetMetadataItem("LIBTIFF") == "INTERNAL"
# In the byte case, there are optimizations for the 3 and 4 case. 1 is the general case
for nbands in (1, 3, 4):
- ds = drv.Create('/vsimem/tiff_write_139.tif', 4, 1, nbands,
- options=['PREDICTOR=2', 'COMPRESS=DEFLATE'])
- ref_content = struct.pack('B' * 4, 255, 0, 255, 0)
+ ds = drv.Create(
+ "/vsimem/tiff_write_139.tif",
+ 4,
+ 1,
+ nbands,
+ options=["PREDICTOR=2", "COMPRESS=DEFLATE"],
+ )
+ ref_content = struct.pack("B" * 4, 255, 0, 255, 0)
for i in range(nbands):
ds.GetRasterBand(i + 1).WriteRaster(0, 0, 4, 1, ref_content)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_139.tif')
+ ds = gdal.Open("/vsimem/tiff_write_139.tif")
for i in range(nbands):
content = ds.GetRasterBand(i + 1).ReadRaster()
assert ref_content == content
ds = None
- gdal.Unlink('/vsimem/tiff_write_139.tif')
+ gdal.Unlink("/vsimem/tiff_write_139.tif")
# Int16
- for endianness in ['NATIVE', 'INVERTED']:
+ for endianness in ["NATIVE", "INVERTED"]:
- if endianness == 'INVERTED' and not has_inverted_swab_fix:
+ if endianness == "INVERTED" and not has_inverted_swab_fix:
continue
- ds = drv.Create('/vsimem/tiff_write_139.tif', 6, 1, 1, gdal.GDT_Int16,
- options=['PREDICTOR=2', 'COMPRESS=DEFLATE', 'ENDIANNESS=%s' % endianness])
- ref_content = struct.pack('h' * 6, -32768, 32767, -32768, 32767, -32768, 32767)
+ ds = drv.Create(
+ "/vsimem/tiff_write_139.tif",
+ 6,
+ 1,
+ 1,
+ gdal.GDT_Int16,
+ options=["PREDICTOR=2", "COMPRESS=DEFLATE", "ENDIANNESS=%s" % endianness],
+ )
+ ref_content = struct.pack("h" * 6, -32768, 32767, -32768, 32767, -32768, 32767)
ds.GetRasterBand(1).WriteRaster(0, 0, 6, 1, ref_content)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_139.tif')
+ ds = gdal.Open("/vsimem/tiff_write_139.tif")
content = ds.GetRasterBand(1).ReadRaster()
if ref_content != content:
print(endianness)
- pytest.fail(struct.unpack('h' * 6, content))
+ pytest.fail(struct.unpack("h" * 6, content))
ds = None
- gdal.Unlink('/vsimem/tiff_write_139.tif')
+ gdal.Unlink("/vsimem/tiff_write_139.tif")
# UInt16 (same code path)
- for endianness in ['NATIVE', 'INVERTED']:
+ for endianness in ["NATIVE", "INVERTED"]:
- if endianness == 'INVERTED' and not has_inverted_swab_fix:
+ if endianness == "INVERTED" and not has_inverted_swab_fix:
continue
- ds = drv.Create('/vsimem/tiff_write_139.tif', 6, 1, 1, gdal.GDT_UInt16,
- options=['PREDICTOR=2', 'COMPRESS=DEFLATE', 'ENDIANNESS=%s' % endianness])
- ref_content = struct.pack('H' * 6, 0, 65535, 0, 65535, 0, 65535)
+ ds = drv.Create(
+ "/vsimem/tiff_write_139.tif",
+ 6,
+ 1,
+ 1,
+ gdal.GDT_UInt16,
+ options=["PREDICTOR=2", "COMPRESS=DEFLATE", "ENDIANNESS=%s" % endianness],
+ )
+ ref_content = struct.pack("H" * 6, 0, 65535, 0, 65535, 0, 65535)
ds.GetRasterBand(1).WriteRaster(0, 0, 6, 1, ref_content)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_139.tif')
+ ds = gdal.Open("/vsimem/tiff_write_139.tif")
content = ds.GetRasterBand(1).ReadRaster()
if ref_content != content:
print(endianness)
- pytest.fail(struct.unpack('H' * 6, content))
+ pytest.fail(struct.unpack("H" * 6, content))
ds = None
- gdal.Unlink('/vsimem/tiff_write_139.tif')
+ gdal.Unlink("/vsimem/tiff_write_139.tif")
# Int32
- for endianness in ['NATIVE', 'INVERTED']:
+ for endianness in ["NATIVE", "INVERTED"]:
- if endianness == 'INVERTED' and not has_inverted_swab_fix:
+ if endianness == "INVERTED" and not has_inverted_swab_fix:
continue
- ds = drv.Create('/vsimem/tiff_write_139.tif', 6, 1, 1, gdal.GDT_UInt32,
- options=['PREDICTOR=2', 'COMPRESS=DEFLATE', 'ENDIANNESS=%s' % endianness])
- ref_content = struct.pack('I' * 6, 0, 2000000000, 0, 2000000000, 0, 2000000000)
+ ds = drv.Create(
+ "/vsimem/tiff_write_139.tif",
+ 6,
+ 1,
+ 1,
+ gdal.GDT_UInt32,
+ options=["PREDICTOR=2", "COMPRESS=DEFLATE", "ENDIANNESS=%s" % endianness],
+ )
+ ref_content = struct.pack("I" * 6, 0, 2000000000, 0, 2000000000, 0, 2000000000)
ds.GetRasterBand(1).WriteRaster(0, 0, 6, 1, ref_content)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_139.tif')
+ ds = gdal.Open("/vsimem/tiff_write_139.tif")
content = ds.GetRasterBand(1).ReadRaster()
if ref_content != content:
print(endianness)
- pytest.fail(struct.unpack('I' * 6, content))
+ pytest.fail(struct.unpack("I" * 6, content))
ds = None
- gdal.Unlink('/vsimem/tiff_write_139.tif')
+ gdal.Unlink("/vsimem/tiff_write_139.tif")
# Test floating-point predictor
# Seems to be broken with ENDIANNESS=INVERTED
- ds = drv.Create('/vsimem/tiff_write_139.tif', 4, 1, 1, gdal.GDT_Float64,
- options=['PREDICTOR=3', 'COMPRESS=DEFLATE'])
- ref_content = struct.pack('d' * 4, 1, -1e100, 1e10, -1e5)
+ ds = drv.Create(
+ "/vsimem/tiff_write_139.tif",
+ 4,
+ 1,
+ 1,
+ gdal.GDT_Float64,
+ options=["PREDICTOR=3", "COMPRESS=DEFLATE"],
+ )
+ ref_content = struct.pack("d" * 4, 1, -1e100, 1e10, -1e5)
ds.GetRasterBand(1).WriteRaster(0, 0, 4, 1, ref_content)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_139.tif')
+ ds = gdal.Open("/vsimem/tiff_write_139.tif")
content = ds.GetRasterBand(1).ReadRaster()
- assert ref_content == content, struct.unpack('d' * 4, content)
+ assert ref_content == content, struct.unpack("d" * 4, content)
ds = None
- gdal.Unlink('/vsimem/tiff_write_139.tif')
+ gdal.Unlink("/vsimem/tiff_write_139.tif")
+
###############################################################################
# Test setting a band to alpha
@@ -5690,49 +6884,61 @@ def test_tiff_write_139():
def test_tiff_write_140():
# Nominal case: set alpha to last band
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_140.tif', 1, 1, 5)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_140.tif", 1, 1, 5)
ds.GetRasterBand(5).SetColorInterpretation(gdal.GCI_AlphaBand)
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_140.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_140.tif')
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_140.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_140.tif")
assert ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
ds = None
# Strange case: set alpha to a band, but it is already set on another one
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_140.tif', 1, 1, 5)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_140.tif", 1, 1, 5)
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
# Should emit a warning
gdal.ErrorReset()
with gdaltest.error_handler():
ret = ds.GetRasterBand(5).SetColorInterpretation(gdal.GCI_AlphaBand)
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
assert ret == 0
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_140.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_140.tif')
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_140.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_140.tif")
assert ds.GetRasterBand(2).GetColorInterpretation() == gdal.GCI_AlphaBand
assert ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
ds = None
# Strange case: set alpha to a band, but it is already set on another one (because of ALPHA=YES)
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_140.tif', 1, 1, 5, options=['ALPHA=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_140.tif", 1, 1, 5, options=["ALPHA=YES"]
+ )
# Should emit a warning mentioning ALPHA creation option.
gdal.ErrorReset()
with gdaltest.error_handler():
ret = ds.GetRasterBand(5).SetColorInterpretation(gdal.GCI_AlphaBand)
- assert gdal.GetLastErrorMsg().find('ALPHA') >= 0
+ assert gdal.GetLastErrorMsg().find("ALPHA") >= 0
assert ret == 0
ds = None
- statBuf = gdal.VSIStatL('/vsimem/tiff_write_140.tif.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
- ds = gdal.Open('/vsimem/tiff_write_140.tif')
+ statBuf = gdal.VSIStatL(
+ "/vsimem/tiff_write_140.tif.aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
+ ds = gdal.Open("/vsimem/tiff_write_140.tif")
assert ds.GetRasterBand(2).GetColorInterpretation() == gdal.GCI_AlphaBand
assert ds.GetRasterBand(5).GetColorInterpretation() == gdal.GCI_AlphaBand
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_140.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_140.tif")
+
###############################################################################
# Test GEOTIFF_KEYS_FLAVOR=ESRI_PE with EPSG:3857
@@ -5740,13 +6946,15 @@ def test_tiff_write_140():
def test_tiff_write_141():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_141.tif', 1, 1, options=['GEOTIFF_KEYS_FLAVOR=ESRI_PE'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_141.tif", 1, 1, options=["GEOTIFF_KEYS_FLAVOR=ESRI_PE"]
+ )
srs = osr.SpatialReference()
srs.ImportFromEPSG(3857)
ds.SetProjection(srs.ExportToWkt())
ds = None
- ds = gdal.Open('/vsimem/tiff_write_141.tif')
+ ds = gdal.Open("/vsimem/tiff_write_141.tif")
wkt = ds.GetProjectionRef()
ds = None
@@ -5754,35 +6962,37 @@ def test_tiff_write_141():
assert 'EXTENSION["PROJ4"' in wkt
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_141.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_141.tif")
###############################################################################
# Test PixelIsPoint without SRS (#6225)
+
def test_tiff_write_142():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_142.tif', 1, 1)
- ds.SetMetadataItem('AREA_OR_POINT', 'Point')
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_142.tif", 1, 1)
+ ds.SetMetadataItem("AREA_OR_POINT", "Point")
ds.SetGeoTransform([10, 1, 0, 100, 0, -1])
ds = None
- src_ds = gdal.Open('/vsimem/tiff_write_142.tif')
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_142_2.tif', src_ds)
+ src_ds = gdal.Open("/vsimem/tiff_write_142.tif")
+ gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_142_2.tif", src_ds)
src_ds = None
- ds = gdal.Open('/vsimem/tiff_write_142_2.tif')
+ ds = gdal.Open("/vsimem/tiff_write_142_2.tif")
gt = ds.GetGeoTransform()
- md = ds.GetMetadataItem('AREA_OR_POINT')
+ md = ds.GetMetadataItem("AREA_OR_POINT")
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_142.tif')
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_142_2.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_142.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_142_2.tif")
gt_expected = (10, 1, 0, 100, 0, -1)
- assert gt == gt_expected, 'did not get expected geotransform'
+ assert gt == gt_expected, "did not get expected geotransform"
+
+ assert md == "Point", "did not get expected AREA_OR_POINT value"
- assert md == 'Point', 'did not get expected AREA_OR_POINT value'
###############################################################################
# Check that we detect that free space isn't sufficient
@@ -5791,9 +7001,12 @@ def test_tiff_write_142():
def test_tiff_write_143():
with gdaltest.error_handler():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_143.tif', 1000000000, 1000000000)
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_143.tif", 1000000000, 1000000000
+ )
assert ds is None
+
###############################################################################
# Test creating a real BigTIFF file > 4 GB with multiple directories (on filesystems supporting sparse files)
@@ -5802,85 +7015,142 @@ def test_tiff_write_144():
# Determine if the filesystem supports sparse files (we don't want to create a real 10 GB
# file !
- if not gdaltest.filesystem_supports_sparse_files('tmp'):
+ if not gdaltest.filesystem_supports_sparse_files("tmp"):
pytest.skip()
- ds = gdal.GetDriverByName('GTiff').Create('tmp/tiff_write_144.tif', 20, 20, 1, options=['BIGTIFF=YES'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "tmp/tiff_write_144.tif", 20, 20, 1, options=["BIGTIFF=YES"]
+ )
ds.GetRasterBand(1).Fill(255)
ds = None
# Extend the file to 4 GB
- f = open('tmp/tiff_write_144.tif', 'rb+')
+ f = open("tmp/tiff_write_144.tif", "rb+")
f.seek(4294967296, 0)
- f.write(' '.encode('ascii'))
+ f.write(" ".encode("ascii"))
f.close()
- ds = gdal.Open('tmp/tiff_write_144.tif', gdal.GA_Update)
- ds.BuildOverviews('NEAR', [2])
+ ds = gdal.Open("tmp/tiff_write_144.tif", gdal.GA_Update)
+ ds.BuildOverviews("NEAR", [2])
ds = None
- ds = gdal.Open('tmp/tiff_write_144.tif')
+ ds = gdal.Open("tmp/tiff_write_144.tif")
got_cs = ds.GetRasterBand(1).Checksum()
got_cs_ovr = ds.GetRasterBand(1).GetOverview(0).Checksum()
ds = None
- gdal.Unlink('tmp/tiff_write_144.tif')
+ gdal.Unlink("tmp/tiff_write_144.tif")
assert got_cs == 4873 and got_cs_ovr == 1218
+
###############################################################################
# Test various warnings / errors of Create()
def test_tiff_write_145():
- options_list = [{'bands': 65536, 'expected_failure': True},
- {'creation_options': ['INTERLEAVE=foo'], 'expected_failure': True},
- {'creation_options': ['COMPRESS=foo'], 'expected_failure': False},
- {'creation_options': ['STREAMABLE_OUTPUT=YES', 'SPARSE_OK=YES'], 'expected_failure': True},
- {'creation_options': ['STREAMABLE_OUTPUT=YES', 'COPY_SRC_OVERVIEWS=YES'], 'expected_failure': True},
- {'use_tmp': True, 'xsize': 100000, 'ysize': 100000, 'creation_options': ['BIGTIFF=NO'], 'expected_failure': True},
- {'creation_options': ['ENDIANNESS=foo'], 'expected_failure': False},
- {'creation_options': ['NBITS=9'], 'expected_failure': False},
- {'datatype': gdal.GDT_Float32, 'creation_options': ['NBITS=8'], 'expected_failure': False},
- {'datatype': gdal.GDT_UInt16, 'creation_options': ['NBITS=8'], 'expected_failure': False},
- {'datatype': gdal.GDT_UInt16, 'creation_options': ['NBITS=17'], 'expected_failure': False},
- {'datatype': gdal.GDT_UInt32, 'creation_options': ['NBITS=16'], 'expected_failure': False},
- {'datatype': gdal.GDT_UInt32, 'creation_options': ['NBITS=33'], 'expected_failure': False},
- {'bands': 3, 'creation_options': ['PHOTOMETRIC=YCBCR'], 'expected_failure': True},
- {'bands': 3, 'creation_options': ['PHOTOMETRIC=YCBCR', 'COMPRESS=JPEG', 'INTERLEAVE=BAND'], 'expected_failure': True},
- {'bands': 1, 'creation_options': ['PHOTOMETRIC=YCBCR', 'COMPRESS=JPEG'], 'expected_failure': True},
- {'creation_options': ['PHOTOMETRIC=foo'], 'expected_failure': False},
- {'creation_options': ['PHOTOMETRIC=RGB'], 'expected_failure': False},
- {'creation_options': ['TILED=YES', 'BLOCKSIZE=1', 'BLOCKYSIZE=1'], 'expected_failure': True},
- ]
+ options_list = [
+ {"bands": 65536, "expected_failure": True},
+ {"creation_options": ["INTERLEAVE=foo"], "expected_failure": True},
+ {"creation_options": ["COMPRESS=foo"], "expected_failure": False},
+ {
+ "creation_options": ["STREAMABLE_OUTPUT=YES", "SPARSE_OK=YES"],
+ "expected_failure": True,
+ },
+ {
+ "creation_options": ["STREAMABLE_OUTPUT=YES", "COPY_SRC_OVERVIEWS=YES"],
+ "expected_failure": True,
+ },
+ {
+ "use_tmp": True,
+ "xsize": 100000,
+ "ysize": 100000,
+ "creation_options": ["BIGTIFF=NO"],
+ "expected_failure": True,
+ },
+ {"creation_options": ["ENDIANNESS=foo"], "expected_failure": False},
+ {"creation_options": ["NBITS=9"], "expected_failure": False},
+ {
+ "datatype": gdal.GDT_Float32,
+ "creation_options": ["NBITS=8"],
+ "expected_failure": False,
+ },
+ {
+ "datatype": gdal.GDT_UInt16,
+ "creation_options": ["NBITS=8"],
+ "expected_failure": False,
+ },
+ {
+ "datatype": gdal.GDT_UInt16,
+ "creation_options": ["NBITS=17"],
+ "expected_failure": False,
+ },
+ {
+ "datatype": gdal.GDT_UInt32,
+ "creation_options": ["NBITS=16"],
+ "expected_failure": False,
+ },
+ {
+ "datatype": gdal.GDT_UInt32,
+ "creation_options": ["NBITS=33"],
+ "expected_failure": False,
+ },
+ {
+ "bands": 3,
+ "creation_options": ["PHOTOMETRIC=YCBCR"],
+ "expected_failure": True,
+ },
+ {
+ "bands": 3,
+ "creation_options": [
+ "PHOTOMETRIC=YCBCR",
+ "COMPRESS=JPEG",
+ "INTERLEAVE=BAND",
+ ],
+ "expected_failure": True,
+ },
+ {
+ "bands": 1,
+ "creation_options": ["PHOTOMETRIC=YCBCR", "COMPRESS=JPEG"],
+ "expected_failure": True,
+ },
+ {"creation_options": ["PHOTOMETRIC=foo"], "expected_failure": False},
+ {"creation_options": ["PHOTOMETRIC=RGB"], "expected_failure": False},
+ {
+ "creation_options": ["TILED=YES", "BLOCKSIZE=1", "BLOCKYSIZE=1"],
+ "expected_failure": True,
+ },
+ ]
for options in options_list:
- xsize = options.get('xsize', 1)
- ysize = options.get('ysize', 1)
- bands = options.get('bands', 1)
- datatype = options.get('datatype', gdal.GDT_Byte)
- use_tmp = options.get('use_tmp', False)
+ xsize = options.get("xsize", 1)
+ ysize = options.get("ysize", 1)
+ bands = options.get("bands", 1)
+ datatype = options.get("datatype", gdal.GDT_Byte)
+ use_tmp = options.get("use_tmp", False)
if use_tmp:
- filename = 'tmp/tiff_write_145.tif'
+ filename = "tmp/tiff_write_145.tif"
else:
- filename = '/vsimem/tiff_write_145.tif'
- creation_options = options.get('creation_options', [])
+ filename = "/vsimem/tiff_write_145.tif"
+ creation_options = options.get("creation_options", [])
gdal.Unlink(filename)
gdal.ErrorReset()
with gdaltest.error_handler():
- ds = gdaltest.tiff_drv.Create(filename, xsize, ysize, bands, datatype, options=creation_options)
- if ds is not None and options.get('expected_failure', False):
+ ds = gdaltest.tiff_drv.Create(
+ filename, xsize, ysize, bands, datatype, options=creation_options
+ )
+ if ds is not None and options.get("expected_failure", False):
print(options)
- pytest.fail('expected failure, but did not get it')
- elif ds is None and not options.get('expected_failure', False):
+ pytest.fail("expected failure, but did not get it")
+ elif ds is None and not options.get("expected_failure", False):
print(options)
- pytest.fail('got failure, but did not expect it')
+ pytest.fail("got failure, but did not expect it")
ds = None
# print(gdal.GetLastErrorMsg())
- if gdal.GetLastErrorMsg() == '':
+ if gdal.GetLastErrorMsg() == "":
print(options)
- pytest.fail('did not get any warning/error')
+ pytest.fail("did not get any warning/error")
gdal.Unlink(filename)
@@ -5892,21 +7162,33 @@ def test_tiff_write_145():
def test_tiff_write_146():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- tmp_ds = gdal.Translate('', 'data/stefan_full_rgba.tif', format='MEM')
- original_stats = [tmp_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(4)]
- gdal.Translate('/vsimem/tiff_write_146.tif', 'data/stefan_full_rgba.tif', options='-outsize 1000% 1000% -co COMPRESS=JPEG')
- out_ds = gdal.Open('/vsimem/tiff_write_146.tif')
- got_stats = [out_ds.GetRasterBand(i + 1).GetOverview(2).ComputeStatistics(True) for i in range(4)]
+ tmp_ds = gdal.Translate("", "data/stefan_full_rgba.tif", format="MEM")
+ original_stats = [
+ tmp_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(4)
+ ]
+ gdal.Translate(
+ "/vsimem/tiff_write_146.tif",
+ "data/stefan_full_rgba.tif",
+ options="-outsize 1000% 1000% -co COMPRESS=JPEG",
+ )
+ out_ds = gdal.Open("/vsimem/tiff_write_146.tif")
+ got_stats = [
+ out_ds.GetRasterBand(i + 1).GetOverview(2).ComputeStatistics(True)
+ for i in range(4)
+ ]
out_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_write_146.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_write_146.tif")
for i in range(4):
for j in range(4):
- assert i == 2 or j < 2 or original_stats[i][j] == pytest.approx(got_stats[i][j], abs=5), \
- 'did not get expected statistics'
+ assert (
+ i == 2
+ or j < 2
+ or original_stats[i][j] == pytest.approx(got_stats[i][j], abs=5)
+ ), "did not get expected statistics"
###############################################################################
@@ -5917,18 +7199,23 @@ def test_tiff_write_146():
def test_tiff_write_147():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', 'NO')
- gdal.SetConfigOption('GDAL_PAM_ENABLED', 'NO')
- gdal.Translate('/vsimem/tiff_write_147.tif', '../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg', options='-outsize 1000% 1000% -co COMPRESS=JPEG -co PHOTOMETRIC=CMYK')
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', None)
- gdal.SetConfigOption('GDAL_PAM_ENABLED', None)
- out_ds = gdal.Open('/vsimem/tiff_write_147.tif')
- assert out_ds.GetRasterBand(1).GetOverview(0) is None, 'did not expected overview'
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", "NO")
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", "NO")
+ gdal.Translate(
+ "/vsimem/tiff_write_147.tif",
+ "../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg",
+ options="-outsize 1000% 1000% -co COMPRESS=JPEG -co PHOTOMETRIC=CMYK",
+ )
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", None)
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", None)
+ out_ds = gdal.Open("/vsimem/tiff_write_147.tif")
+ assert out_ds.GetRasterBand(1).GetOverview(0) is None, "did not expected overview"
out_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_write_147.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_write_147.tif")
+
###############################################################################
# Test that we can use implicit JPEG-in-TIFF overviews with CMYK in raw mode
@@ -5937,27 +7224,37 @@ def test_tiff_write_147():
def test_tiff_write_148():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', 'NO')
- tmp_ds = gdal.Translate('', '../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg', format='MEM')
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', None)
- original_stats = [tmp_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(4)]
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', 'NO')
- gdal.SetConfigOption('GDAL_PAM_ENABLED', 'NO')
- gdal.Translate('/vsimem/tiff_write_148.tif', '../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg', options='-outsize 1000% 1000% -co COMPRESS=JPEG -co PHOTOMETRIC=CMYK')
- gdal.SetConfigOption('GDAL_JPEG_TO_RGB', None)
- gdal.SetConfigOption('GDAL_PAM_ENABLED', None)
- out_ds = gdal.Open('GTIFF_RAW:/vsimem/tiff_write_148.tif')
- got_stats = [out_ds.GetRasterBand(i + 1).GetOverview(0).ComputeStatistics(True) for i in range(4)]
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", "NO")
+ tmp_ds = gdal.Translate("", "../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg", format="MEM")
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", None)
+ original_stats = [
+ tmp_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(4)
+ ]
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", "NO")
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", "NO")
+ gdal.Translate(
+ "/vsimem/tiff_write_148.tif",
+ "../gdrivers/data/jpeg/rgb_ntf_cmyk.jpg",
+ options="-outsize 1000% 1000% -co COMPRESS=JPEG -co PHOTOMETRIC=CMYK",
+ )
+ gdal.SetConfigOption("GDAL_JPEG_TO_RGB", None)
+ gdal.SetConfigOption("GDAL_PAM_ENABLED", None)
+ out_ds = gdal.Open("GTIFF_RAW:/vsimem/tiff_write_148.tif")
+ got_stats = [
+ out_ds.GetRasterBand(i + 1).GetOverview(0).ComputeStatistics(True)
+ for i in range(4)
+ ]
out_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/tiff_write_148.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/tiff_write_148.tif")
for i in range(4):
for j in range(4):
- assert j < 2 or original_stats[i][j] == pytest.approx(got_stats[i][j], abs=5), \
- 'did not get expected statistics'
+ assert j < 2 or original_stats[i][j] == pytest.approx(
+ got_stats[i][j], abs=5
+ ), "did not get expected statistics"
###############################################################################
@@ -5967,48 +7264,89 @@ def test_tiff_write_148():
def test_tiff_write_149():
# Power-of-two bit depth
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_149.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_149.tif", 1, 1)
ds.GetRasterBand(1).SetNoDataValue(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_149.tif')
+ ds = gdal.Open("/vsimem/tiff_write_149.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == 1
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_149.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_149.tif")
# Test implicit blocks
expected_cs = 13626
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_149.tif', 40, 30, 2, gdal.GDT_UInt16, options=['NBITS=12', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'INTERLEAVE=BAND', 'SPARSE_OK=YES'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_149.tif",
+ 40,
+ 30,
+ 2,
+ gdal.GDT_UInt16,
+ options=[
+ "NBITS=12",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "INTERLEAVE=BAND",
+ "SPARSE_OK=YES",
+ ],
+ )
ds.GetRasterBand(1).SetNoDataValue(127)
ds.GetRasterBand(2).SetNoDataValue(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_149.tif')
+ ds = gdal.Open("/vsimem/tiff_write_149.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_149.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_149.tif")
# NBITS=12, SEPARATE. Checksum must be the same as in the implicit blocks case
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_149.tif', 40, 30, 2, gdal.GDT_UInt16, options=['NBITS=12', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'INTERLEAVE=BAND'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_149.tif",
+ 40,
+ 30,
+ 2,
+ gdal.GDT_UInt16,
+ options=[
+ "NBITS=12",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "INTERLEAVE=BAND",
+ ],
+ )
ds.GetRasterBand(1).SetNoDataValue(127)
ds.GetRasterBand(2).SetNoDataValue(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_149.tif')
+ ds = gdal.Open("/vsimem/tiff_write_149.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_149.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_149.tif")
# NBITS=12, CONTIG. Checksum must be the same as in the implicit blocks case
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_149.tif', 40, 30, 2, gdal.GDT_UInt16, options=['NBITS=12', 'TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=16', 'INTERLEAVE=PIXEL'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_149.tif",
+ 40,
+ 30,
+ 2,
+ gdal.GDT_UInt16,
+ options=[
+ "NBITS=12",
+ "TILED=YES",
+ "BLOCKXSIZE=16",
+ "BLOCKYSIZE=16",
+ "INTERLEAVE=PIXEL",
+ ],
+ )
ds.GetRasterBand(1).SetNoDataValue(127)
ds.GetRasterBand(2).SetNoDataValue(127)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_149.tif')
+ ds = gdal.Open("/vsimem/tiff_write_149.tif")
cs = ds.GetRasterBand(1).Checksum()
ds = None
assert cs == expected_cs
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_149.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_149.tif")
+
###############################################################################
# Test failure when loading block from disk in IWriteBlock()
@@ -6016,15 +7354,16 @@ def test_tiff_write_149():
def test_tiff_write_150():
- shutil.copy('data/tiled_bad_offset.tif', 'tmp/tiled_bad_offset.tif')
- ds = gdal.Open('tmp/tiled_bad_offset.tif', gdal.GA_Update)
+ shutil.copy("data/tiled_bad_offset.tif", "tmp/tiled_bad_offset.tif")
+ ds = gdal.Open("tmp/tiled_bad_offset.tif", gdal.GA_Update)
ds.GetRasterBand(1).Fill(0)
gdal.ErrorReset()
with gdaltest.error_handler():
ds.FlushCache()
- assert gdal.GetLastErrorMsg() != ''
+ assert gdal.GetLastErrorMsg() != ""
ds = None
- gdaltest.tiff_drv.Delete('tmp/tiled_bad_offset.tif')
+ gdaltest.tiff_drv.Delete("tmp/tiled_bad_offset.tif")
+
###############################################################################
# Test IWriteBlock() with more than 10 bands
@@ -6032,22 +7371,23 @@ def test_tiff_write_150():
def test_tiff_write_151():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_151.tif', 1, 1, 11)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_151.tif", 1, 1, 11)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_151.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_151.tif", gdal.GA_Update)
ds.GetRasterBand(1).Fill(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_151.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_151.tif", gdal.GA_Update)
ds.GetRasterBand(1).Checksum()
ds.GetRasterBand(2).Fill(1)
ds.GetRasterBand(3).Fill(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_151.tif')
+ ds = gdal.Open("/vsimem/tiff_write_151.tif")
assert ds.GetRasterBand(1).Checksum() == 1
assert ds.GetRasterBand(2).Checksum() == 1
assert ds.GetRasterBand(3).Checksum() == 1
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_151.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_151.tif")
+
###############################################################################
# Test flushing of blocks in a contig multi band file with Create()
@@ -6055,15 +7395,18 @@ def test_tiff_write_151():
def test_tiff_write_152():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_152.tif', 1, 1, 2, options=['NBITS=2'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_152.tif", 1, 1, 2, options=["NBITS=2"]
+ )
ds.GetRasterBand(2).SetNoDataValue(3)
ds.GetRasterBand(2).Fill(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_152.tif')
+ ds = gdal.Open("/vsimem/tiff_write_152.tif")
assert ds.GetRasterBand(1).Checksum() == 0
assert ds.GetRasterBand(2).Checksum() == 1
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_152.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_152.tif")
+
###############################################################################
# Test that empty blocks are created in a filesystem sparse way
@@ -6071,154 +7414,195 @@ def test_tiff_write_152():
def test_tiff_write_153():
- target_dir = 'tmp'
+ target_dir = "tmp"
if gdal.VSISupportsSparseFiles(target_dir) == 0:
pytest.skip()
- gdaltest.tiff_drv.Create(target_dir + '/tiff_write_153.tif', 500, 500)
+ gdaltest.tiff_drv.Create(target_dir + "/tiff_write_153.tif", 500, 500)
- f = gdal.VSIFOpenL(target_dir + '/tiff_write_153.tif', 'rb')
+ f = gdal.VSIFOpenL(target_dir + "/tiff_write_153.tif", "rb")
ret = gdal.VSIFGetRangeStatusL(f, 500 * 500, 1)
gdal.VSIFCloseL(f)
- gdaltest.tiff_drv.Delete(target_dir + '/tiff_write_153.tif')
+ gdaltest.tiff_drv.Delete(target_dir + "/tiff_write_153.tif")
assert ret != gdal.VSI_RANGE_STATUS_DATA
+
###############################################################################
# Test empty block writing skipping and SPARSE_OK in CreateCopy() and Open()
def test_tiff_write_154():
- src_ds = gdal.GetDriverByName('MEM').Create('', 500, 500)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 500, 500)
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['BLOCKYSIZE=256'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif", src_ds, options=["BLOCKYSIZE=256"]
+ )
ds.FlushCache()
# At that point empty blocks have not yet been flushed
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 162
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 162
ds = None
# Now they are and that's done in a filesystem sparse way. TODO: check this
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 256162
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
-
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['BLOCKYSIZE=256', 'COMPRESS=DEFLATE'])
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 256162
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
+
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif",
+ src_ds,
+ options=["BLOCKYSIZE=256", "COMPRESS=DEFLATE"],
+ )
ds.FlushCache()
# With compression, empty blocks are written right away
# 461 is with libdeflate, 462 with zlib
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size in (461, 462)
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size in (461, 462)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size in (461, 462)
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size in (461, 462)
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
# SPARSE_OK in CreateCopy(): blocks are not written
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['SPARSE_OK=YES', 'BLOCKYSIZE=256'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif",
+ src_ds,
+ options=["SPARSE_OK=YES", "BLOCKYSIZE=256"],
+ )
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 162
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 162
# SPARSE_OK in Open()/update: blocks are not written
- ds = gdal.OpenEx('/vsimem/tiff_write_154.tif', gdal.OF_UPDATE, open_options=['SPARSE_OK=YES'])
+ ds = gdal.OpenEx(
+ "/vsimem/tiff_write_154.tif", gdal.OF_UPDATE, open_options=["SPARSE_OK=YES"]
+ )
ds.GetRasterBand(1).Fill(0)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 162
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 162
ds = None
# Default behaviour in Open()/update: blocks are written
- ds = gdal.OpenEx('/vsimem/tiff_write_154.tif', gdal.OF_UPDATE)
+ ds = gdal.OpenEx("/vsimem/tiff_write_154.tif", gdal.OF_UPDATE)
ds.GetRasterBand(1).Fill(0)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 250162
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 250162
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
# SPARSE_OK in CreateCopy() in compressed case (strips): blocks are not written
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['SPARSE_OK=YES', 'BLOCKYSIZE=256', 'COMPRESS=DEFLATE'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif",
+ src_ds,
+ options=["SPARSE_OK=YES", "BLOCKYSIZE=256", "COMPRESS=DEFLATE"],
+ )
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 174
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 174
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
# SPARSE_OK in CreateCopy() in compressed case (tiling): blocks are not written
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['SPARSE_OK=YES', 'TILED=YES'])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif", src_ds, options=["SPARSE_OK=YES", "TILED=YES"]
+ )
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 190
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 190
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
# Test detection of 0 blocks for all data types
- for dt in ['signedbyte', gdal.GDT_Int16, gdal.GDT_UInt16,
- gdal.GDT_Int32, gdal.GDT_UInt32,
- gdal.GDT_Float32, gdal.GDT_Float64]:
+ for dt in [
+ "signedbyte",
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
# SPARSE_OK in CreateCopy(): blocks are not written
- if dt == 'signedbyte':
- src_ds = gdal.GetDriverByName('MEM').Create('', 500, 500, 1, gdal.GDT_Byte)
- options = ['SPARSE_OK=YES', 'BLOCKYSIZE=256', 'PIXELTYPE=SIGNEDBYTE']
+ if dt == "signedbyte":
+ src_ds = gdal.GetDriverByName("MEM").Create("", 500, 500, 1, gdal.GDT_Byte)
+ options = ["SPARSE_OK=YES", "BLOCKYSIZE=256", "PIXELTYPE=SIGNEDBYTE"]
else:
- src_ds = gdal.GetDriverByName('MEM').Create('', 500, 500, 1, dt)
- options = ['SPARSE_OK=YES', 'BLOCKYSIZE=256']
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=options)
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 162, dt
+ src_ds = gdal.GetDriverByName("MEM").Create("", 500, 500, 1, dt)
+ options = ["SPARSE_OK=YES", "BLOCKYSIZE=256"]
+ gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif", src_ds, options=options
+ )
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 162, dt
# Test detection of nodata blocks with nodata != 0 for all data types
- for dt in ['signedbyte', gdal.GDT_Int16, gdal.GDT_UInt16,
- gdal.GDT_Int32, gdal.GDT_UInt32,
- gdal.GDT_Float32, gdal.GDT_Float64]:
+ for dt in [
+ "signedbyte",
+ gdal.GDT_Int16,
+ gdal.GDT_UInt16,
+ gdal.GDT_Int32,
+ gdal.GDT_UInt32,
+ gdal.GDT_Float32,
+ gdal.GDT_Float64,
+ ]:
# SPARSE_OK in CreateCopy(): blocks are not written
- if dt == 'signedbyte':
- src_ds = gdal.GetDriverByName('MEM').Create('', 500, 500, 1, gdal.GDT_Byte)
- options = ['SPARSE_OK=YES', 'BLOCKYSIZE=256', 'PIXELTYPE=SIGNEDBYTE']
+ if dt == "signedbyte":
+ src_ds = gdal.GetDriverByName("MEM").Create("", 500, 500, 1, gdal.GDT_Byte)
+ options = ["SPARSE_OK=YES", "BLOCKYSIZE=256", "PIXELTYPE=SIGNEDBYTE"]
else:
- src_ds = gdal.GetDriverByName('MEM').Create('', 500, 500, 1, dt)
- options = ['SPARSE_OK=YES', 'BLOCKYSIZE=256']
+ src_ds = gdal.GetDriverByName("MEM").Create("", 500, 500, 1, dt)
+ options = ["SPARSE_OK=YES", "BLOCKYSIZE=256"]
src_ds.GetRasterBand(1).Fill(1)
src_ds.GetRasterBand(1).SetNoDataValue(1)
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=options)
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif", src_ds, options=options
+ )
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 174, dt
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 174, dt
# Test optimized detection when nodata==0, and with the last pixel != 0
- src_ds = gdal.GetDriverByName('MEM').Create('', 100, 1, 1)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 100, 1, 1)
src_ds.GetRasterBand(1).Fill(0)
- src_ds.GetRasterBand(1).WriteRaster(99, 0, 1, 1, struct.pack('B' * 1, 1))
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_154.tif', src_ds, options=['SPARSE_OK=YES'])
- assert gdal.VSIStatL('/vsimem/tiff_write_154.tif').size == 246
+ src_ds.GetRasterBand(1).WriteRaster(99, 0, 1, 1, struct.pack("B" * 1, 1))
+ gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_154.tif", src_ds, options=["SPARSE_OK=YES"]
+ )
+ assert gdal.VSIStatL("/vsimem/tiff_write_154.tif").size == 246
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
# Test that setting nodata doesn't prevent blocks to be written (#6706)
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_154.tif', 1, 100, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/tiff_write_154.tif", 1, 100, 1)
ds.GetRasterBand(1).SetNoDataValue(1)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_154.tif')
- offset = ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF')
+ ds = gdal.Open("/vsimem/tiff_write_154.tif")
+ offset = ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_154.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_154.tif")
assert not (offset is None or int(offset) == 0)
+
###############################################################################
# Test reading and writing band description
def test_tiff_write_155():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_155.tif', 1, 1)
- ds.GetRasterBand(1).SetDescription('foo')
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_155.tif", 1, 1)
+ ds.GetRasterBand(1).SetDescription("foo")
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_155.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/tiff_write_155.tif.aux.xml") is None
- ds = gdal.Open('/vsimem/tiff_write_155.tif')
- assert ds.GetRasterBand(1).GetDescription() == 'foo'
+ ds = gdal.Open("/vsimem/tiff_write_155.tif")
+ assert ds.GetRasterBand(1).GetDescription() == "foo"
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_155.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_155.tif")
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_155.tif', 1, 1, options=['PROFILE=GeoTIFF'])
- ds.GetRasterBand(1).SetDescription('foo')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_155.tif", 1, 1, options=["PROFILE=GeoTIFF"]
+ )
+ ds.GetRasterBand(1).SetDescription("foo")
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_155.tif.aux.xml') is not None
+ assert gdal.VSIStatL("/vsimem/tiff_write_155.tif.aux.xml") is not None
- ds = gdal.Open('/vsimem/tiff_write_155.tif')
- assert ds.GetRasterBand(1).GetDescription() == 'foo'
+ ds = gdal.Open("/vsimem/tiff_write_155.tif")
+ assert ds.GetRasterBand(1).GetDescription() == "foo"
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_155.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_155.tif")
+
###############################################################################
# Test GetDataCoverageStatus()
@@ -6226,8 +7610,13 @@ def test_tiff_write_155():
def test_tiff_write_156():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_156.tif', 64, 64, options=['SPARSE_OK=YES', 'TILED=YES', 'BLOCKXSIZE=32', 'BLOCKYSIZE=32'])
- ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, 'X')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_156.tif",
+ 64,
+ 64,
+ options=["SPARSE_OK=YES", "TILED=YES", "BLOCKXSIZE=32", "BLOCKYSIZE=32"],
+ )
+ ds.GetRasterBand(1).WriteRaster(0, 0, 1, 1, "X")
(flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(0, 0, 32, 32)
assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA and pct == 100.0
@@ -6236,20 +7625,27 @@ def test_tiff_write_156():
assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 0.0
(flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(16, 16, 32, 32)
- assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA | gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 25.0
+ assert (
+ flags
+ == gdal.GDAL_DATA_COVERAGE_STATUS_DATA | gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY
+ and pct == 25.0
+ )
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_156.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_156.tif")
# Test fix for #6703
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_156.tif', 1, 512, options=['SPARSE_OK=YES', 'BLOCKYSIZE=1'])
- ds.GetRasterBand(1).WriteRaster(0, 100, 1, 1, 'X')
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_156.tif", 1, 512, options=["SPARSE_OK=YES", "BLOCKYSIZE=1"]
+ )
+ ds.GetRasterBand(1).WriteRaster(0, 100, 1, 1, "X")
ds = None
- ds = gdal.Open('/vsimem/tiff_write_156.tif')
+ ds = gdal.Open("/vsimem/tiff_write_156.tif")
flags, _ = ds.GetRasterBand(1).GetDataCoverageStatus(0, 100, 1, 1)
assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_156.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_156.tif")
+
###############################################################################
# Test Float16
@@ -6258,39 +7654,57 @@ def test_tiff_write_156():
def test_tiff_write_157():
# Write controlled values of Float16
- vals = struct.pack('H' * 14,
- 0x0000, # Positive zero
- 0x8000, # Negative zero
- 0x7C00, # Positive infinity
- 0xFC00, # Negative infinity
- 0x7E00, # Some positive quiet NaN
- 0xFE00, # Some negative quiet NaN
- 0x3D00, # 1.25
- 0xBD00, # -1.25
- 0x0001, # Smallest positive denormalized value
- 0x8001, # Smallest negative denormalized value
- 0x03FF, # Largest positive denormalized value
- 0x83FF, # Largest negative denormalized value
- 0x0400, # Smallest positive normalized value
- 0x8400, # Smallest negative normalized value
- )
-
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_157.tif', 14, 1, 1, gdal.GDT_Float32, options=['NBITS=16'])
- ds = None
- ds = gdal.Open('/vsimem/tiff_write_157.tif')
- offset = int(ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- ds = None
-
- f = gdal.VSIFOpenL('/vsimem/tiff_write_157.tif', 'rb+')
+ vals = struct.pack(
+ "H" * 14,
+ 0x0000, # Positive zero
+ 0x8000, # Negative zero
+ 0x7C00, # Positive infinity
+ 0xFC00, # Negative infinity
+ 0x7E00, # Some positive quiet NaN
+ 0xFE00, # Some negative quiet NaN
+ 0x3D00, # 1.25
+ 0xBD00, # -1.25
+ 0x0001, # Smallest positive denormalized value
+ 0x8001, # Smallest negative denormalized value
+ 0x03FF, # Largest positive denormalized value
+ 0x83FF, # Largest negative denormalized value
+ 0x0400, # Smallest positive normalized value
+ 0x8400, # Smallest negative normalized value
+ )
+
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_157.tif", 14, 1, 1, gdal.GDT_Float32, options=["NBITS=16"]
+ )
+ ds = None
+ ds = gdal.Open("/vsimem/tiff_write_157.tif")
+ offset = int(ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF"))
+ ds = None
+
+ f = gdal.VSIFOpenL("/vsimem/tiff_write_157.tif", "rb+")
gdal.VSIFSeekL(f, offset, 0)
gdal.VSIFWriteL(vals, 1, len(vals), f)
gdal.VSIFCloseL(f)
# Check that we properly deserialize Float16 values
- ds = gdal.Open('/vsimem/tiff_write_157.tif')
- assert ds.GetRasterBand(1).GetMetadataItem('NBITS', 'IMAGE_STRUCTURE') == '16'
- got = struct.unpack('f' * 14, ds.ReadRaster())
- expected = [0.0, -0.0, gdaltest.posinf(), -gdaltest.posinf(), gdaltest.NaN(), gdaltest.NaN(), 1.25, -1.25, 5.9604644775390625e-08, -5.9604644775390625e-08, 6.0975551605224609e-05, -6.0975551605224609e-05, 6.103515625e-05, -6.103515625e-05]
+ ds = gdal.Open("/vsimem/tiff_write_157.tif")
+ assert ds.GetRasterBand(1).GetMetadataItem("NBITS", "IMAGE_STRUCTURE") == "16"
+ got = struct.unpack("f" * 14, ds.ReadRaster())
+ expected = [
+ 0.0,
+ -0.0,
+ gdaltest.posinf(),
+ -gdaltest.posinf(),
+ gdaltest.NaN(),
+ gdaltest.NaN(),
+ 1.25,
+ -1.25,
+ 5.9604644775390625e-08,
+ -5.9604644775390625e-08,
+ 6.0975551605224609e-05,
+ -6.0975551605224609e-05,
+ 6.103515625e-05,
+ -6.103515625e-05,
+ ]
for i in range(14):
if i == 4 or i == 5:
assert got[i] != got[i]
@@ -6300,58 +7714,78 @@ def test_tiff_write_157():
pytest.fail(i)
# Check that we properly decode&re-encode Float16 values
- gdal.Translate('/vsimem/tiff_write_157_dst.tif', ds)
+ gdal.Translate("/vsimem/tiff_write_157_dst.tif", ds)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_157_dst.tif')
- offset = int(ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
+ ds = gdal.Open("/vsimem/tiff_write_157_dst.tif")
+ offset = int(ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF"))
ds = None
- f = gdal.VSIFOpenL('/vsimem/tiff_write_157_dst.tif', 'rb')
+ f = gdal.VSIFOpenL("/vsimem/tiff_write_157_dst.tif", "rb")
gdal.VSIFSeekL(f, offset, 0)
vals_copied = gdal.VSIFReadL(1, 14 * 2, f)
gdal.VSIFCloseL(f)
if vals != vals_copied:
- print(struct.unpack('H' * 14, vals))
- pytest.fail(struct.unpack('H' * 14, vals_copied))
+ print(struct.unpack("H" * 14, vals))
+ pytest.fail(struct.unpack("H" * 14, vals_copied))
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_157.tif')
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_157_dst.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_157.tif")
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_157_dst.tif")
# Now try Float32 -> Float16 conversion
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_157.tif', 18, 1, 1, gdal.GDT_Float32, options=['NBITS=16'])
- vals = struct.pack('I' * 18,
- 0x00000000, # Positive zero
- 0x80000000, # Negative zero
- 0x7f800000, # Positive infinity
- 0xff800000, # Negative infinity
- 0x7fc00000, # Some positive quiet NaN
- 0xffc00000, # Some negative quiet NaN
- 0x7f800001, # Some positive signaling NaN with significant that will get lost
- 0xff800001, # Some negative signaling NaN with significant that will get lost
- 0x3fa00000, # 1.25
- 0xbfa00000, # -1.25
- 0x00000001, # Smallest positive denormalized value
- 0x80000001, # Smallest negative denormalized value
- 0x007fffff, # Largest positive denormalized value
- 0x807fffff, # Largest negative denormalized value
- 0x00800000, # Smallest positive normalized value
- 0x80800000, # Smallest negative normalized value
- 0x33800000, # 5.9604644775390625e-08 = Smallest number that can be converted as a float16 denormalized value
- 0x47800000, # 65536 --> converted to infinity
- )
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_157.tif", 18, 1, 1, gdal.GDT_Float32, options=["NBITS=16"]
+ )
+ vals = struct.pack(
+ "I" * 18,
+ 0x00000000, # Positive zero
+ 0x80000000, # Negative zero
+ 0x7F800000, # Positive infinity
+ 0xFF800000, # Negative infinity
+ 0x7FC00000, # Some positive quiet NaN
+ 0xFFC00000, # Some negative quiet NaN
+ 0x7F800001, # Some positive signaling NaN with significant that will get lost
+ 0xFF800001, # Some negative signaling NaN with significant that will get lost
+ 0x3FA00000, # 1.25
+ 0xBFA00000, # -1.25
+ 0x00000001, # Smallest positive denormalized value
+ 0x80000001, # Smallest negative denormalized value
+ 0x007FFFFF, # Largest positive denormalized value
+ 0x807FFFFF, # Largest negative denormalized value
+ 0x00800000, # Smallest positive normalized value
+ 0x80800000, # Smallest negative normalized value
+ 0x33800000, # 5.9604644775390625e-08 = Smallest number that can be converted as a float16 denormalized value
+ 0x47800000, # 65536 --> converted to infinity
+ )
ds.GetRasterBand(1).WriteRaster(0, 0, 18, 1, vals, buf_type=gdal.GDT_Float32)
with gdaltest.error_handler():
ds.FlushCache()
ds = None
- ds = gdal.Open('/vsimem/tiff_write_157.tif')
- got = struct.unpack('f' * 18, ds.ReadRaster())
- ds = None
- expected = (0.0, -0.0, gdaltest.posinf(), -gdaltest.posinf(),
- gdaltest.NaN(), gdaltest.NaN(), gdaltest.NaN(), gdaltest.NaN(),
- 1.25, -1.25, 0.0, -0.0, 0.0, -0.0, 0.0, -0.0, 5.9604644775390625e-08, gdaltest.posinf())
+ ds = gdal.Open("/vsimem/tiff_write_157.tif")
+ got = struct.unpack("f" * 18, ds.ReadRaster())
+ ds = None
+ expected = (
+ 0.0,
+ -0.0,
+ gdaltest.posinf(),
+ -gdaltest.posinf(),
+ gdaltest.NaN(),
+ gdaltest.NaN(),
+ gdaltest.NaN(),
+ gdaltest.NaN(),
+ 1.25,
+ -1.25,
+ 0.0,
+ -0.0,
+ 0.0,
+ -0.0,
+ 0.0,
+ -0.0,
+ 5.9604644775390625e-08,
+ gdaltest.posinf(),
+ )
for i in range(18):
if i in (4, 5, 6, 7):
@@ -6360,18 +7794,23 @@ def test_tiff_write_157():
else:
assert got[i] == pytest.approx(expected[i], abs=1e-15)
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_157.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_157.tif")
# Test pixel interleaved
- gdal.Translate('/vsimem/tiff_write_157.tif', '../gdrivers/data/small_world.tif', options='-co NBITS=16 -ot Float32')
- ds = gdal.Open('/vsimem/tiff_write_157.tif')
+ gdal.Translate(
+ "/vsimem/tiff_write_157.tif",
+ "../gdrivers/data/small_world.tif",
+ options="-co NBITS=16 -ot Float32",
+ )
+ ds = gdal.Open("/vsimem/tiff_write_157.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 30111
cs = ds.GetRasterBand(2).Checksum()
assert cs == 32302
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_157.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_157.tif")
+
###############################################################################
# Test GetActualBlockSize() (perhaps not the best place for that...)
@@ -6379,7 +7818,13 @@ def test_tiff_write_157():
def test_tiff_write_158():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_158.tif', 20, 40, 1, options=['TILED=YES', 'BLOCKXSIZE=16', 'BLOCKYSIZE=32'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_158.tif",
+ 20,
+ 40,
+ 1,
+ options=["TILED=YES", "BLOCKXSIZE=16", "BLOCKYSIZE=32"],
+ )
(w, h) = ds.GetRasterBand(1).GetActualBlockSize(0, 0)
assert (w, h) == (16, 32)
(w, h) = ds.GetRasterBand(1).GetActualBlockSize(1, 1)
@@ -6394,7 +7839,8 @@ def test_tiff_write_158():
assert res is None
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_158.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_158.tif")
+
###############################################################################
# Test that COPY_SRC_OVERVIEWS creation option with JPEG compression
@@ -6404,77 +7850,111 @@ def test_tiff_write_158():
def test_tiff_write_159():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- prev_table = ''
- for options in [[], ['JPEG_QUALITY=50'], ['PHOTOMETRIC=YCBCR']]:
+ prev_table = ""
+ for options in [[], ["JPEG_QUALITY=50"], ["PHOTOMETRIC=YCBCR"]]:
- src_ds = gdal.Translate('', '../gdrivers/data/small_world.tif', format='MEM')
- src_ds.BuildOverviews('NEAR', overviewlist=[2, 4])
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_159.tif', src_ds,
- options=['COPY_SRC_OVERVIEWS=YES', 'COMPRESS=JPEG'] + options)
+ src_ds = gdal.Translate("", "../gdrivers/data/small_world.tif", format="MEM")
+ src_ds.BuildOverviews("NEAR", overviewlist=[2, 4])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_159.tif",
+ src_ds,
+ options=["COPY_SRC_OVERVIEWS=YES", "COMPRESS=JPEG"] + options,
+ )
ds = None
src_ds = None
- ds = gdal.Open('/vsimem/tiff_write_159.tif')
+ ds = gdal.Open("/vsimem/tiff_write_159.tif")
cs0 = ds.GetRasterBand(1).Checksum()
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
cs2 = ds.GetRasterBand(1).GetOverview(1).Checksum()
assert not (cs0 == 0 or cs1 == 0 or cs2 == 0), options
- ifd_main = int(ds.GetRasterBand(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- ifd_ovr_0 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- ifd_ovr_1 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('IFD_OFFSET', 'TIFF'))
- data_ovr_1 = int(ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- data_ovr_0 = int(ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- data_main = int(ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_0', 'TIFF'))
- assert (ifd_main < ifd_ovr_0 and ifd_ovr_0 < ifd_ovr_1 and ifd_ovr_1 < data_ovr_1 and data_ovr_1 < data_ovr_0 and data_ovr_0 < data_main), \
- options
- table_main = ds.GetRasterBand(1).GetMetadataItem('JPEGTABLES', 'TIFF')
- table_ovr_0 = ds.GetRasterBand(1).GetOverview(0).GetMetadataItem('JPEGTABLES', 'TIFF')
- table_ovr_1 = ds.GetRasterBand(1).GetOverview(1).GetMetadataItem('JPEGTABLES', 'TIFF')
+ ifd_main = int(ds.GetRasterBand(1).GetMetadataItem("IFD_OFFSET", "TIFF"))
+ ifd_ovr_0 = int(
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ ifd_ovr_1 = int(
+ ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("IFD_OFFSET", "TIFF")
+ )
+ data_ovr_1 = int(
+ ds.GetRasterBand(1)
+ .GetOverview(1)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ )
+ data_ovr_0 = int(
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF")
+ )
+ data_main = int(ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_0", "TIFF"))
+ assert (
+ ifd_main < ifd_ovr_0
+ and ifd_ovr_0 < ifd_ovr_1
+ and ifd_ovr_1 < data_ovr_1
+ and data_ovr_1 < data_ovr_0
+ and data_ovr_0 < data_main
+ ), options
+ table_main = ds.GetRasterBand(1).GetMetadataItem("JPEGTABLES", "TIFF")
+ table_ovr_0 = (
+ ds.GetRasterBand(1).GetOverview(0).GetMetadataItem("JPEGTABLES", "TIFF")
+ )
+ table_ovr_1 = (
+ ds.GetRasterBand(1).GetOverview(1).GetMetadataItem("JPEGTABLES", "TIFF")
+ )
assert table_main == table_ovr_0 and table_ovr_0 == table_ovr_1, options
# Check that the JPEG tables are different in the 3 modes
assert table_main != prev_table, options
prev_table = table_main
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_159.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_159.tif")
for value in range(4):
- src_ds = gdal.Translate('', 'data/byte.tif', format='MEM')
- src_ds.BuildOverviews('NEAR', overviewlist=[2])
- ds = gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_159.tif', src_ds,
- options=['COPY_SRC_OVERVIEWS=YES', 'COMPRESS=JPEG', 'JPEGTABLESMODE=%d' % value])
+ src_ds = gdal.Translate("", "data/byte.tif", format="MEM")
+ src_ds.BuildOverviews("NEAR", overviewlist=[2])
+ ds = gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tiff_write_159.tif",
+ src_ds,
+ options=[
+ "COPY_SRC_OVERVIEWS=YES",
+ "COMPRESS=JPEG",
+ "JPEGTABLESMODE=%d" % value,
+ ],
+ )
ds = None
src_ds = None
- ds = gdal.Open('/vsimem/tiff_write_159.tif')
+ ds = gdal.Open("/vsimem/tiff_write_159.tif")
cs0 = ds.GetRasterBand(1).Checksum()
cs1 = ds.GetRasterBand(1).GetOverview(0).Checksum()
assert cs0 == 4743 and cs1 == 1133, value
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_159.tif')
-
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_159.tif")
###############################################################################
# Test the Create() interface with a BLOCKYSIZE > image height
+
def test_tiff_write_160():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_160.tif', 10, 10, options=['BLOCKYSIZE=11'])
+ ds = gdaltest.tiff_drv.Create(
+ "/vsimem/tiff_write_160.tif", 10, 10, options=["BLOCKYSIZE=11"]
+ )
ds.GetRasterBand(1).Fill(255)
ds = None
- ds = gdal.Open('/vsimem/tiff_write_160.tif')
+ ds = gdal.Open("/vsimem/tiff_write_160.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 1218
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_160.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_160.tif")
+
###############################################################################
# Test setting GCPs on an image with already a geotransform and vice-versa (#6751)
@@ -6482,18 +7962,18 @@ def test_tiff_write_160():
def test_tiff_write_161():
- ds = gdaltest.tiff_drv.Create('/vsimem/tiff_write_161.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/tiff_write_161.tif", 1, 1)
ds.SetGeoTransform([0, 1, 2, 3, 4, 5])
ds = None
- ds = gdal.Open('/vsimem/tiff_write_161.tif', gdal.GA_Update)
- src_ds = gdal.Open('data/gcps.vrt')
+ ds = gdal.Open("/vsimem/tiff_write_161.tif", gdal.GA_Update)
+ src_ds = gdal.Open("data/gcps.vrt")
with gdaltest.error_handler():
- assert ds.SetGCPs(src_ds.GetGCPs(), '') == 0
+ assert ds.SetGCPs(src_ds.GetGCPs(), "") == 0
assert ds.GetGeoTransform(can_return_null=True) is None
ds = None
- ds = gdal.Open('/vsimem/tiff_write_161.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_161.tif", gdal.GA_Update)
assert ds.GetGCPs()
assert ds.GetGeoTransform(can_return_null=True) is None
with gdaltest.error_handler():
@@ -6502,12 +7982,13 @@ def test_tiff_write_161():
assert not ds.GetGCPs()
ds = None
- ds = gdal.Open('/vsimem/tiff_write_161.tif', gdal.GA_Update)
+ ds = gdal.Open("/vsimem/tiff_write_161.tif", gdal.GA_Update)
assert not ds.GetGCPs()
assert ds.GetGeoTransform() == (0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_161.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_161.tif")
+
###############################################################################
# Test creating a JPEG compressed file with big tiles (#6757)
@@ -6515,16 +7996,16 @@ def test_tiff_write_161():
def test_tiff_write_162():
- src_ds = gdal.GetDriverByName('MEM').Create('', 512, 512, 3)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 512, 512, 3)
- options = ['TILED=YES', 'BLOCKXSIZE=512', 'BLOCKYSIZE=512', 'COMPRESS=JPEG']
+ options = ["TILED=YES", "BLOCKXSIZE=512", "BLOCKYSIZE=512", "COMPRESS=JPEG"]
- gdaltest.tiff_drv.CreateCopy('/vsimem/tiff_write_162.tif', src_ds,
- options=options)
+ gdaltest.tiff_drv.CreateCopy("/vsimem/tiff_write_162.tif", src_ds, options=options)
- assert gdal.GetLastErrorMsg() == ''
+ assert gdal.GetLastErrorMsg() == ""
+
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_162.tif")
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_162.tif')
###############################################################################
# Test creating a file that would trigger strip chopping (#6924)
@@ -6533,20 +8014,24 @@ def test_tiff_write_162():
def test_tiff_write_163():
# Was a libtiff 4.0.8 regression
- if gdaltest.tiff_drv.GetMetadataItem('LIBTIFF').find('4.0.8') >= 0:
- pytest.skip('Test broken with libtiff 4.0.8')
-
- gdal.Translate('/vsimem/tiff_write_163.tif', 'data/byte.tif',
- options='-outsize 1 20000 -co BLOCKYSIZE=20000 -co PROFILE=BASELINE')
- ds = gdal.Open('/vsimem/tiff_write_163.tif')
+ if gdaltest.tiff_drv.GetMetadataItem("LIBTIFF").find("4.0.8") >= 0:
+ pytest.skip("Test broken with libtiff 4.0.8")
+
+ gdal.Translate(
+ "/vsimem/tiff_write_163.tif",
+ "data/byte.tif",
+ options="-outsize 1 20000 -co BLOCKYSIZE=20000 -co PROFILE=BASELINE",
+ )
+ ds = gdal.Open("/vsimem/tiff_write_163.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 47567
# Check that IsBlockAvailable() works properly in that mode
- offset_0_2 = ds.GetRasterBand(1).GetMetadataItem('BLOCK_OFFSET_0_2', 'TIFF')
+ offset_0_2 = ds.GetRasterBand(1).GetMetadataItem("BLOCK_OFFSET_0_2", "TIFF")
assert offset_0_2 == str(146 + 2 * 8192)
ds = None
- gdaltest.tiff_drv.Delete('/vsimem/tiff_write_163.tif')
+ gdaltest.tiff_drv.Delete("/vsimem/tiff_write_163.tif")
+
###############################################################################
# Test that we handle [0,1,0,0,0,1] geotransform as a regular geotransform
@@ -6554,28 +8039,29 @@ def test_tiff_write_163():
def test_tiff_write_164():
- ds = gdaltest.tiff_drv.Create('/vsimem/test.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/test.tif", 1, 1)
ds.SetGeoTransform([0, 1, 0, 0, 0, 1])
ds = None
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
gt = ds.GetGeoTransform(can_return_null=True)
ds = None
assert gt == (0, 1, 0, 0, 0, 1)
# Test [0,1,0,0,0,-1] as well
- ds = gdaltest.tiff_drv.Create('/vsimem/test.tif', 1, 1)
+ ds = gdaltest.tiff_drv.Create("/vsimem/test.tif", 1, 1)
ds.SetGeoTransform([0, 1, 0, 0, 0, -1])
ds = None
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
gt = ds.GetGeoTransform(can_return_null=True)
ds = None
assert gt == (0, 1, 0, 0, 0, -1)
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
# Test the current behaviour of per-band nodata vs per-dataset serialization
@@ -6583,13 +8069,13 @@ def test_tiff_write_164():
def test_tiff_write_165():
- ds = gdaltest.tiff_drv.Create('/vsimem/test.tif', 1, 1, 3)
+ ds = gdaltest.tiff_drv.Create("/vsimem/test.tif", 1, 1, 3)
ret = ds.GetRasterBand(1).SetNoDataValue(100)
assert ret == 0
with gdaltest.error_handler():
ret = ds.GetRasterBand(2).SetNoDataValue(200)
- assert gdal.GetLastErrorMsg() != '', 'warning expected, but not emitted'
+ assert gdal.GetLastErrorMsg() != "", "warning expected, but not emitted"
assert ret == 0
nd = ds.GetRasterBand(1).GetNoDataValue()
@@ -6600,13 +8086,14 @@ def test_tiff_write_165():
ds = None
- ds = gdal.Open('/vsimem/test.tif')
+ ds = gdal.Open("/vsimem/test.tif")
nd = ds.GetRasterBand(1).GetNoDataValue()
ds = None
assert nd == 200
- gdal.Unlink('/vsimem/test.tif')
+ gdal.Unlink("/vsimem/test.tif")
+
###############################################################################
# Test reading & writing Z dimension for ModelTiepointTag and ModelPixelScaleTag (#7093)
@@ -6614,154 +8101,175 @@ def test_tiff_write_165():
def test_tiff_write_166():
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('data/tiff_vertcs_scale_offset.tif')
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("data/tiff_vertcs_scale_offset.tif")
assert ds.GetRasterBand(1).GetScale() == 2.0
assert ds.GetRasterBand(1).GetOffset() == 10.0
# Scale + offset through CreateCopy()
- gdal.Translate('/vsimem/tiff_write_166.tif', 'data/byte.tif',
- options='-a_srs EPSG:26711+5773 -a_scale 2.0 -a_offset 10 -co PROFILE=GEOTIFF')
- assert gdal.VSIStatL('/vsimem/tiff_write_166.tif.aux.xml') is None
-
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('/vsimem/tiff_write_166.tif')
+ gdal.Translate(
+ "/vsimem/tiff_write_166.tif",
+ "data/byte.tif",
+ options="-a_srs EPSG:26711+5773 -a_scale 2.0 -a_offset 10 -co PROFILE=GEOTIFF",
+ )
+ assert gdal.VSIStatL("/vsimem/tiff_write_166.tif.aux.xml") is None
+
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("/vsimem/tiff_write_166.tif")
assert ds.GetRasterBand(1).GetScale() == 2.0
assert ds.GetRasterBand(1).GetOffset() == 10.0
ds = None
- gdal.Unlink('/vsimem/tiff_write_166.tif')
+ gdal.Unlink("/vsimem/tiff_write_166.tif")
# Offset only through CreateCopy()
- gdal.Translate('/vsimem/tiff_write_166.tif', 'data/byte.tif',
- options='-a_srs EPSG:26711+5773 -a_offset 10 -co PROFILE=GEOTIFF')
- assert gdal.VSIStatL('/vsimem/tiff_write_166.tif.aux.xml') is None
-
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('/vsimem/tiff_write_166.tif')
+ gdal.Translate(
+ "/vsimem/tiff_write_166.tif",
+ "data/byte.tif",
+ options="-a_srs EPSG:26711+5773 -a_offset 10 -co PROFILE=GEOTIFF",
+ )
+ assert gdal.VSIStatL("/vsimem/tiff_write_166.tif.aux.xml") is None
+
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("/vsimem/tiff_write_166.tif")
assert ds.GetRasterBand(1).GetScale() == 1.0
assert ds.GetRasterBand(1).GetOffset() == 10.0
ds = None
- gdal.Unlink('/vsimem/tiff_write_166.tif')
+ gdal.Unlink("/vsimem/tiff_write_166.tif")
# Scale + offset through Create()
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_166.tif', 1, 1, options=['PROFILE=GEOTIFF'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_166.tif", 1, 1, options=["PROFILE=GEOTIFF"]
+ )
sr = osr.SpatialReference()
- sr.SetFromUserInput('EPSG:26711+5773')
+ sr.SetFromUserInput("EPSG:26711+5773")
ds.SetProjection(sr.ExportToWkt())
ds.SetGeoTransform([440720, 60, 0, 3751320, 0, -60])
ds.GetRasterBand(1).SetScale(2)
ds.GetRasterBand(1).SetOffset(10)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_166.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/tiff_write_166.tif.aux.xml") is None
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('/vsimem/tiff_write_166.tif')
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("/vsimem/tiff_write_166.tif")
assert ds.GetRasterBand(1).GetScale() == 2.0
assert ds.GetRasterBand(1).GetOffset() == 10.0
ds = None
- gdal.Unlink('/vsimem/tiff_write_166.tif')
+ gdal.Unlink("/vsimem/tiff_write_166.tif")
# Scale only through Create()
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_166.tif', 1, 1, options=['PROFILE=GEOTIFF'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_166.tif", 1, 1, options=["PROFILE=GEOTIFF"]
+ )
sr = osr.SpatialReference()
- sr.SetFromUserInput('EPSG:26711+5773')
+ sr.SetFromUserInput("EPSG:26711+5773")
ds.SetProjection(sr.ExportToWkt())
ds.SetGeoTransform([440720, 60, 0, 3751320, 0, -60])
ds.GetRasterBand(1).SetScale(2)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_166.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/tiff_write_166.tif.aux.xml") is None
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('/vsimem/tiff_write_166.tif')
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("/vsimem/tiff_write_166.tif")
assert ds.GetRasterBand(1).GetScale() == 2.0
assert ds.GetRasterBand(1).GetOffset() == 0.0
ds = None
- gdal.Unlink('/vsimem/tiff_write_166.tif')
+ gdal.Unlink("/vsimem/tiff_write_166.tif")
# Offset only through through Create()
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/tiff_write_166.tif', 1, 1, options=['PROFILE=GEOTIFF'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/tiff_write_166.tif", 1, 1, options=["PROFILE=GEOTIFF"]
+ )
sr = osr.SpatialReference()
- sr.SetFromUserInput('EPSG:26711+5773')
+ sr.SetFromUserInput("EPSG:26711+5773")
ds.SetProjection(sr.ExportToWkt())
ds.SetGeoTransform([440720, 60, 0, 3751320, 0, -60])
ds.GetRasterBand(1).SetOffset(10)
ds = None
- assert gdal.VSIStatL('/vsimem/tiff_write_166.tif.aux.xml') is None
+ assert gdal.VSIStatL("/vsimem/tiff_write_166.tif.aux.xml") is None
- with gdaltest.config_option('GTIFF_REPORT_COMPD_CS', 'YES'):
- ds = gdal.Open('/vsimem/tiff_write_166.tif')
+ with gdaltest.config_option("GTIFF_REPORT_COMPD_CS", "YES"):
+ ds = gdal.Open("/vsimem/tiff_write_166.tif")
assert ds.GetRasterBand(1).GetScale() == 1.0
assert ds.GetRasterBand(1).GetOffset() == 10.0
ds = None
- gdal.Unlink('/vsimem/tiff_write_166.tif')
+ gdal.Unlink("/vsimem/tiff_write_166.tif")
+
###############################################################################
def test_tiff_write_167_deflate_zlevel():
- src_ds = gdal.Open('data/byte.tif')
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/out.tif', src_ds,
- options=['COMPRESS=DEFLATE',
- 'ZLEVEL=1'])
- size1 = gdal.VSIStatL('/vsimem/out.tif').size
+ src_ds = gdal.Open("data/byte.tif")
+ gdal.GetDriverByName("GTiff").CreateCopy(
+ "/vsimem/out.tif", src_ds, options=["COMPRESS=DEFLATE", "ZLEVEL=1"]
+ )
+ size1 = gdal.VSIStatL("/vsimem/out.tif").size
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/out.tif', src_ds,
- options=['COMPRESS=DEFLATE',
- 'NUM_THREADS=2',
- 'ZLEVEL=9'])
- size2 = gdal.VSIStatL('/vsimem/out.tif').size
- gdal.Unlink('/vsimem/out.tif')
+ gdal.GetDriverByName("GTiff").CreateCopy(
+ "/vsimem/out.tif",
+ src_ds,
+ options=["COMPRESS=DEFLATE", "NUM_THREADS=2", "ZLEVEL=9"],
+ )
+ size2 = gdal.VSIStatL("/vsimem/out.tif").size
+ gdal.Unlink("/vsimem/out.tif")
assert size2 < size1
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/out.tif', 20, 20, 1,
- options=['COMPRESS=DEFLATE',
- 'ZLEVEL=9'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/out.tif", 20, 20, 1, options=["COMPRESS=DEFLATE", "ZLEVEL=9"]
+ )
ds.SetProjection(src_ds.GetProjectionRef())
ds.SetGeoTransform(src_ds.GetGeoTransform())
ds.WriteRaster(0, 0, 20, 20, src_ds.ReadRaster())
ds = None
- size2_create = gdal.VSIStatL('/vsimem/out.tif').size
- gdal.Unlink('/vsimem/out.tif')
+ size2_create = gdal.VSIStatL("/vsimem/out.tif").size
+ gdal.Unlink("/vsimem/out.tif")
assert size2 == size2_create
+
###############################################################################
# Test CCITTFAX3
def test_tiff_write_168_ccitfax3():
- ut = gdaltest.GDALTest('GTiff', 'oddsize1bit.tif', 1, 5918,
- options=['NBITS=1', 'COMPRESS=CCITTFAX3'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "oddsize1bit.tif", 1, 5918, options=["NBITS=1", "COMPRESS=CCITTFAX3"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test CCITTRLE
def test_tiff_write_169_ccitrle():
- ut = gdaltest.GDALTest('GTiff', 'oddsize1bit.tif', 1, 5918,
- options=['NBITS=1', 'COMPRESS=CCITTRLE'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "oddsize1bit.tif", 1, 5918, options=["NBITS=1", "COMPRESS=CCITTRLE"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test invalid compression method
def test_tiff_write_170_invalid_compresion():
- src_ds = gdal.Open('data/byte.tif')
+ src_ds = gdal.Open("data/byte.tif")
with gdaltest.error_handler():
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/out.tif', src_ds,
- options=['COMPRESS=INVALID'])
- assert gdal.GetLastErrorMsg() != ''
- gdal.Unlink('/vsimem/out.tif')
+ gdal.GetDriverByName("GTiff").CreateCopy(
+ "/vsimem/out.tif", src_ds, options=["COMPRESS=INVALID"]
+ )
+ assert gdal.GetLastErrorMsg() != ""
+ gdal.Unlink("/vsimem/out.tif")
+
###############################################################################
# Test ZSTD compression
@@ -6770,13 +8278,15 @@ def test_tiff_write_170_invalid_compresion():
def test_tiff_write_171_zstd():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('ZSTD') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=ZSTD', 'ZSTD_LEVEL=1'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "byte.tif", 1, 4672, options=["COMPRESS=ZSTD", "ZSTD_LEVEL=1"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test ZSTD compression with PREDICTOR = 2
@@ -6784,13 +8294,19 @@ def test_tiff_write_171_zstd():
def test_tiff_write_171_zstd_predictor():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('ZSTD') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=ZSTD', 'ZSTD_LEVEL=1', 'PREDICTOR=2'])
+ ut = gdaltest.GDALTest(
+ "GTiff",
+ "byte.tif",
+ 1,
+ 4672,
+ options=["COMPRESS=ZSTD", "ZSTD_LEVEL=1", "PREDICTOR=2"],
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test WEBP compression
@@ -6798,13 +8314,15 @@ def test_tiff_write_171_zstd_predictor():
def test_tiff_write_webp():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'md_ge_rgb_0010000.tif', 0, None,
- options=['COMPRESS=WEBP'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "md_ge_rgb_0010000.tif", 0, None, options=["COMPRESS=WEBP"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test WEBP compression with internal tiling
@@ -6812,24 +8330,24 @@ def test_tiff_write_webp():
def test_tiff_write_tiled_webp():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP_LOSSLESS') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP_LOSSLESS") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_tiled_webp.tif'
- src_ds = gdal.Open('data/md_ge_rgb_0010000.tif')
- gdaltest.tiff_drv.CreateCopy(filename, src_ds,
- options=['COMPRESS=WEBP',
- 'WEBP_LOSSLESS=true',
- 'TILED=true'])
+ filename = "/vsimem/tiff_write_tiled_webp.tif"
+ src_ds = gdal.Open("data/md_ge_rgb_0010000.tif")
+ gdaltest.tiff_drv.CreateCopy(
+ filename, src_ds, options=["COMPRESS=WEBP", "WEBP_LOSSLESS=true", "TILED=true"]
+ )
ds = gdal.Open(filename)
- cs = [ds.GetRasterBand(i+1).Checksum() for i in range(3)]
+ cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(3)]
assert cs == [21212, 21053, 21349]
gdaltest.tiff_drv.Delete(filename)
- gdal.Unlink('data/md_ge_rgb_0010000.tif.aux.xml')
+ gdal.Unlink("data/md_ge_rgb_0010000.tif.aux.xml")
+
###############################################################################
# Test WEBP compression with huge single strip
@@ -6838,27 +8356,30 @@ def test_tiff_write_tiled_webp():
def test_tiff_write_webp_huge_single_strip():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('WEBP') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("WEBP") == -1:
pytest.skip()
- filename = '/vsimem/tif_webp_huge_single_strip.tif'
- src_ds = gdal.Open('data/tif_webp_huge_single_strip.tif')
- gdaltest.tiff_drv.CreateCopy(filename, src_ds,
- options=['COMPRESS=WEBP',
- 'BLOCKYSIZE=2001'])
+ filename = "/vsimem/tif_webp_huge_single_strip.tif"
+ src_ds = gdal.Open("data/tif_webp_huge_single_strip.tif")
+ gdaltest.tiff_drv.CreateCopy(
+ filename, src_ds, options=["COMPRESS=WEBP", "BLOCKYSIZE=2001"]
+ )
ds = gdal.Open(filename)
- original_stats = [src_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(3)]
+ original_stats = [
+ src_ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(3)
+ ]
got_stats = [ds.GetRasterBand(i + 1).ComputeStatistics(True) for i in range(3)]
ds = None
src_ds = None
for i in range(3):
for j in range(4):
- assert original_stats[i][j] == pytest.approx(got_stats[i][j], abs=1e-1 * abs(original_stats[i][j])), \
- 'did not get expected statistics'
+ assert original_stats[i][j] == pytest.approx(
+ got_stats[i][j], abs=1e-1 * abs(original_stats[i][j])
+ ), "did not get expected statistics"
gdaltest.tiff_drv.Delete(filename)
- gdal.Unlink('data/tif_webp_huge_single_strip.tif.aux.xml')
+ gdal.Unlink("data/tif_webp_huge_single_strip.tif.aux.xml")
###############################################################################
@@ -6867,25 +8388,26 @@ def test_tiff_write_webp_huge_single_strip():
def test_tiff_write_172_geometadata_tiff_rsid():
- tmpfilename = '/vsimem/tiff_write_172_geometadata_tiff_rsid.tiff'
- ds = gdal.GetDriverByName('GTiff').Create(tmpfilename, 1, 1)
- ds.SetMetadataItem('GEO_METADATA', 'foo')
- ds.SetMetadataItem('TIFF_RSID', 'bar')
+ tmpfilename = "/vsimem/tiff_write_172_geometadata_tiff_rsid.tiff"
+ ds = gdal.GetDriverByName("GTiff").Create(tmpfilename, 1, 1)
+ ds.SetMetadataItem("GEO_METADATA", "foo")
+ ds.SetMetadataItem("TIFF_RSID", "bar")
ds = None
ds = gdal.Open(tmpfilename, gdal.GA_Update)
- assert ds.GetMetadataItem('GEO_METADATA') == 'foo', ds.GetMetadata()
- assert ds.GetMetadataItem('TIFF_RSID') == 'bar', ds.GetMetadata()
+ assert ds.GetMetadataItem("GEO_METADATA") == "foo", ds.GetMetadata()
+ assert ds.GetMetadataItem("TIFF_RSID") == "bar", ds.GetMetadata()
ds.SetMetadata({})
ds = None
ds = gdal.Open(tmpfilename)
- assert ds.GetMetadataItem('GEO_METADATA') is None, ds.GetMetadata()
- assert ds.GetMetadataItem('TIFF_RSID') is None, ds.GetMetadata()
+ assert ds.GetMetadataItem("GEO_METADATA") is None, ds.GetMetadata()
+ assert ds.GetMetadataItem("TIFF_RSID") is None, ds.GetMetadata()
ds = None
gdal.Unlink(tmpfilename)
+
###############################################################################
# Test LERC compression
@@ -6893,13 +8415,13 @@ def test_tiff_write_172_geometadata_tiff_rsid():
def test_tiff_write_173_lerc():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=LERC'])
+ ut = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672, options=["COMPRESS=LERC"])
return ut.testCreateCopy()
+
###############################################################################
# Test LERC_DEFLATE compression
@@ -6907,13 +8429,15 @@ def test_tiff_write_173_lerc():
def test_tiff_write_174_lerc_deflate():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC_DEFLATE') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC_DEFLATE") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=LERC_DEFLATE'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "byte.tif", 1, 4672, options=["COMPRESS=LERC_DEFLATE"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test LERC_DEFLATE compression
@@ -6921,13 +8445,15 @@ def test_tiff_write_174_lerc_deflate():
def test_tiff_write_174_lerc_deflate_with_level():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC_DEFLATE') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC_DEFLATE") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=LERC_DEFLATE', 'ZLEVEL=1'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "byte.tif", 1, 4672, options=["COMPRESS=LERC_DEFLATE", "ZLEVEL=1"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test LERC_ZSTD compression
@@ -6935,13 +8461,13 @@ def test_tiff_write_174_lerc_deflate_with_level():
def test_tiff_write_175_lerc_zstd():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC_ZSTD') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC_ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=LERC_ZSTD'])
+ ut = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672, options=["COMPRESS=LERC_ZSTD"])
return ut.testCreateCopy()
+
###############################################################################
# Test LERC_ZSTD compression
@@ -6949,13 +8475,15 @@ def test_tiff_write_175_lerc_zstd():
def test_tiff_write_175_lerc_zstd_with_level():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC_ZSTD') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC_ZSTD") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672,
- options=['COMPRESS=LERC_ZSTD', 'ZSTD_LEVEL=1'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "byte.tif", 1, 4672, options=["COMPRESS=LERC_ZSTD", "ZSTD_LEVEL=1"]
+ )
return ut.testCreateCopy()
+
###############################################################################
# Test LERC compression with MAX_Z_ERROR
@@ -6963,13 +8491,15 @@ def test_tiff_write_175_lerc_zstd_with_level():
def test_tiff_write_176_lerc_max_z_error():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4529,
- options=['COMPRESS=LERC', 'MAX_Z_ERROR=1'])
+ ut = gdaltest.GDALTest(
+ "GTiff", "byte.tif", 1, 4529, options=["COMPRESS=LERC", "MAX_Z_ERROR=1"]
+ )
return ut.testCreateCopy(skip_preclose_test=1)
+
###############################################################################
# Test LERC compression with several bands and tiling
@@ -6977,18 +8507,22 @@ def test_tiff_write_176_lerc_max_z_error():
def test_tiff_write_177_lerc_several_bands_tiling():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_177_lerc_several_bands_tiling.tif'
- gdal.Translate(filename, '../gdrivers/data/small_world.tif',
- creationOptions=['COMPRESS=LERC', 'TILED=YES'])
+ filename = "/vsimem/tiff_write_177_lerc_several_bands_tiling.tif"
+ gdal.Translate(
+ filename,
+ "../gdrivers/data/small_world.tif",
+ creationOptions=["COMPRESS=LERC", "TILED=YES"],
+ )
ds = gdal.Open(filename)
- cs = [ds.GetRasterBand(i+1).Checksum() for i in range(3)]
+ cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(3)]
ds = None
gdal.Unlink(filename)
assert cs == [30111, 32302, 40026]
+
###############################################################################
# Test LERC compression with alpha band
@@ -6996,18 +8530,20 @@ def test_tiff_write_177_lerc_several_bands_tiling():
def test_tiff_write_178_lerc_with_alpha():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_178_lerc_with_alpha.tif'
- gdal.Translate(filename, 'data/stefan_full_rgba.tif',
- creationOptions=['COMPRESS=LERC'])
+ filename = "/vsimem/tiff_write_178_lerc_with_alpha.tif"
+ gdal.Translate(
+ filename, "data/stefan_full_rgba.tif", creationOptions=["COMPRESS=LERC"]
+ )
ds = gdal.Open(filename)
- cs = [ds.GetRasterBand(i+1).Checksum() for i in range(4)]
+ cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(4)]
ds = None
gdal.Unlink(filename)
assert cs == [12603, 58561, 36064, 10807]
+
###############################################################################
# Test LERC compression with alpha band with only 0 and 255
@@ -7015,18 +8551,22 @@ def test_tiff_write_178_lerc_with_alpha():
def test_tiff_write_178_lerc_with_alpha_0_and_255():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_178_lerc_with_alpha_0_and_255.tif'
- gdal.Translate(filename, 'data/rgba_with_alpha_0_and_255.tif',
- creationOptions=['COMPRESS=LERC'])
+ filename = "/vsimem/tiff_write_178_lerc_with_alpha_0_and_255.tif"
+ gdal.Translate(
+ filename,
+ "data/rgba_with_alpha_0_and_255.tif",
+ creationOptions=["COMPRESS=LERC"],
+ )
ds = gdal.Open(filename)
- cs = [ds.GetRasterBand(i+1).Checksum() for i in range(4)]
+ cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(4)]
ds = None
gdal.Unlink(filename)
assert cs == [13, 13, 13, 13]
+
###############################################################################
# Test LERC compression with different data types
@@ -7034,14 +8574,21 @@ def test_tiff_write_178_lerc_with_alpha_0_and_255():
def test_tiff_write_179_lerc_data_types():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_179_lerc_data_types.tif'
- for src_filename in ['uint16.tif', 'int16.tif', 'uint32.tif', 'int32.tif',
- 'float32.tif', 'float64.tif']:
- gdal.Translate(filename, 'data/' + src_filename,
- creationOptions=['COMPRESS=LERC'])
+ filename = "/vsimem/tiff_write_179_lerc_data_types.tif"
+ for src_filename in [
+ "uint16.tif",
+ "int16.tif",
+ "uint32.tif",
+ "int32.tif",
+ "float32.tif",
+ "float64.tif",
+ ]:
+ gdal.Translate(
+ filename, "data/" + src_filename, creationOptions=["COMPRESS=LERC"]
+ )
ds = gdal.Open(filename)
cs = ds.GetRasterBand(1).Checksum()
ds = None
@@ -7049,9 +8596,10 @@ def test_tiff_write_179_lerc_data_types():
assert cs == 4672
filename_tmp = filename + ".tmp.tif"
- gdal.Translate(filename_tmp, 'data/byte.tif',
- creationOptions=['PIXELTYPE=SIGNEDBYTE'])
- gdal.Translate(filename, filename_tmp, creationOptions=['COMPRESS=LERC'])
+ gdal.Translate(
+ filename_tmp, "data/byte.tif", creationOptions=["PIXELTYPE=SIGNEDBYTE"]
+ )
+ gdal.Translate(filename, filename_tmp, creationOptions=["COMPRESS=LERC"])
gdal.Unlink(filename_tmp)
ds = gdal.Open(filename)
cs = ds.GetRasterBand(1).Checksum()
@@ -7061,10 +8609,11 @@ def test_tiff_write_179_lerc_data_types():
gdal.ErrorReset()
with gdaltest.error_handler():
- gdal.Translate(filename, 'data/cfloat32.tif', creationOptions=['COMPRESS=LERC'])
- assert gdal.GetLastErrorMsg() != ''
+ gdal.Translate(filename, "data/cfloat32.tif", creationOptions=["COMPRESS=LERC"])
+ assert gdal.GetLastErrorMsg() != ""
gdal.Unlink(filename)
+
###############################################################################
# Test LERC compression with several bands and separate
@@ -7072,14 +8621,17 @@ def test_tiff_write_179_lerc_data_types():
def test_tiff_write_180_lerc_separate():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/tiff_write_180_lerc_separate.tif'
- gdal.Translate(filename, '../gdrivers/data/small_world.tif',
- creationOptions=['COMPRESS=LERC', 'INTERLEAVE=BAND'])
+ filename = "/vsimem/tiff_write_180_lerc_separate.tif"
+ gdal.Translate(
+ filename,
+ "../gdrivers/data/small_world.tif",
+ creationOptions=["COMPRESS=LERC", "INTERLEAVE=BAND"],
+ )
ds = gdal.Open(filename)
- cs = [ds.GetRasterBand(i+1).Checksum() for i in range(3)]
+ cs = [ds.GetRasterBand(i + 1).Checksum() for i in range(3)]
ds = None
gdal.Unlink(filename)
assert cs == [30111, 32302, 40026]
@@ -7089,24 +8641,34 @@ def test_tiff_write_180_lerc_separate():
# Test MAX_Z_ERROR_OVERVIEW effect while creating overviews
# on a newly created dataset
-@pytest.mark.parametrize("external_ovr,compression", [(True, 'LERC_ZSTD'),
- (False, 'LERC_ZSTD'),
- (True, 'LERC_DEFLATE'),
- (False, 'LERC_DEFLATE')])
+
+@pytest.mark.parametrize(
+ "external_ovr,compression",
+ [
+ (True, "LERC_ZSTD"),
+ (False, "LERC_ZSTD"),
+ (True, "LERC_DEFLATE"),
+ (False, "LERC_DEFLATE"),
+ ],
+)
def test_tiff_write_lerc_overview(external_ovr, compression):
md = gdaltest.tiff_drv.GetMetadata()
- if compression not in md['DMD_CREATIONOPTIONLIST']:
+ if compression not in md["DMD_CREATIONOPTIONLIST"]:
pytest.skip()
checksums = {}
- errors = [0,10,10]
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
+ errors = [0, 10, 10]
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
for i, error in enumerate(errors):
- fname = '/vsimem/test_tiff_write_lerc_overview_%d' % i
-
- ds = gdal.GetDriverByName('GTiff').Create(fname, 256, 256, 1,
- options=['COMPRESS=' + compression,
- 'MAX_Z_ERROR=%f' % error])
+ fname = "/vsimem/test_tiff_write_lerc_overview_%d" % i
+
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname,
+ 256,
+ 256,
+ 1,
+ options=["COMPRESS=" + compression, "MAX_Z_ERROR=%f" % error],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 256, 256)
ds.GetRasterBand(1).WriteRaster(0, 0, 256, 256, data)
if i == 2:
@@ -7115,18 +8677,26 @@ def test_tiff_write_lerc_overview(external_ovr, compression):
if external_ovr:
ds = None
ds = gdal.Open(fname)
- options['COMPRESS_OVERVIEW'] = compression
- options['MAX_Z_ERROR_OVERVIEW'] = '%d' % error
+ options["COMPRESS_OVERVIEW"] = compression
+ options["MAX_Z_ERROR_OVERVIEW"] = "%d" % error
with gdaltest.config_options(options):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
ds = None
ds = gdal.Open(fname)
- assert ds.GetRasterBand(1).GetOverview(0).GetDataset().GetMetadataItem('COMPRESSION', 'IMAGE_STRUCTURE') == compression
- checksums[i] = [ ds.GetRasterBand(1).Checksum(),
- ds.GetRasterBand(1).GetOverview(0).Checksum(),
- ds.GetRasterBand(1).GetOverview(1).Checksum() ]
+ assert (
+ ds.GetRasterBand(1)
+ .GetOverview(0)
+ .GetDataset()
+ .GetMetadataItem("COMPRESSION", "IMAGE_STRUCTURE")
+ == compression
+ )
+ checksums[i] = [
+ ds.GetRasterBand(1).Checksum(),
+ ds.GetRasterBand(1).GetOverview(0).Checksum(),
+ ds.GetRasterBand(1).GetOverview(1).Checksum(),
+ ]
ds = None
gdaltest.tiff_drv.Delete(fname)
@@ -7142,113 +8712,121 @@ def test_tiff_write_lerc_overview(external_ovr, compression):
assert checksums[1][1] != checksums[2][1]
assert checksums[1][2] != checksums[2][2]
+
###############################################################################
# Test ZLEVEL_OVERVIEW effect while creating overviews
# on a newly created dataset
+
@pytest.mark.parametrize("external_ovr", [True, False])
def test_tiff_write_lerc_zlevel(external_ovr):
md = gdaltest.tiff_drv.GetMetadata()
- if 'LERC_DEFLATE' not in md['DMD_CREATIONOPTIONLIST']:
+ if "LERC_DEFLATE" not in md["DMD_CREATIONOPTIONLIST"]:
pytest.skip()
filesize = {}
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- for level in (1,9):
- fname = '/vsimem/test_tiff_write_lerc_zlevel_%d' % level
- ds = gdal.GetDriverByName('GTiff').Create(fname, 256, 256, 1,
- options=['COMPRESS=LERC_DEFLATE'])
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ for level in (1, 9):
+ fname = "/vsimem/test_tiff_write_lerc_zlevel_%d" % level
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname, 256, 256, 1, options=["COMPRESS=LERC_DEFLATE"]
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 256, 256)
ds.GetRasterBand(1).WriteRaster(0, 0, 256, 256, data)
- options = { 'MAX_Z_ERROR_OVERVIEW' : '10' }
+ options = {"MAX_Z_ERROR_OVERVIEW": "10"}
if external_ovr:
ds = None
ds = gdal.Open(fname)
- options['COMPRESS_OVERVIEW'] = 'LERC_DEFLATE'
- options['ZLEVEL_OVERVIEW'] = '%d' % level
+ options["COMPRESS_OVERVIEW"] = "LERC_DEFLATE"
+ options["ZLEVEL_OVERVIEW"] = "%d" % level
with gdaltest.config_options(options):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
ds = None
if external_ovr:
- filesize[level] = gdal.VSIStatL(fname + '.ovr').size
+ filesize[level] = gdal.VSIStatL(fname + ".ovr").size
else:
filesize[level] = gdal.VSIStatL(fname).size
gdaltest.tiff_drv.Delete(fname)
assert filesize[1] > filesize[9]
+
###############################################################################
# Test ZSTD_LEVEL_OVERVIEW effect while creating overviews
# on a newly created dataset
+
@pytest.mark.parametrize("external_ovr", [True, False])
def test_tiff_write_lerc_zstd_level(external_ovr):
md = gdaltest.tiff_drv.GetMetadata()
- if 'LERC_ZSTD' not in md['DMD_CREATIONOPTIONLIST']:
+ if "LERC_ZSTD" not in md["DMD_CREATIONOPTIONLIST"]:
pytest.skip()
filesize = {}
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- for level in (1,22):
- fname = '/vsimem/test_tiff_write_lerc_zstd_level_%d' % level
- ds = gdal.GetDriverByName('GTiff').Create(fname, 256, 256, 1,
- options=['COMPRESS=LERC_ZSTD'])
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ for level in (1, 22):
+ fname = "/vsimem/test_tiff_write_lerc_zstd_level_%d" % level
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname, 256, 256, 1, options=["COMPRESS=LERC_ZSTD"]
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 256, 256)
ds.GetRasterBand(1).WriteRaster(0, 0, 256, 256, data)
- options = { 'MAX_Z_ERROR_OVERVIEW' : '10' }
+ options = {"MAX_Z_ERROR_OVERVIEW": "10"}
if external_ovr:
ds = None
ds = gdal.Open(fname)
- options['COMPRESS_OVERVIEW'] = 'LERC_ZSTD'
- options['ZSTD_LEVEL_OVERVIEW'] = '%d' % level
+ options["COMPRESS_OVERVIEW"] = "LERC_ZSTD"
+ options["ZSTD_LEVEL_OVERVIEW"] = "%d" % level
with gdaltest.config_options(options):
- ds.BuildOverviews('AVERAGE', overviewlist=[2, 4])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2, 4])
ds = None
if external_ovr:
- filesize[level] = gdal.VSIStatL(fname + '.ovr').size
+ filesize[level] = gdal.VSIStatL(fname + ".ovr").size
else:
filesize[level] = gdal.VSIStatL(fname).size
gdaltest.tiff_drv.Delete(fname)
assert filesize[1] > filesize[22]
+
###############################################################################
# Test set XMP metadata
def test_tiff_write_181_xmp():
- src_ds = gdal.Open('data/utmsmall.tif')
+ src_ds = gdal.Open("data/utmsmall.tif")
- new_ds = gdaltest.tiff_drv.CreateCopy('tmp/test_181.tif', src_ds)
+ new_ds = gdaltest.tiff_drv.CreateCopy("tmp/test_181.tif", src_ds)
src_ds = None
- xmp_ds = gdal.Open('../gdrivers/data/gtiff/byte_with_xmp.tif')
- xmp = xmp_ds.GetMetadata('xml:XMP')
+ xmp_ds = gdal.Open("../gdrivers/data/gtiff/byte_with_xmp.tif")
+ xmp = xmp_ds.GetMetadata("xml:XMP")
xmp_ds = None
- assert 'W5M0MpCehiHzreSzNTczkc9d' in xmp[0], 'Wrong input file without XMP'
+ assert "W5M0MpCehiHzreSzNTczkc9d" in xmp[0], "Wrong input file without XMP"
- new_ds.SetMetadata(xmp, 'xml:XMP')
+ new_ds.SetMetadata(xmp, "xml:XMP")
new_ds = None
# hopefully it's closed now!
- new_ds = gdal.Open('tmp/test_181.tif')
- read_xmp = new_ds.GetMetadata('xml:XMP')
- assert read_xmp and 'W5M0MpCehiHzreSzNTczkc9d' in read_xmp[0], \
- 'No XMP data written in output file'
+ new_ds = gdal.Open("tmp/test_181.tif")
+ read_xmp = new_ds.GetMetadata("xml:XMP")
+ assert (
+ read_xmp and "W5M0MpCehiHzreSzNTczkc9d" in read_xmp[0]
+ ), "No XMP data written in output file"
new_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_181.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_181.tif")
def test_tiff_write_181_xmp_copy():
- src_ds = gdal.Open('../gdrivers/data/gtiff/byte_with_xmp.tif')
+ src_ds = gdal.Open("../gdrivers/data/gtiff/byte_with_xmp.tif")
- filename = 'tmp/test_181_copy.tif'
+ filename = "tmp/test_181_copy.tif"
new_ds = gdaltest.tiff_drv.CreateCopy(filename, src_ds)
assert new_ds is not None
src_ds = None
@@ -7256,11 +8834,13 @@ def test_tiff_write_181_xmp_copy():
new_ds = None
new_ds = gdal.Open(filename)
- assert int(new_ds.GetRasterBand(1).GetMetadataItem('IFD_OFFSET', 'TIFF')) == 8, 'TIFF directory not at the beginning'
+ assert (
+ int(new_ds.GetRasterBand(1).GetMetadataItem("IFD_OFFSET", "TIFF")) == 8
+ ), "TIFF directory not at the beginning"
- xmp = new_ds.GetMetadata('xml:XMP')
+ xmp = new_ds.GetMetadata("xml:XMP")
new_ds = None
- assert 'W5M0MpCehiHzreSzNTczkc9d' in xmp[0], 'Wrong input file without XMP'
+ assert "W5M0MpCehiHzreSzNTczkc9d" in xmp[0], "Wrong input file without XMP"
gdaltest.tiff_drv.Delete(filename)
@@ -7271,62 +8851,68 @@ def test_tiff_write_181_xmp_copy():
def test_tiff_write_182_xmp_delete():
- shutil.copyfile('../gdrivers/data/gtiff/byte_with_xmp.tif', 'tmp/test_182.tif')
+ shutil.copyfile("../gdrivers/data/gtiff/byte_with_xmp.tif", "tmp/test_182.tif")
- chg_ds = gdal.Open('tmp/test_182.tif', gdal.GA_Update)
- read_xmp = chg_ds.GetMetadata('xml:XMP')
- assert read_xmp and 'W5M0MpCehiHzreSzNTczkc9d' in read_xmp[0], \
- 'No XMP data written in output file'
- chg_ds.SetMetadata(None, 'xml:XMP')
+ chg_ds = gdal.Open("tmp/test_182.tif", gdal.GA_Update)
+ read_xmp = chg_ds.GetMetadata("xml:XMP")
+ assert (
+ read_xmp and "W5M0MpCehiHzreSzNTczkc9d" in read_xmp[0]
+ ), "No XMP data written in output file"
+ chg_ds.SetMetadata(None, "xml:XMP")
chg_ds = None
- again_ds = gdal.Open('tmp/test_182.tif')
- read_xmp = again_ds.GetMetadata('xml:XMP')
- assert not read_xmp, 'XMP data not removed'
+ again_ds = gdal.Open("tmp/test_182.tif")
+ read_xmp = again_ds.GetMetadata("xml:XMP")
+ assert not read_xmp, "XMP data not removed"
again_ds = None
- gdaltest.tiff_drv.Delete('tmp/test_182.tif')
+ gdaltest.tiff_drv.Delete("tmp/test_182.tif")
+
###############################################################################
def test_tiff_write_183_createcopy_append_subdataset():
- tmpfilename = '/vsimem/test_tiff_write_183_createcopy_append_subdataset.tif'
- gdal.Translate(tmpfilename, 'data/byte.tif')
- gdal.Translate(tmpfilename, 'data/utmsmall.tif',
- creationOptions=['APPEND_SUBDATASET=YES'])
+ tmpfilename = "/vsimem/test_tiff_write_183_createcopy_append_subdataset.tif"
+ gdal.Translate(tmpfilename, "data/byte.tif")
+ gdal.Translate(
+ tmpfilename, "data/utmsmall.tif", creationOptions=["APPEND_SUBDATASET=YES"]
+ )
ds = gdal.Open(tmpfilename)
assert ds.GetRasterBand(1).Checksum() == 4672
- ds = gdal.Open('GTIFF_DIR:2:' + tmpfilename)
+ ds = gdal.Open("GTIFF_DIR:2:" + tmpfilename)
assert ds.GetRasterBand(1).Checksum() == 50054
ds = None
gdal.Unlink(tmpfilename)
+
###############################################################################
def test_tiff_write_184_create_append_subdataset():
- tmpfilename = '/vsimem/test_tiff_write_184_create_append_subdataset.tif'
- gdal.Translate(tmpfilename, 'data/byte.tif')
- ds = gdal.GetDriverByName('GTiff').Create(tmpfilename, 1, 1,
- options=['APPEND_SUBDATASET=YES'])
+ tmpfilename = "/vsimem/test_tiff_write_184_create_append_subdataset.tif"
+ gdal.Translate(tmpfilename, "data/byte.tif")
+ ds = gdal.GetDriverByName("GTiff").Create(
+ tmpfilename, 1, 1, options=["APPEND_SUBDATASET=YES"]
+ )
ds.GetRasterBand(1).Fill(255)
ds = None
ds = gdal.Open(tmpfilename)
assert ds.GetRasterBand(1).Checksum() == 4672
- ds = gdal.Open('GTIFF_DIR:2:' + tmpfilename)
+ ds = gdal.Open("GTIFF_DIR:2:" + tmpfilename)
assert ds.GetRasterBand(1).Checksum() == 3
ds = None
gdal.Unlink(tmpfilename)
+
###############################################################################
# Test LERC compression with Create() and BuildOverviews()
# Fixes https://github.com/OSGeo/gdal/issues/1257
@@ -7335,16 +8921,16 @@ def test_tiff_write_184_create_append_subdataset():
def test_tiff_write_185_lerc_create_and_overview():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- filename = '/vsimem/test_tiff_write_185_lerc_create_and_overview.tif'
- ds = gdaltest.tiff_drv.Create(filename, 20, 20, options=['COMPRESS=LERC_DEFLATE'])
- src_ds = gdal.Open('data/byte.tif')
- ds.WriteRaster(0,0,20,20,src_ds.ReadRaster())
+ filename = "/vsimem/test_tiff_write_185_lerc_create_and_overview.tif"
+ ds = gdaltest.tiff_drv.Create(filename, 20, 20, options=["COMPRESS=LERC_DEFLATE"])
+ src_ds = gdal.Open("data/byte.tif")
+ ds.WriteRaster(0, 0, 20, 20, src_ds.ReadRaster())
gdal.ErrorReset()
- ds.BuildOverviews('NEAR', [2])
- assert gdal.GetLastErrorMsg() == ''
+ ds.BuildOverviews("NEAR", [2])
+ assert gdal.GetLastErrorMsg() == ""
ds = None
ds = gdal.Open(filename)
cs = ds.GetRasterBand(1).Checksum()
@@ -7352,9 +8938,11 @@ def test_tiff_write_185_lerc_create_and_overview():
gdal.Unlink(filename)
assert (cs, cs_ovr) == (4672, 1087)
- filename2 = '/vsimem/test_tiff_write_185_lerc_create_and_overview_copy.tif'
- gdaltest.tiff_drv.CreateCopy(filename2, ds, options=['COMPRESS=LERC_DEFLATE', 'COPY_SRC_OVERVIEWS=YES'])
- assert gdal.GetLastErrorMsg() == ''
+ filename2 = "/vsimem/test_tiff_write_185_lerc_create_and_overview_copy.tif"
+ gdaltest.tiff_drv.CreateCopy(
+ filename2, ds, options=["COMPRESS=LERC_DEFLATE", "COPY_SRC_OVERVIEWS=YES"]
+ )
+ assert gdal.GetLastErrorMsg() == ""
ds = gdal.Open(filename2)
cs = ds.GetRasterBand(1).Checksum()
cs_ovr = ds.GetRasterBand(1).GetOverview(0).Checksum()
@@ -7364,15 +8952,16 @@ def test_tiff_write_185_lerc_create_and_overview():
###############################################################################
+
def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micro):
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] == 'INTERNAL':
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] == "INTERNAL":
return True
- if md['LIBTIFF'].startswith('LIBTIFF, Version '):
- version = md['LIBTIFF'][len('LIBTIFF, Version '):]
- version = version[0:version.find('\n')]
- got_maj, got_min, got_micro = version.split('.')
+ if md["LIBTIFF"].startswith("LIBTIFF, Version "):
+ version = md["LIBTIFF"][len("LIBTIFF, Version ") :]
+ version = version[0 : version.find("\n")]
+ got_maj, got_min, got_micro = version.split(".")
got_maj = int(got_maj)
got_min = int(got_min)
got_micro = int(got_micro)
@@ -7387,10 +8976,12 @@ def check_libtiff_internal_or_at_least(expected_maj, expected_min, expected_micr
return got_micro >= expected_micro
return False
+
###############################################################################
# Test writing a deflate compressed file with a uncompressed strip larger than 4 GB
#
+
def test_tiff_write_deflate_4GB():
if not check_libtiff_internal_or_at_least(4, 0, 11):
@@ -7399,39 +8990,45 @@ def test_tiff_write_deflate_4GB():
if not gdaltest.run_slow_tests():
pytest.skip()
- ref_ds = gdal.GetDriverByName('MEM').Create('', 20, 20)
+ ref_ds = gdal.GetDriverByName("MEM").Create("", 20, 20)
ref_ds.GetRasterBand(1).Fill(127)
- gdal.Translate('/vsimem/out.tif', ref_ds,
- options = '-co TILED=YES -co COMPRESS=DEFLATE -co BLOCKXSIZE=50000 -co BLOCKYSIZE=86000 -outsize 50000 86000')
+ gdal.Translate(
+ "/vsimem/out.tif",
+ ref_ds,
+ options="-co TILED=YES -co COMPRESS=DEFLATE -co BLOCKXSIZE=50000 -co BLOCKYSIZE=86000 -outsize 50000 86000",
+ )
- ds = gdal.Open('/vsimem/out.tif')
- data = ds.ReadRaster(0, 0, ds.RasterXSize, ds.RasterYSize, buf_xsize = 20, buf_ysize = 20)
+ ds = gdal.Open("/vsimem/out.tif")
+ data = ds.ReadRaster(
+ 0, 0, ds.RasterXSize, ds.RasterYSize, buf_xsize=20, buf_ysize=20
+ )
assert data == ref_ds.ReadRaster()
ds = None
- gdal.Unlink('/vsimem/out.tif')
+ gdal.Unlink("/vsimem/out.tif")
###############################################################################
# Test rewriting a LZW strip/tile that is very close to 8 KB with larger data
+
def test_tiff_write_rewrite_lzw_strip():
if not check_libtiff_internal_or_at_least(4, 0, 11):
pytest.skip()
- src_data = open('data/bug_gh_1439_to_be_updated_lzw.tif', 'rb').read()
- tmpfilename = '/vsimem/out.tif'
+ src_data = open("data/bug_gh_1439_to_be_updated_lzw.tif", "rb").read()
+ tmpfilename = "/vsimem/out.tif"
gdal.FileFromMemBuffer(tmpfilename, src_data)
ds = gdal.Open(tmpfilename, gdal.GA_Update)
- src_ds = gdal.Open('data/bug_gh_1439_update_lzw.tif')
- ds.WriteRaster(0,0,4096,1,src_ds.ReadRaster())
+ src_ds = gdal.Open("data/bug_gh_1439_update_lzw.tif")
+ ds.WriteRaster(0, 0, 4096, 1, src_ds.ReadRaster())
ds = None
ds = gdal.Open(tmpfilename)
gdal.ErrorReset()
- assert ds.GetRasterBand(1).ReadRaster(0,1,4096,1)
- assert gdal.GetLastErrorMsg() == ''
+ assert ds.GetRasterBand(1).ReadRaster(0, 1, 4096, 1)
+ assert gdal.GetLastErrorMsg() == ""
gdal.Unlink(tmpfilename)
@@ -7440,10 +9037,11 @@ def test_tiff_write_rewrite_lzw_strip():
# Test COPY_SRC_OVERVIEWS on a configuration with overviews, mask, but no
# overview on the mask
+
def test_tiff_write_overviews_mask_no_ovr_on_mask():
- tmpfile = '/vsimem/test_tiff_write_overviews_mask_no_ovr_on_mask.tif'
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
+ tmpfile = "/vsimem/test_tiff_write_overviews_mask_no_ovr_on_mask.tif"
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
ds = gdaltest.tiff_drv.Create(tmpfile, 100, 100)
ds.GetRasterBand(1).Fill(255)
ds.CreateMaskBand(gdal.GMF_PER_DATASET)
@@ -7451,18 +9049,26 @@ def test_tiff_write_overviews_mask_no_ovr_on_mask():
ds = gdal.Open(tmpfile)
gdal.ErrorReset()
with gdaltest.error_handler():
- ds.BuildOverviews('NEAR', overviewlist=[2])
- assert 'Building external overviews whereas there is an internal mask is not fully supported. The overviews of the non-mask bands will be created, but not the overviews of the mask band.' in gdal.GetLastErrorMsg()
+ ds.BuildOverviews("NEAR", overviewlist=[2])
+ assert (
+ "Building external overviews whereas there is an internal mask is not fully supported. The overviews of the non-mask bands will be created, but not the overviews of the mask band."
+ in gdal.GetLastErrorMsg()
+ )
# No overview on the mask
assert ds.GetRasterBand(1).GetOverview(0).GetMaskFlags() == gdal.GMF_ALL_VALID
ds = None
- tmpfile2 = '/vsimem/test_tiff_write_overviews_mask_no_ovr_on_mask_copy.tif'
+ tmpfile2 = "/vsimem/test_tiff_write_overviews_mask_no_ovr_on_mask_copy.tif"
src_ds = gdal.Open(tmpfile)
gdal.ErrorReset()
with gdaltest.error_handler():
- ds = gdaltest.tiff_drv.CreateCopy(tmpfile2, src_ds, options=['COPY_SRC_OVERVIEWS=YES'])
- assert 'Source dataset has a mask band on full resolution, overviews on the regular bands, but lacks overviews on the mask band.' in gdal.GetLastErrorMsg()
+ ds = gdaltest.tiff_drv.CreateCopy(
+ tmpfile2, src_ds, options=["COPY_SRC_OVERVIEWS=YES"]
+ )
+ assert (
+ "Source dataset has a mask band on full resolution, overviews on the regular bands, but lacks overviews on the mask band."
+ in gdal.GetLastErrorMsg()
+ )
assert ds
ds = None
src_ds = None
@@ -7480,29 +9086,44 @@ def test_tiff_write_overviews_mask_no_ovr_on_mask():
###############################################################################
# Test that -co PHOTOMETRIC=YCBCR -co COMPRESS=JPEG does not create a TIFFTAG_GDAL_METADATA
+
def test_tiff_write_no_gdal_metadata_tag_for_ycbcr_jpeg():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- tmpfile = '/vsimem/test_tiff_write_no_gdal_metadata_tag_for_ycbcr_jpeg.tif'
- assert gdaltest.tiff_drv.Create(tmpfile, 16, 16, 3, gdal.GDT_Byte, options=['PHOTOMETRIC=YCBCR', 'COMPRESS=JPEG'])
- statBuf = gdal.VSIStatL(tmpfile + '.aux.xml', gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG)
- assert statBuf is None, 'did not expect PAM file'
+ tmpfile = "/vsimem/test_tiff_write_no_gdal_metadata_tag_for_ycbcr_jpeg.tif"
+ assert gdaltest.tiff_drv.Create(
+ tmpfile,
+ 16,
+ 16,
+ 3,
+ gdal.GDT_Byte,
+ options=["PHOTOMETRIC=YCBCR", "COMPRESS=JPEG"],
+ )
+ statBuf = gdal.VSIStatL(
+ tmpfile + ".aux.xml",
+ gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG,
+ )
+ assert statBuf is None, "did not expect PAM file"
ds = gdal.Open(tmpfile)
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect TIFFTAG_GDAL_METADATA tag'
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
tmpfile2 = tmpfile + "2"
- assert gdaltest.tiff_drv.CreateCopy(tmpfile2, ds, options=['PHOTOMETRIC=YCBCR', 'COMPRESS=JPEG'])
+ assert gdaltest.tiff_drv.CreateCopy(
+ tmpfile2, ds, options=["PHOTOMETRIC=YCBCR", "COMPRESS=JPEG"]
+ )
ds = None
ds = gdal.Open(tmpfile2)
- assert ds.GetMetadataItem('TIFFTAG_GDAL_METADATA', '_DEBUG_') is None, \
- 'did not expect TIFFTAG_GDAL_METADATA tag'
+ assert (
+ ds.GetMetadataItem("TIFFTAG_GDAL_METADATA", "_DEBUG_") is None
+ ), "did not expect TIFFTAG_GDAL_METADATA tag"
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_RedBand
ds = None
@@ -7514,12 +9135,13 @@ def test_tiff_write_no_gdal_metadata_tag_for_ycbcr_jpeg():
# Test that repated flushing after SetGeoTransform() does not grow file size
# indefinitely
+
def test_tiff_write_setgeotransform_flush():
- tmpfile = '/vsimem/test_tiff_write_setgeotransform_flush.tif'
- gdal.GetDriverByName('GTiff').Create(tmpfile,1,1)
+ tmpfile = "/vsimem/test_tiff_write_setgeotransform_flush.tif"
+ gdal.GetDriverByName("GTiff").Create(tmpfile, 1, 1)
ds = gdal.Open(tmpfile, gdal.GA_Update)
- ds.SetGeoTransform([2,0,1,49,0,-1])
+ ds.SetGeoTransform([2, 0, 1, 49, 0, -1])
for i in range(10):
ds.FlushCache()
ds = None
@@ -7528,89 +9150,136 @@ def test_tiff_write_setgeotransform_flush():
gdaltest.tiff_drv.Delete(tmpfile)
+
###############################################################################
# Test that compression parameters are taken into account in Create() mode
+
def test_tiff_write_compression_create_and_createcopy():
md = gdaltest.tiff_drv.GetMetadata()
tests = []
- if 'DEFLATE' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=DEFLATE', 'ZLEVEL=1'],['COMPRESS=DEFLATE', 'ZLEVEL=9']))
+ if "DEFLATE" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=DEFLATE", "ZLEVEL=1"], ["COMPRESS=DEFLATE", "ZLEVEL=9"])
+ )
- if 'LZMA' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=LZMA', 'LZMA_PRESET=1'],['COMPRESS=LZMA', 'LZMA_PRESET=9']))
+ if "LZMA" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=LZMA", "LZMA_PRESET=1"], ["COMPRESS=LZMA", "LZMA_PRESET=9"])
+ )
- if 'JPEG' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=JPEG', 'JPEG_QUALITY=95'],['COMPRESS=JPEG', 'JPEG_QUALITY=50']))
+ if "JPEG" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=JPEG", "JPEG_QUALITY=95"], ["COMPRESS=JPEG", "JPEG_QUALITY=50"])
+ )
- if 'ZSTD' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=ZSTD', 'ZSTD_LEVEL=1'],['COMPRESS=ZSTD', 'ZSTD_LEVEL=9']))
+ if "ZSTD" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=ZSTD", "ZSTD_LEVEL=1"], ["COMPRESS=ZSTD", "ZSTD_LEVEL=9"])
+ )
# FIXME: this test randomly fails, especially on Windows, but also on Linux,
# for a unknown reason. Nothing suspicious with Valgrind however
# if 'LERC_DEFLATE' in md['DMD_CREATIONOPTIONLIST']:
# tests.append((['COMPRESS=LERC_DEFLATE', 'ZLEVEL=1'],['COMPRESS=LERC_DEFLATE', 'ZLEVEL=9']))
- if 'WEBP' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=WEBP', 'WEBP_LEVEL=95'],['COMPRESS=WEBP', 'WEBP_LEVEL=15']))
-
- if 'JXL' in md['DMD_CREATIONOPTIONLIST']:
- tests.append((['COMPRESS=JXL', 'JXL_LOSSLESS=YES'],['COMPRESS=JXL', 'JXL_LOSSLESS=NO']))
- tests.append((['COMPRESS=JXL', 'JXL_LOSSLESS=YES', 'JXL_EFFORT=3'],['COMPRESS=JXL', 'JXL_LOSSLESS=YES', 'JXL_EFFORT=9']))
- tests.append((['COMPRESS=JXL', 'JXL_LOSSLESS=NO', 'JXL_DISTANCE=0.1'],['COMPRESS=JXL', 'JXL_LOSSLESS=NO', 'JXL_DISTANCE=3']))
+ if "WEBP" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=WEBP", "WEBP_LEVEL=95"], ["COMPRESS=WEBP", "WEBP_LEVEL=15"])
+ )
+
+ if "JXL" in md["DMD_CREATIONOPTIONLIST"]:
+ tests.append(
+ (["COMPRESS=JXL", "JXL_LOSSLESS=YES"], ["COMPRESS=JXL", "JXL_LOSSLESS=NO"])
+ )
+ tests.append(
+ (
+ ["COMPRESS=JXL", "JXL_LOSSLESS=YES", "JXL_EFFORT=3"],
+ ["COMPRESS=JXL", "JXL_LOSSLESS=YES", "JXL_EFFORT=9"],
+ )
+ )
+ tests.append(
+ (
+ ["COMPRESS=JXL", "JXL_LOSSLESS=NO", "JXL_DISTANCE=0.1"],
+ ["COMPRESS=JXL", "JXL_LOSSLESS=NO", "JXL_DISTANCE=3"],
+ )
+ )
new_tests = []
for (before, after) in tests:
new_tests.append((before, after))
- new_tests.append((before + ['COPY_SRC_OVERVIEWS=YES', 'TILED=YES', 'NUM_THREADS=2'],
- after + ['COPY_SRC_OVERVIEWS=YES', 'TILED=YES', 'NUM_THREADS=2']))
+ new_tests.append(
+ (
+ before + ["COPY_SRC_OVERVIEWS=YES", "TILED=YES", "NUM_THREADS=2"],
+ after + ["COPY_SRC_OVERVIEWS=YES", "TILED=YES", "NUM_THREADS=2"],
+ )
+ )
tests = new_tests
- tmpfile = '/vsimem/test_tiff_write_compression_create.tif'
+ tmpfile = "/vsimem/test_tiff_write_compression_create.tif"
- src_ds = gdal.Open('data/rgbsmall.tif')
+ src_ds = gdal.Open("data/rgbsmall.tif")
data = src_ds.ReadRaster()
for (before, after) in tests:
- ds = gdaltest.tiff_drv.Create(tmpfile, src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, options = before)
+ ds = gdaltest.tiff_drv.Create(
+ tmpfile,
+ src_ds.RasterXSize,
+ src_ds.RasterYSize,
+ src_ds.RasterCount,
+ options=before,
+ )
ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data)
ds = None
size_before = gdal.VSIStatL(tmpfile).size
- ds = gdaltest.tiff_drv.Create(tmpfile, src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, options = after)
+ ds = gdaltest.tiff_drv.Create(
+ tmpfile,
+ src_ds.RasterXSize,
+ src_ds.RasterYSize,
+ src_ds.RasterCount,
+ options=after,
+ )
ds.WriteRaster(0, 0, src_ds.RasterXSize, src_ds.RasterYSize, data)
ds = None
size_after = gdal.VSIStatL(tmpfile).size
assert size_after < size_before, (before, after, size_before, size_after)
print(before, after, size_before, size_after)
- gdaltest.tiff_drv.CreateCopy(tmpfile, src_ds, options = before)
+ gdaltest.tiff_drv.CreateCopy(tmpfile, src_ds, options=before)
size_before = gdal.VSIStatL(tmpfile).size
- gdaltest.tiff_drv.CreateCopy(tmpfile, src_ds, options = after)
+ gdaltest.tiff_drv.CreateCopy(tmpfile, src_ds, options=after)
size_after = gdal.VSIStatL(tmpfile).size
assert size_after < size_before, (before, after, size_before, size_after)
gdaltest.tiff_drv.Delete(tmpfile)
+
###############################################################################
# Attempt at creating a file with more tile arrays larger than 2 GB
def test_tiff_write_too_many_tiles():
- src_ds = gdal.Open('')
+ src_ds = gdal.Open(
+ ''
+ )
with gdaltest.error_handler():
- assert not gdaltest.tiff_drv.CreateCopy('/vsimem/tmp.tif', src_ds, options = ['TILED=YES'])
- assert 'File too large regarding tile size' in gdal.GetLastErrorMsg()
-
- with gdaltest.tempfile('/vsimem/test_tiff_write_too_many_tiles.vrt',
- ''):
- src_ds = gdal.Open('/vsimem/test_tiff_write_too_many_tiles.vrt')
+ assert not gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tmp.tif", src_ds, options=["TILED=YES"]
+ )
+ assert "File too large regarding tile size" in gdal.GetLastErrorMsg()
+
+ with gdaltest.tempfile(
+ "/vsimem/test_tiff_write_too_many_tiles.vrt",
+ '',
+ ):
+ src_ds = gdal.Open("/vsimem/test_tiff_write_too_many_tiles.vrt")
gdal.ErrorReset()
- with gdaltest.config_option('GDAL_TIFF_OVR_BLOCKSIZE', '128'):
+ with gdaltest.config_option("GDAL_TIFF_OVR_BLOCKSIZE", "128"):
with gdaltest.error_handler():
- src_ds.BuildOverviews('NEAR', [2])
- assert 'File too large regarding tile size' in gdal.GetLastErrorMsg()
+ src_ds.BuildOverviews("NEAR", [2])
+ assert "File too large regarding tile size" in gdal.GetLastErrorMsg()
###############################################################################
@@ -7620,75 +9289,92 @@ def test_tiff_write_too_many_tiles():
def test_tiff_write_jpeg_incompatible_of_paletted():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JPEG') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JPEG") == -1:
pytest.skip()
- src_ds = gdal.Open('data/test_average_palette.tif')
+ src_ds = gdal.Open("data/test_average_palette.tif")
with gdaltest.error_handler():
- assert not gdaltest.tiff_drv.CreateCopy('/vsimem/tmp.tif', src_ds, options = ['COMPRESS=JPEG'])
- gdal.Unlink('/vsimem/tmp.tif')
+ assert not gdaltest.tiff_drv.CreateCopy(
+ "/vsimem/tmp.tif", src_ds, options=["COMPRESS=JPEG"]
+ )
+ gdal.Unlink("/vsimem/tmp.tif")
###############################################################################
# Test blocksize overriding while creating (internal) overviews
# on a newly created dataset
+
@pytest.mark.parametrize("blockSize,numThreads", [[64, None], [256, 8]])
def test_tiff_write_internal_ovr_blocksize(blockSize, numThreads):
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- fname = 'tmp/tiff_write_internal_ovr_bs%d.tif' % blockSize
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ fname = "tmp/tiff_write_internal_ovr_bs%d.tif" % blockSize
- ds = gdal.GetDriverByName('GTiff').Create(fname, 1024, 1024, 1,
- options=['TILED=YES','COMPRESS=LZW',
- 'BLOCKXSIZE=512', 'BLOCKYSIZE=512'])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname,
+ 1024,
+ 1024,
+ 1,
+ options=["TILED=YES", "COMPRESS=LZW", "BLOCKXSIZE=512", "BLOCKYSIZE=512"],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
- opts = {'GDAL_TIFF_OVR_BLOCKSIZE':'%d'%blockSize}
+ opts = {"GDAL_TIFF_OVR_BLOCKSIZE": "%d" % blockSize}
if numThreads:
- opts['GDAL_NUM_THREADS'] = str(numThreads)
+ opts["GDAL_NUM_THREADS"] = str(numThreads)
with gdaltest.config_options(opts):
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
src_ds = None
ds = None
ds = gdal.Open(fname)
- (bsx,bsy) = ds.GetRasterBand(1).GetOverview(0).GetBlockSize()
+ (bsx, bsy) = ds.GetRasterBand(1).GetOverview(0).GetBlockSize()
assert bsx == blockSize
assert bsy == blockSize
ds = None
gdaltest.tiff_drv.Delete(fname)
+
###############################################################################
# Test blocksize propagation while creating (internal) overviews
# on a newly created dataset
+
@pytest.mark.parametrize("blockSize,numThreads", [[64, None], [256, 8]])
def test_tiff_write_internal_ovr_default_blocksize(blockSize, numThreads):
- src_ds = gdal.Open('../gdrivers/data/utm.tif')
- fname = 'tmp/tiff_write_internal_ovr_default_bs%d.tif' % blockSize
-
- ds = gdal.GetDriverByName('GTiff').Create(fname, 1024, 1024, 1,
- options=['TILED=YES','COMPRESS=LZW',
- 'BLOCKXSIZE=%d'%blockSize,
- 'BLOCKYSIZE=%d'%blockSize])
+ src_ds = gdal.Open("../gdrivers/data/utm.tif")
+ fname = "tmp/tiff_write_internal_ovr_default_bs%d.tif" % blockSize
+
+ ds = gdal.GetDriverByName("GTiff").Create(
+ fname,
+ 1024,
+ 1024,
+ 1,
+ options=[
+ "TILED=YES",
+ "COMPRESS=LZW",
+ "BLOCKXSIZE=%d" % blockSize,
+ "BLOCKYSIZE=%d" % blockSize,
+ ],
+ )
data = src_ds.GetRasterBand(1).ReadRaster(0, 0, 512, 512, 1024, 1024)
ds.GetRasterBand(1).WriteRaster(0, 0, 1024, 1024, data)
opts = {}
if numThreads:
- opts['GDAL_NUM_THREADS'] = str(numThreads)
+ opts["GDAL_NUM_THREADS"] = str(numThreads)
with gdaltest.config_options(opts):
- ds.BuildOverviews('AVERAGE', overviewlist=[2])
+ ds.BuildOverviews("AVERAGE", overviewlist=[2])
src_ds = None
ds = None
ds = gdal.Open(fname)
- (bsx,bsy) = ds.GetRasterBand(1).GetOverview(0).GetBlockSize()
+ (bsx, bsy) = ds.GetRasterBand(1).GetOverview(0).GetBlockSize()
assert bsx == blockSize
assert bsy == blockSize
ds = None
@@ -7699,17 +9385,21 @@ def test_tiff_write_internal_ovr_default_blocksize(blockSize, numThreads):
# Test LERC compression with Float32/Float64
-@pytest.mark.parametrize("gdalDataType,structType", [[gdal.GDT_Float32,'f'],[gdal.GDT_Float64,'d']])
+@pytest.mark.parametrize(
+ "gdalDataType,structType", [[gdal.GDT_Float32, "f"], [gdal.GDT_Float64, "d"]]
+)
def test_tiff_write_lerc_float(gdalDataType, structType):
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- src_ds = gdal.GetDriverByName('MEM').Create('', 2, 1, 1, gdalDataType)
- src_ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, struct.pack(structType * 2, 0.5, 1.5))
- filename = '/vsimem/test.tif'
- gdaltest.tiff_drv.CreateCopy(filename, src_ds, options = ['COMPRESS=LERC'])
+ src_ds = gdal.GetDriverByName("MEM").Create("", 2, 1, 1, gdalDataType)
+ src_ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 2, 1, struct.pack(structType * 2, 0.5, 1.5)
+ )
+ filename = "/vsimem/test.tif"
+ gdaltest.tiff_drv.CreateCopy(filename, src_ds, options=["COMPRESS=LERC"])
ds = gdal.Open(filename)
assert struct.unpack(structType * 2, ds.ReadRaster()) == (0.5, 1.5)
ds = None
@@ -7720,17 +9410,21 @@ def test_tiff_write_lerc_float(gdalDataType, structType):
# Test LERC compression withFloat32/Float64 and nan
-@pytest.mark.parametrize("gdalDataType,structType", [[gdal.GDT_Float32,'f'],[gdal.GDT_Float64,'d']])
+@pytest.mark.parametrize(
+ "gdalDataType,structType", [[gdal.GDT_Float32, "f"], [gdal.GDT_Float64, "d"]]
+)
def test_tiff_write_lerc_float_with_nan(gdalDataType, structType):
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('LERC') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("LERC") == -1:
pytest.skip()
- src_ds = gdal.GetDriverByName('MEM').Create('', 2, 1, 1, gdalDataType)
- src_ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, struct.pack(structType * 2, 0.5, float('nan')))
- filename = '/vsimem/test.tif'
- gdaltest.tiff_drv.CreateCopy(filename, src_ds, options = ['COMPRESS=LERC'])
+ src_ds = gdal.GetDriverByName("MEM").Create("", 2, 1, 1, gdalDataType)
+ src_ds.GetRasterBand(1).WriteRaster(
+ 0, 0, 2, 1, struct.pack(structType * 2, 0.5, float("nan"))
+ )
+ filename = "/vsimem/test.tif"
+ gdaltest.tiff_drv.CreateCopy(filename, src_ds, options=["COMPRESS=LERC"])
ds = gdal.Open(filename)
got_data = struct.unpack(structType * 2, ds.ReadRaster())
assert got_data[0] == 0.5
@@ -7738,6 +9432,7 @@ def test_tiff_write_lerc_float_with_nan(gdalDataType, structType):
ds = None
gdal.Unlink(filename)
+
###############################################################################
# Test JXL compression
@@ -7745,12 +9440,13 @@ def test_tiff_write_lerc_float_with_nan(gdalDataType, structType):
def test_tiff_write_jpegxl_byte_single_band():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JXL') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JXL") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'byte.tif', 1, 4672, options=['COMPRESS=JXL'])
+ ut = gdaltest.GDALTest("GTiff", "byte.tif", 1, 4672, options=["COMPRESS=JXL"])
return ut.testCreateCopy()
+
###############################################################################
# Test JXL compression
@@ -7758,12 +9454,13 @@ def test_tiff_write_jpegxl_byte_single_band():
def test_tiff_write_jpegxl_byte_three_band():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JXL') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JXL") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'rgbsmall.tif', 1, 21212, options=['COMPRESS=JXL'])
+ ut = gdaltest.GDALTest("GTiff", "rgbsmall.tif", 1, 21212, options=["COMPRESS=JXL"])
return ut.testCreateCopy()
+
###############################################################################
# Test JXL compression
@@ -7771,22 +9468,25 @@ def test_tiff_write_jpegxl_byte_three_band():
def test_tiff_write_jpegxl_uint16_single_band():
md = gdaltest.tiff_drv.GetMetadata()
- if md['DMD_CREATIONOPTIONLIST'].find('JXL') == -1:
+ if md["DMD_CREATIONOPTIONLIST"].find("JXL") == -1:
pytest.skip()
- ut = gdaltest.GDALTest('GTiff', 'uint16.tif', 1, 4672, options=['COMPRESS=JXL'])
+ ut = gdaltest.GDALTest("GTiff", "uint16.tif", 1, 4672, options=["COMPRESS=JXL"])
return ut.testCreateCopy()
+
###############################################################################
# Test creating overviews with NaN nodata
def test_tiff_write_overviews_nan_nodata():
- filename = '/vsimem/test_tiff_write_overviews_nan_nodata.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 32, 32, 1, gdal.GDT_Float32, options=['TILED=YES', 'SPARSE_OK=YES'])
- ds.GetRasterBand(1).SetNoDataValue(float('nan'))
- ds.BuildOverviews('NONE', [2, 4])
+ filename = "/vsimem/test_tiff_write_overviews_nan_nodata.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(
+ filename, 32, 32, 1, gdal.GDT_Float32, options=["TILED=YES", "SPARSE_OK=YES"]
+ )
+ ds.GetRasterBand(1).SetNoDataValue(float("nan"))
+ ds.BuildOverviews("NONE", [2, 4])
ds = None
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).GetOverviewCount() == 2
@@ -7800,7 +9500,9 @@ def test_tiff_write_overviews_nan_nodata():
def test_tiff_write_coordinate_epoch():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/test_tiff_write_coordinate_epoch.tif', 1, 1)
+ ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/test_tiff_write_coordinate_epoch.tif", 1, 1
+ )
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
srs.SetCoordinateEpoch(2021.3)
@@ -7808,12 +9510,12 @@ def test_tiff_write_coordinate_epoch():
ds.SetSpatialRef(srs)
ds = None
- ds = gdal.Open('/vsimem/test_tiff_write_coordinate_epoch.tif')
+ ds = gdal.Open("/vsimem/test_tiff_write_coordinate_epoch.tif")
srs = ds.GetSpatialRef()
assert srs.GetCoordinateEpoch() == 2021.3
ds = None
- gdal.Unlink('/vsimem/test_tiff_write_coordinate_epoch.tif')
+ gdal.Unlink("/vsimem/test_tiff_write_coordinate_epoch.tif")
###############################################################################
@@ -7824,9 +9526,11 @@ def test_tiff_write_coordinate_epoch():
@pytest.mark.parametrize("reopen", [True, False])
def test_tiff_write_multiple_ifds_directory_rewriting(reopen):
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 32, 32, options=['TILED=YES', 'SPARSE_OK=YES'])
- ds.BuildOverviews('NONE', [2])
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(
+ filename, 32, 32, options=["TILED=YES", "SPARSE_OK=YES"]
+ )
+ ds.BuildOverviews("NONE", [2])
if reopen:
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
@@ -7847,14 +9551,15 @@ def test_tiff_write_multiple_ifds_directory_rewriting(reopen):
gdal.Unlink(filename)
assert mm == (2, 2)
+
###############################################################################
# Test SetSpatialRef() on a read-only dataset
def test_tiff_write_setspatialref_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
srs = osr.SpatialReference()
@@ -7862,15 +9567,16 @@ def test_tiff_write_setspatialref_read_only():
assert ds.SetSpatialRef(srs) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_srs = ds.GetSpatialRef()
assert got_srs
- assert got_srs.GetAuthorityCode(None) == '4326'
+ assert got_srs.GetAuthorityCode(None) == "4326"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetSpatialRef() on a read-only dataset, overriding TIFF tags
@@ -7878,8 +9584,8 @@ def test_tiff_write_setspatialref_read_only():
def test_tiff_write_setspatialref_read_only_override_tifftags():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
srs = osr.SpatialReference()
srs.ImportFromEPSG(32631)
assert ds.SetSpatialRef(srs) == gdal.CE_None
@@ -7891,12 +9597,12 @@ def test_tiff_write_setspatialref_read_only_override_tifftags():
assert ds.SetSpatialRef(srs) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_srs = ds.GetSpatialRef()
assert got_srs
- assert got_srs.GetAuthorityCode(None) == '4326'
+ assert got_srs.GetAuthorityCode(None) == "4326"
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
@@ -7905,15 +9611,16 @@ def test_tiff_write_setspatialref_read_only_override_tifftags():
assert ds.SetSpatialRef(srs) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is None
+ assert gdal.VSIStatL(filename + ".aux.xml") is None
ds = gdal.Open(filename)
got_srs = ds.GetSpatialRef()
assert got_srs
- assert got_srs.GetAuthorityCode(None) == '32632'
+ assert got_srs.GetAuthorityCode(None) == "32632"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetGeoTransform() on a read-only dataset
@@ -7921,22 +9628,23 @@ def test_tiff_write_setspatialref_read_only_override_tifftags():
def test_tiff_write_setgeotransform_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
- gt = [2,1,0,49,0,-1]
+ gt = [2, 1, 0, 49, 0, -1]
assert ds.SetGeoTransform(gt) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_gt = [x for x in ds.GetGeoTransform()]
assert got_gt == gt
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetGeoTransform() on a read-only dataset, overriding TIFF tags
@@ -7944,17 +9652,17 @@ def test_tiff_write_setgeotransform_read_only():
def test_tiff_write_setgeotransform_read_only_override_tifftags():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
- assert ds.SetGeoTransform([3,1,0,50,0,-1]) == gdal.CE_None
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
+ assert ds.SetGeoTransform([3, 1, 0, 50, 0, -1]) == gdal.CE_None
ds = None
ds = gdal.Open(filename)
- gt = [2,1,0,49,0,-1]
+ gt = [2, 1, 0, 49, 0, -1]
assert ds.SetGeoTransform(gt) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_gt = [x for x in ds.GetGeoTransform()]
@@ -7962,18 +9670,19 @@ def test_tiff_write_setgeotransform_read_only_override_tifftags():
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
- gt = [4,1,0,51,0,-1]
+ gt = [4, 1, 0, 51, 0, -1]
assert ds.SetGeoTransform(gt) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is None
+ assert gdal.VSIStatL(filename + ".aux.xml") is None
ds = gdal.Open(filename)
got_gt = [x for x in ds.GetGeoTransform()]
assert got_gt == gt
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetGCPs() on a read-only dataset
@@ -7981,8 +9690,8 @@ def test_tiff_write_setgeotransform_read_only_override_tifftags():
def test_tiff_write_setgcps_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
gcps = [gdal.GCP(0, 1, 2, 3, 4)]
@@ -7991,7 +9700,7 @@ def test_tiff_write_setgcps_read_only():
assert ds.SetGCPs(gcps, srs) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_gcps = ds.GetGCPs()
@@ -8002,10 +9711,11 @@ def test_tiff_write_setgcps_read_only():
assert got_gcps[0].GCPY == gcps[0].GCPY
got_srs = ds.GetGCPSpatialRef()
assert got_srs
- assert got_srs.GetAuthorityCode(None) == '4326'
+ assert got_srs.GetAuthorityCode(None) == "4326"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetGCPs() on a read-only dataset, overriding TIFF tags
@@ -8013,8 +9723,8 @@ def test_tiff_write_setgcps_read_only():
def test_tiff_write_setgcps_read_only_override_tifftags():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
gcps = [gdal.GCP(5, 6, 7, 8, 9)]
assert ds.SetGCPs(gcps, None) == gdal.CE_None
ds = None
@@ -8026,7 +9736,7 @@ def test_tiff_write_setgcps_read_only_override_tifftags():
assert ds.SetGCPs(gcps, srs) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
got_gcps = ds.GetGCPs()
@@ -8037,7 +9747,7 @@ def test_tiff_write_setgcps_read_only_override_tifftags():
assert got_gcps[0].GCPY == gcps[0].GCPY
got_srs = ds.GetGCPSpatialRef()
assert got_srs
- assert got_srs.GetAuthorityCode(None) == '4326'
+ assert got_srs.GetAuthorityCode(None) == "4326"
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
@@ -8045,7 +9755,7 @@ def test_tiff_write_setgcps_read_only_override_tifftags():
assert ds.SetGCPs(gcps, None) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is None
+ assert gdal.VSIStatL(filename + ".aux.xml") is None
ds = gdal.Open(filename)
got_gcps = ds.GetGCPs()
@@ -8057,7 +9767,8 @@ def test_tiff_write_setgcps_read_only_override_tifftags():
assert ds.GetGCPSpatialRef() is None
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetNoDataValue() and DeleteNoDataValue() on a read-only dataset
@@ -8065,14 +9776,14 @@ def test_tiff_write_setgcps_read_only_override_tifftags():
def test_tiff_write_nodata_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).SetNoDataValue(123) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).GetNoDataValue() == 123
@@ -8083,7 +9794,8 @@ def test_tiff_write_nodata_read_only():
assert ds.GetRasterBand(1).GetNoDataValue() is None
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetNoDataValue() on a read-only dataset, overriding TIFF tags
@@ -8091,17 +9803,16 @@ def test_tiff_write_nodata_read_only():
def test_tiff_write_nodata_read_only_overriding_tifftags():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
assert ds.GetRasterBand(1).SetNoDataValue(0) == gdal.CE_None
ds = None
-
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).SetNoDataValue(123) == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).GetNoDataValue() == 123
@@ -8115,7 +9826,8 @@ def test_tiff_write_nodata_read_only_overriding_tifftags():
assert ds.GetRasterBand(1).GetNoDataValue() == 1
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test Dataset SetMetadataItem() on a read-only dataset
@@ -8123,20 +9835,21 @@ def test_tiff_write_nodata_read_only_overriding_tifftags():
def test_tiff_write_dataset_setmetadataitem_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
- assert ds.SetMetadataItem('FOO', 'BAR', 'BAZ') == gdal.CE_None
+ assert ds.SetMetadataItem("FOO", "BAR", "BAZ") == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('FOO', 'BAZ') == 'BAR'
+ assert ds.GetMetadataItem("FOO", "BAZ") == "BAR"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test Dataset SetMetadata() on a read-only dataset
@@ -8144,20 +9857,21 @@ def test_tiff_write_dataset_setmetadataitem_read_only():
def test_tiff_write_dataset_setmetadata_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
- assert ds.SetMetadata({'FOO': 'BAR'}, 'BAZ') == gdal.CE_None
+ assert ds.SetMetadata({"FOO": "BAR"}, "BAZ") == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('FOO', 'BAZ') == 'BAR'
+ assert ds.GetMetadataItem("FOO", "BAZ") == "BAR"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test Band SetMetadataItem() on a read-only dataset
@@ -8165,20 +9879,21 @@ def test_tiff_write_dataset_setmetadata_read_only():
def test_tiff_write_band_setmetadataitem_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).SetMetadataItem('FOO', 'BAR', 'BAZ') == gdal.CE_None
+ assert ds.GetRasterBand(1).SetMetadataItem("FOO", "BAR", "BAZ") == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('FOO', 'BAZ') == 'BAR'
+ assert ds.GetRasterBand(1).GetMetadataItem("FOO", "BAZ") == "BAR"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test Band SetMetadata() on a read-only dataset
@@ -8186,20 +9901,21 @@ def test_tiff_write_band_setmetadataitem_read_only():
def test_tiff_write_band_setmetadata_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).SetMetadata({'FOO': 'BAR'}, 'BAZ') == gdal.CE_None
+ assert ds.GetRasterBand(1).SetMetadata({"FOO": "BAR"}, "BAZ") == gdal.CE_None
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
- assert ds.GetRasterBand(1).GetMetadataItem('FOO', 'BAZ') == 'BAR'
+ assert ds.GetRasterBand(1).GetMetadataItem("FOO", "BAZ") == "BAR"
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+
###############################################################################
# Test SetColorTable() on a read-only dataset
@@ -8207,8 +9923,8 @@ def test_tiff_write_band_setmetadata_read_only():
def test_tiff_write_setcolortable_read_only():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ds = gdal.Open(filename)
ct = gdal.ColorTable()
@@ -8217,7 +9933,7 @@ def test_tiff_write_setcolortable_read_only():
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_PaletteIndex
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
ct = ds.GetRasterBand(1).GetRasterColorTable()
@@ -8226,7 +9942,7 @@ def test_tiff_write_setcolortable_read_only():
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_PaletteIndex
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -8235,8 +9951,8 @@ def test_tiff_write_setcolortable_read_only():
def test_tiff_write_setcolortable_read_only_overriding_tifftags():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
ct = gdal.ColorTable()
ct.SetColorEntry(0, (1, 2, 3, 255))
assert ds.GetRasterBand(1).SetRasterColorTable(ct) == gdal.CE_None
@@ -8250,7 +9966,7 @@ def test_tiff_write_setcolortable_read_only_overriding_tifftags():
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_PaletteIndex
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is not None
+ assert gdal.VSIStatL(filename + ".aux.xml") is not None
ds = gdal.Open(filename)
assert ct is not None
@@ -8265,7 +9981,7 @@ def test_tiff_write_setcolortable_read_only_overriding_tifftags():
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_PaletteIndex
ds = None
- assert gdal.VSIStatL(filename + '.aux.xml') is None
+ assert gdal.VSIStatL(filename + ".aux.xml") is None
ds = gdal.Open(filename)
assert ct is not None
@@ -8273,51 +9989,63 @@ def test_tiff_write_setcolortable_read_only_overriding_tifftags():
assert ds.GetRasterBand(1).GetColorInterpretation() == gdal.GCI_PaletteIndex
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
# Test setting incompatible settings for PREDICTOR
-@pytest.mark.parametrize("dt, options",
- [(gdal.GDT_UInt16, ['PREDICTOR=2', 'NBITS=12']),
- (gdal.GDT_UInt32, ['PREDICTOR=3']),
- (gdal.GDT_UInt16, ['PREDICTOR=invalid'])
- ])
+@pytest.mark.parametrize(
+ "dt, options",
+ [
+ (gdal.GDT_UInt16, ["PREDICTOR=2", "NBITS=12"]),
+ (gdal.GDT_UInt32, ["PREDICTOR=3"]),
+ (gdal.GDT_UInt16, ["PREDICTOR=invalid"]),
+ ],
+)
def test_tiff_write_incompatible_predictor(dt, options):
- filename = '/vsimem/out.tif'
+ filename = "/vsimem/out.tif"
with gdaltest.error_handler():
- assert gdal.GetDriverByName('GTiff').Create(filename, 1, 1, 1, dt, options + ['COMPRESS=LZW']) is None
+ assert (
+ gdal.GetDriverByName("GTiff").Create(
+ filename, 1, 1, 1, dt, options + ["COMPRESS=LZW"]
+ )
+ is None
+ )
###############################################################################
# Test PREDICTOR=2 with 64 bit samples
+
def test_tiff_write_predictor_2_float64():
- md = gdal.GetDriverByName('GTiff').GetMetadata()
- if md['LIBTIFF'] != 'INTERNAL':
- pytest.skip('libtiff > 4.3.0 or internal libtiff needed')
+ md = gdal.GetDriverByName("GTiff").GetMetadata()
+ if md["LIBTIFF"] != "INTERNAL":
+ pytest.skip("libtiff > 4.3.0 or internal libtiff needed")
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 2, 1, 1, gdal.GDT_Float64, ['COMPRESS=LZW', 'PREDICTOR=2'])
- data = struct.pack('d' * 2, 1, 2)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(
+ filename, 2, 1, 1, gdal.GDT_Float64, ["COMPRESS=LZW", "PREDICTOR=2"]
+ )
+ data = struct.pack("d" * 2, 1, 2)
ds.GetRasterBand(1).WriteRaster(0, 0, 2, 1, data)
ds = None
ds = gdal.Open(filename)
- assert ds.GetMetadataItem('PREDICTOR', 'IMAGE_STRUCTURE') == '2'
+ assert ds.GetMetadataItem("PREDICTOR", "IMAGE_STRUCTURE") == "2"
assert ds.ReadRaster() == data
ds = None
gdal.Unlink(filename)
+
###############################################################################
def test_tiff_write_uint64():
- ut = gdaltest.GDALTest('GTiff', 'gtiff/uint64_full_range.tif', 1, 1)
+ ut = gdaltest.GDALTest("GTiff", "gtiff/uint64_full_range.tif", 1, 1)
return ut.testCreateCopy()
@@ -8326,24 +10054,24 @@ def test_tiff_write_uint64():
def test_tiff_write_uint64_nodata():
- filename = '/vsimem/test_tiff_write_uint64_nodata.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1, 1, gdal.GDT_UInt64)
- val = (1 << 64)-1
+ filename = "/vsimem/test_tiff_write_uint64_nodata.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1, 1, gdal.GDT_UInt64)
+ val = (1 << 64) - 1
assert ds.GetRasterBand(1).SetNoDataValue(val) == gdal.CE_None
ds = None
- filename_copy = '/vsimem/test_tiff_write_uint64_nodata_filename_copy.tif'
+ filename_copy = "/vsimem/test_tiff_write_uint64_nodata_filename_copy.tif"
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).GetNoDataValue() == val
- ds = gdal.GetDriverByName('GTiff').CreateCopy(filename_copy, ds)
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(filename_copy, ds)
ds = None
ds = gdal.Open(filename_copy)
assert ds.GetRasterBand(1).GetNoDataValue() == val
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
- gdal.GetDriverByName('GTiff').Delete(filename_copy)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename_copy)
###############################################################################
@@ -8351,7 +10079,7 @@ def test_tiff_write_uint64_nodata():
def test_tiff_write_int64():
- ut = gdaltest.GDALTest('GTiff', 'gtiff/int64_full_range.tif', 1, 65535)
+ ut = gdaltest.GDALTest("GTiff", "gtiff/int64_full_range.tif", 1, 65535)
return ut.testCreateCopy()
@@ -8360,24 +10088,24 @@ def test_tiff_write_int64():
def test_tiff_write_int64_nodata():
- filename = '/vsimem/test_tiff_write_int64_nodata.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1, 1, gdal.GDT_Int64)
+ filename = "/vsimem/test_tiff_write_int64_nodata.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1, 1, gdal.GDT_Int64)
val = -(1 << 63)
assert ds.GetRasterBand(1).SetNoDataValue(val) == gdal.CE_None
ds = None
- filename_copy = '/vsimem/test_tiff_write_int64_nodata_filename_copy.tif'
+ filename_copy = "/vsimem/test_tiff_write_int64_nodata_filename_copy.tif"
ds = gdal.Open(filename)
assert ds.GetRasterBand(1).GetNoDataValue() == val
- ds = gdal.GetDriverByName('GTiff').CreateCopy(filename_copy, ds)
+ ds = gdal.GetDriverByName("GTiff").CreateCopy(filename_copy, ds)
ds = None
ds = gdal.Open(filename_copy)
assert ds.GetRasterBand(1).GetNoDataValue() == val
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
- gdal.GetDriverByName('GTiff').Delete(filename_copy)
+ gdal.GetDriverByName("GTiff").Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename_copy)
###############################################################################
@@ -8386,15 +10114,14 @@ def test_tiff_write_int64_nodata():
def test_tiff_write_alpha_ismaskband():
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1, 2)
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1, 2)
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
assert not ds.GetRasterBand(1).IsMaskBand()
assert ds.GetRasterBand(2).IsMaskBand()
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
-
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -8403,15 +10130,14 @@ def test_tiff_write_alpha_ismaskband():
def test_tiff_write_overview_building_and_approx_stats():
- filename = '/vsimem/out.tif'
- gdal.GetDriverByName('GTiff').Create(filename, 512, 512)
+ filename = "/vsimem/out.tif"
+ gdal.GetDriverByName("GTiff").Create(filename, 512, 512)
ds = gdal.Open(filename)
ds.BuildOverviews("NEAREST", [2, 4, 8])
ds.GetRasterBand(1).ComputeStatistics(1)
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
-
+ gdal.GetDriverByName("GTiff").Delete(filename)
###############################################################################
@@ -8421,44 +10147,43 @@ def test_tiff_write_overview_building_and_approx_stats():
@pytest.mark.parametrize("setmetadata_before", [True, False])
def test_tiff_write_setgeotransform_and_setmetadata(setmetadata_before):
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
- ds.SetGeoTransform([1,2,3,4,5,-6])
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
+ ds.SetGeoTransform([1, 2, 3, 4, 5, -6])
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
if setmetadata_before:
ds.SetMetadata([])
- ds.SetGeoTransform([10,20,30,40,50,-60])
+ ds.SetGeoTransform([10, 20, 30, 40, 50, -60])
if not setmetadata_before:
ds.SetMetadata([])
ds = None
ds = gdal.Open(filename)
- assert ds.GetGeoTransform() == (10,20,30,40,50,-60)
+ assert ds.GetGeoTransform() == (10, 20, 30, 40, 50, -60)
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
+ gdal.GetDriverByName("GTiff").Delete(filename)
@pytest.mark.parametrize("getspatialref_before", [True, False])
def test_tiff_write_setgeotransform_and_getspatialref(getspatialref_before):
- filename = '/vsimem/out.tif'
- ds = gdal.GetDriverByName('GTiff').Create(filename, 1, 1)
- ds.SetGeoTransform([1,2,3,4,5,-6])
+ filename = "/vsimem/out.tif"
+ ds = gdal.GetDriverByName("GTiff").Create(filename, 1, 1)
+ ds.SetGeoTransform([1, 2, 3, 4, 5, -6])
ds = None
ds = gdal.Open(filename, gdal.GA_Update)
if getspatialref_before:
ds.GetSpatialRef()
- ds.SetGeoTransform([10,20,30,40,50,-60])
+ ds.SetGeoTransform([10, 20, 30, 40, 50, -60])
if not getspatialref_before:
ds.GetSpatialRef()
ds = None
ds = gdal.Open(filename)
- assert ds.GetGeoTransform() == (10,20,30,40,50,-60)
+ assert ds.GetGeoTransform() == (10, 20, 30, 40, 50, -60)
ds = None
- gdal.GetDriverByName('GTiff').Delete(filename)
-
+ gdal.GetDriverByName("GTiff").Delete(filename)
def test_tiff_write_cleanup():
diff --git a/autotest/gcore/transformer.py b/autotest/gcore/transformer.py
index a530fa9b22ed..279ab956d80d 100644
--- a/autotest/gcore/transformer.py
+++ b/autotest/gcore/transformer.py
@@ -31,12 +31,12 @@
###############################################################################
+import math
import gdaltest
-from osgeo import gdal
-from osgeo import osr
import pytest
-import math
+
+from osgeo import gdal, osr
###############################################################################
# Test simple Geotransform based transformer.
@@ -44,18 +44,27 @@
def test_transformer_1():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
tr = gdal.Transformer(ds, None, [])
(success, pnt) = tr.TransformPoint(0, 20, 10)
- assert success and pnt[0] == pytest.approx(441920, abs=0.00000001) and pnt[1] == pytest.approx(3750720, abs=0.00000001) and pnt[2] == 0.0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(441920, abs=0.00000001)
+ and pnt[1] == pytest.approx(3750720, abs=0.00000001)
+ and pnt[2] == 0.0
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20, abs=0.00000001) and pnt[1] == pytest.approx(10, abs=0.00000001) and pnt[2] == 0.0, \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20, abs=0.00000001)
+ and pnt[1] == pytest.approx(10, abs=0.00000001)
+ and pnt[2] == 0.0
+ ), "got wrong reverse transform result."
+
###############################################################################
# Test GCP based transformer with polynomials.
@@ -63,36 +72,55 @@ def test_transformer_1():
def test_transformer_2():
- ds = gdal.Open('data/gcps.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_POLYNOMIAL'])
+ ds = gdal.Open("data/gcps.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_POLYNOMIAL"])
(success, pnt) = tr.TransformPoint(0, 20, 10)
- assert success and pnt[0] == pytest.approx(441920, abs=0.001) and pnt[1] == pytest.approx(3750720, abs=0.001) and pnt[2] == 0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(441920, abs=0.001)
+ and pnt[1] == pytest.approx(3750720, abs=0.001)
+ and pnt[2] == 0
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20, abs=0.001) and pnt[1] == pytest.approx(10, abs=0.001) and pnt[2] == 0, \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20, abs=0.001)
+ and pnt[1] == pytest.approx(10, abs=0.001)
+ and pnt[2] == 0
+ ), "got wrong reverse transform result."
+
###############################################################################
# Test GCP based transformer with thin plate splines.
+
def test_transformer_3():
- ds = gdal.Open('data/gcps.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_TPS'])
+ ds = gdal.Open("data/gcps.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_TPS"])
(success, pnt) = tr.TransformPoint(0, 20, 10)
- assert success and pnt[0] == pytest.approx(441920, abs=0.001) and pnt[1] == pytest.approx(3750720, abs=0.001) and pnt[2] == 0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(441920, abs=0.001)
+ and pnt[1] == pytest.approx(3750720, abs=0.001)
+ and pnt[2] == 0
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20, abs=0.001) and pnt[1] == pytest.approx(10, abs=0.001) and pnt[2] == 0, \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20, abs=0.001)
+ and pnt[1] == pytest.approx(10, abs=0.001)
+ and pnt[2] == 0
+ ), "got wrong reverse transform result."
+
###############################################################################
# Test geolocation based transformer.
@@ -100,18 +128,27 @@ def test_transformer_3():
def test_transformer_4():
- ds = gdal.Open('data/sstgeo.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=GEOLOC_ARRAY'])
+ ds = gdal.Open("data/sstgeo.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=GEOLOC_ARRAY"])
(success, pnt) = tr.TransformPoint(0, 20, 10)
- assert success and pnt[0] == pytest.approx(-81.961341857910156, abs=0.000001) and pnt[1] == pytest.approx(29.612689971923828, abs=0.000001) and pnt[2] == 0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(-81.961341857910156, abs=0.000001)
+ and pnt[1] == pytest.approx(29.612689971923828, abs=0.000001)
+ and pnt[2] == 0
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20, abs=0.000001) and pnt[1] == pytest.approx(10, abs=0.000001) and pnt[2] == 0, \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20, abs=0.000001)
+ and pnt[1] == pytest.approx(10, abs=0.000001)
+ and pnt[2] == 0
+ ), "got wrong reverse transform result."
+
###############################################################################
# Test RPC based transformer.
@@ -119,46 +156,68 @@ def test_transformer_4():
def test_transformer_5():
- ds = gdal.Open('data/rpc.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_PIXEL_ERROR_THRESHOLD=0.05'])
+ ds = gdal.Open("data/rpc.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC", "RPC_PIXEL_ERROR_THRESHOLD=0.05"])
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5)
- assert success and pnt[0] == pytest.approx(125.64830100509131, abs=0.000001) and pnt[1] == pytest.approx(39.869433991997553, abs=0.000001) and pnt[2] == 0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64830100509131, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869433991997553, abs=0.000001)
+ and pnt[2] == 0
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.05) and pnt[1] == pytest.approx(10.5, abs=0.05) and pnt[2] == 0, \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.05)
+ and pnt[1] == pytest.approx(10.5, abs=0.05)
+ and pnt[2] == 0
+ ), "got wrong reverse transform result."
# Try with a different height.
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5, 30)
- assert success and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001) and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001) and pnt[2] == 30, \
- 'got wrong forward transform result.(2)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001)
+ and pnt[2] == 30
+ ), "got wrong forward transform result.(2)"
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.05) and pnt[1] == pytest.approx(10.5, abs=0.05) and pnt[2] == 30, \
- 'got wrong reverse transform result.(2)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.05)
+ and pnt[1] == pytest.approx(10.5, abs=0.05)
+ and pnt[2] == 30
+ ), "got wrong reverse transform result.(2)"
# Test RPC_HEIGHT option
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT=30'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC", "RPC_HEIGHT=30"])
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5)
- assert success and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001) and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001), \
- 'got wrong forward transform result.(3)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001)
+ ), "got wrong forward transform result.(3)"
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.1) and pnt[1] == pytest.approx(10.5, abs=0.1), \
- 'got wrong reverse transform result.(3)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.1)
+ and pnt[1] == pytest.approx(10.5, abs=0.1)
+ ), "got wrong reverse transform result.(3)"
# Test RPC_DEM and RPC_HEIGHT_SCALE options
# (long,lat)=(125.64828521533849 39.869345204440144) -> (Easting,Northing)=(213324.662167036 4418634.47813677) in EPSG:32652
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1)
+ ds_dem = gdal.GetDriverByName("GTiff").Create("/vsimem/dem.tif", 100, 100, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(32652)
ds_dem.SetProjection(sr.ExportToWkt())
@@ -166,54 +225,94 @@ def test_transformer_5():
ds_dem.GetRasterBand(1).Fill(15)
ds_dem = None
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif'])
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_HEIGHT_SCALE=2", "RPC_DEM=/vsimem/dem.tif"]
+ )
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5, 0)
- assert success and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001) and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001), \
- 'got wrong forward transform result.(4)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001)
+ ), "got wrong forward transform result.(4)"
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.05) and pnt[1] == pytest.approx(10.5, abs=0.05), \
- 'got wrong reverse transform result.(4)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.05)
+ and pnt[1] == pytest.approx(10.5, abs=0.05)
+ ), "got wrong reverse transform result.(4)"
tr = None
# Test RPC_DEMINTERPOLATION=cubic
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEMINTERPOLATION=cubic'])
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_HEIGHT_SCALE=2",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEMINTERPOLATION=cubic",
+ ],
+ )
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5, 0)
- assert success and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001) and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001), \
- 'got wrong forward transform result.(5)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64828521533849, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869345204440144, abs=0.000001)
+ ), "got wrong forward transform result.(5)"
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.05) and pnt[1] == pytest.approx(10.5, abs=0.05), \
- 'got wrong reverse transform result.(5)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.05)
+ and pnt[1] == pytest.approx(10.5, abs=0.05)
+ ), "got wrong reverse transform result.(5)"
tr = None
# Test RPC_DEMINTERPOLATION=near
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEMINTERPOLATION=near'])
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_HEIGHT_SCALE=2",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEMINTERPOLATION=near",
+ ],
+ )
(success, pnt) = tr.TransformPoint(0, 20.5, 10.5, 0)
- assert success and pnt[0] == pytest.approx(125.64828521503811, abs=0.000001) and pnt[1] == pytest.approx(39.869345204874911, abs=0.000001), \
- 'got wrong forward transform result.(6)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64828521503811, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869345204874911, abs=0.000001)
+ ), "got wrong forward transform result.(6)"
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(20.5, abs=0.05) and pnt[1] == pytest.approx(10.5, abs=0.05), \
- 'got wrong reverse transform result.(6)'
+ assert (
+ success
+ and pnt[0] == pytest.approx(20.5, abs=0.05)
+ and pnt[1] == pytest.approx(10.5, abs=0.05)
+ ), "got wrong reverse transform result.(6)"
tr = None
# Test outside DEM extent : default behaviour --> error
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif'])
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_HEIGHT_SCALE=2", "RPC_DEM=/vsimem/dem.tif"]
+ )
(success, pnt) = tr.TransformPoint(0, 40000, 0, 0)
assert success == 0
@@ -224,39 +323,61 @@ def test_transformer_5():
tr = None
# Test outside DEM extent with RPC_DEM_MISSING_VALUE=0
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1)
+ ds_dem = gdal.GetDriverByName("GTiff").Create("/vsimem/dem.tif", 100, 100, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(32652)
ds_dem.SetProjection(sr.ExportToWkt())
ds_dem.SetGeoTransform([213300, 1, 0, 4418700, 0, -1])
ds_dem.GetRasterBand(1).Fill(15)
ds_dem = None
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEM_MISSING_VALUE=0'])
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_HEIGHT_SCALE=2",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEM_MISSING_VALUE=0",
+ ],
+ )
(success, pnt) = tr.TransformPoint(0, -99.5, 0.5, 0)
- assert success and pnt[0] == pytest.approx(125.64746155942839, abs=0.000001) and pnt[1] == pytest.approx(39.869506789921168, abs=0.000001), \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64746155942839, abs=0.000001)
+ and pnt[1] == pytest.approx(39.869506789921168, abs=0.000001)
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(-99.5, abs=0.05) and pnt[1] == pytest.approx(0.5, abs=0.05), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(-99.5, abs=0.05)
+ and pnt[1] == pytest.approx(0.5, abs=0.05)
+ ), "got wrong reverse transform result."
tr = None
- gdal.Unlink('/vsimem/dem.tif')
+ gdal.Unlink("/vsimem/dem.tif")
+
###############################################################################
# Test RPC convergence bug (bug # 5395)
+
def test_transformer_6():
- ds = gdal.Open('data/rpc_5395.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=RPC'])
+ ds = gdal.Open("data/rpc_5395.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC"])
(success, pnt) = tr.TransformPoint(0, 0.5, 0.5)
- assert success and pnt[0] == pytest.approx(28.26163232, abs=0.0001) and pnt[1] == pytest.approx(-27.79853245, abs=0.0001) and pnt[2] == 0, \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(28.26163232, abs=0.0001)
+ and pnt[1] == pytest.approx(-27.79853245, abs=0.0001)
+ and pnt[2] == 0
+ ), "got wrong forward transform result."
+
###############################################################################
# Test Transformer.TransformPoints
@@ -264,13 +385,18 @@ def test_transformer_6():
def test_transformer_7():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
tr = gdal.Transformer(ds, None, [])
(pnt, success) = tr.TransformPoints(0, [(20, 10)])
- assert success[0] != 0 and pnt[0][0] == pytest.approx(441920, abs=0.00000001) and pnt[0][1] == pytest.approx(3750720, abs=0.00000001) and pnt[0][2] == 0.0, \
- 'got wrong forward transform result.'
+ assert (
+ success[0] != 0
+ and pnt[0][0] == pytest.approx(441920, abs=0.00000001)
+ and pnt[0][1] == pytest.approx(3750720, abs=0.00000001)
+ and pnt[0][2] == 0.0
+ ), "got wrong forward transform result."
+
###############################################################################
# Test handling of nodata in RPC DEM (#5680)
@@ -278,10 +404,12 @@ def test_transformer_7():
def test_transformer_8():
- ds = gdal.Open('data/rpc.vrt')
+ ds = gdal.Open("data/rpc.vrt")
# (long,lat)=(125.64828521533849 39.869345204440144) -> (Easting,Northing)=(213324.662167036 4418634.47813677) in EPSG:32652
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1, gdal.GDT_Int16)
+ ds_dem = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/dem.tif", 100, 100, 1, gdal.GDT_Int16
+ )
sr = osr.SpatialReference()
sr.ImportFromEPSG(32652)
ds_dem.SetProjection(sr.ExportToWkt())
@@ -290,22 +418,31 @@ def test_transformer_8():
ds_dem.GetRasterBand(1).Fill(-32768)
ds_dem = None
- for method in ['near', 'bilinear', 'cubic']:
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEMINTERPOLATION=%s' % method])
+ for method in ["near", "bilinear", "cubic"]:
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEMINTERPOLATION=%s" % method,
+ ],
+ )
(success, pnt) = tr.TransformPoint(0, 20, 10, 0)
if success:
print(success, pnt)
- pytest.fail('got wrong forward transform result.')
+ pytest.fail("got wrong forward transform result.")
(success, pnt) = tr.TransformPoint(1, 125.64828521533849, 39.869345204440144, 0)
if success:
print(success, pnt)
- pytest.fail('got wrong reverse transform result.')
+ pytest.fail("got wrong reverse transform result.")
+
+ gdal.Unlink("/vsimem/dem.tif")
- gdal.Unlink('/vsimem/dem.tif')
###############################################################################
# Test RPC DEM line optimization
@@ -313,22 +450,42 @@ def test_transformer_8():
def test_transformer_9():
- ds = gdal.Open('data/rpc.vrt')
+ ds = gdal.Open("data/rpc.vrt")
# (long,lat)=(125.64828521533849 39.869345204440144) -> (Easting,Northing)=(213324.662167036 4418634.47813677) in EPSG:32652
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1, gdal.GDT_Byte)
+ ds_dem = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/dem.tif", 100, 100, 1, gdal.GDT_Byte
+ )
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
ds_dem.SetProjection(sr.ExportToWkt())
- ds_dem.SetGeoTransform([125.647968621436, 1.2111052640051412e-05, 0, 39.869926216038, 0, -8.6569068979969188e-06])
+ ds_dem.SetGeoTransform(
+ [
+ 125.647968621436,
+ 1.2111052640051412e-05,
+ 0,
+ 39.869926216038,
+ 0,
+ -8.6569068979969188e-06,
+ ]
+ )
import random
+
random.seed(0)
- data = ''.join([chr(40 + int(10 * random.random())) for _ in range(100 * 100)])
+ data = "".join([chr(40 + int(10 * random.random())) for _ in range(100 * 100)])
ds_dem.GetRasterBand(1).WriteRaster(0, 0, 100, 100, data)
ds_dem = None
- for method in ['near', 'bilinear', 'cubic']:
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEMINTERPOLATION=%s' % method])
+ for method in ["near", "bilinear", "cubic"]:
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEMINTERPOLATION=%s" % method,
+ ],
+ )
points = [(125.64828521533849, 39.869345204440144)] * 10
(pnt, success) = tr.TransformPoints(1, points)
@@ -340,7 +497,8 @@ def test_transformer_9():
assert pnt == pnt_optimized, method
- gdal.Unlink('/vsimem/dem.tif')
+ gdal.Unlink("/vsimem/dem.tif")
+
###############################################################################
# Test RPC DEM transform from geoid height to ellipsoidal height
@@ -349,28 +507,43 @@ def test_transformer_9():
def test_transformer_10():
# Create fake vertical shift grid
- out_ds = gdal.GetDriverByName('GTX').Create('tmp/fake.gtx', 10, 10, 1, gdal.GDT_Float32)
+ out_ds = gdal.GetDriverByName("GTX").Create(
+ "tmp/fake.gtx", 10, 10, 1, gdal.GDT_Float32
+ )
out_ds.SetGeoTransform([-180, 36, 0, 90, 0, -18])
sr = osr.SpatialReference()
- sr.SetWellKnownGeogCS('WGS84')
+ sr.SetWellKnownGeogCS("WGS84")
out_ds.SetProjection(sr.ExportToWkt())
out_ds.GetRasterBand(1).Fill(100)
out_ds = None
# Create a fake DEM
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1, gdal.GDT_Byte)
- ds_dem.SetGeoTransform([125.647968621436, 1.2111052640051412e-05, 0, 39.869926216038, 0, -8.6569068979969188e-06])
+ ds_dem = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/dem.tif", 100, 100, 1, gdal.GDT_Byte
+ )
+ ds_dem.SetGeoTransform(
+ [
+ 125.647968621436,
+ 1.2111052640051412e-05,
+ 0,
+ 39.869926216038,
+ 0,
+ -8.6569068979969188e-06,
+ ]
+ )
import random
+
random.seed(0)
- data = ''.join([chr(40 + int(10 * random.random())) for _ in range(100 * 100)])
+ data = "".join([chr(40 + int(10 * random.random())) for _ in range(100 * 100)])
ds_dem.GetRasterBand(1).WriteRaster(0, 0, 100, 100, data)
ds_dem = None
- ds_dem = gdal.Open('/vsimem/dem.tif')
- vrt_dem = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/dem.vrt', ds_dem)
+ ds_dem = gdal.Open("/vsimem/dem.tif")
+ vrt_dem = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/dem.vrt", ds_dem)
ds_dem = None
- vrt_dem.SetProjection("""COMPD_CS["WGS 84 + my_height",
+ vrt_dem.SetProjection(
+ """COMPD_CS["WGS 84 + my_height",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
@@ -386,25 +559,39 @@ def test_transformer_10():
EXTENSION["PROJ4_GRIDS","./tmp/fake.gtx"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
- AXIS["Up",UP]]]""")
+ AXIS["Up",UP]]]"""
+ )
vrt_dem = None
- ds = gdal.Open('data/rpc.vrt')
+ ds = gdal.Open("data/rpc.vrt")
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/dem.vrt'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC", "RPC_DEM=/vsimem/dem.vrt"])
(success, pnt) = tr.TransformPoint(1, 125.64828521533849, 39.869345204440144, 0)
- assert success and pnt[0] == pytest.approx(27.31476045569616, abs=1e-5) and pnt[1] == pytest.approx(-53.328814757762302, abs=1e-5) and pnt[2] == 0, \
- 'got wrong result: %s' % str(pnt)
-
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/dem.vrt', 'RPC_DEM_APPLY_VDATUM_SHIFT=FALSE'])
+ assert (
+ success
+ and pnt[0] == pytest.approx(27.31476045569616, abs=1e-5)
+ and pnt[1] == pytest.approx(-53.328814757762302, abs=1e-5)
+ and pnt[2] == 0
+ ), "got wrong result: %s" % str(pnt)
+
+ tr = gdal.Transformer(
+ ds,
+ None,
+ ["METHOD=RPC", "RPC_DEM=/vsimem/dem.vrt", "RPC_DEM_APPLY_VDATUM_SHIFT=FALSE"],
+ )
(success, pnt) = tr.TransformPoint(1, 125.64828521533849, 39.869345204440144, 0)
- assert success and pnt[0] == pytest.approx(21.445626206892484, abs=1e-5) and pnt[1] == pytest.approx(1.6460100520871492, abs=1e-5) and pnt[2] == 0, \
- 'got wrong result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(21.445626206892484, abs=1e-5)
+ and pnt[1] == pytest.approx(1.6460100520871492, abs=1e-5)
+ and pnt[2] == 0
+ ), "got wrong result."
+
+ gdal.GetDriverByName("GTX").Delete("tmp/fake.gtx")
+ gdal.Unlink("/vsimem/dem.tif")
+ gdal.Unlink("/vsimem/dem.vrt")
- gdal.GetDriverByName('GTX').Delete('tmp/fake.gtx')
- gdal.Unlink('/vsimem/dem.tif')
- gdal.Unlink('/vsimem/dem.vrt')
###############################################################################
# Test failed inverse RPC transform (#6162)
@@ -412,33 +599,38 @@ def test_transformer_10():
def test_transformer_11():
- ds = gdal.GetDriverByName('MEM').Create('', 6600, 4400)
+ ds = gdal.GetDriverByName("MEM").Create("", 6600, 4400)
rpc = [
- 'HEIGHT_OFF=1113.66579196784',
- 'HEIGHT_SCALE=12.5010114250099',
- 'LAT_OFF=38.8489906468112',
- 'LAT_SCALE=-0.106514418771489',
- 'LINE_DEN_COEFF=1 -0.000147949809772754 -0.000395269640841174 -1.15825619524758e-05 -0.001613476071797 5.20818134468044e-05 -2.87546958936308e-05 0.00139252754800089 0.00103224907048726 -5.0328770407996e-06 8.03722313022155e-06 0.000236052289425919 0.000208478107633822 -8.11629138727222e-06 0.000168941442517399 0.000392113144410504 3.13299811375497e-06 -1.50306451132806e-07 -1.96870155855449e-06 6.84425679628047e-07',
- 'LINE_NUM_COEFF=0.00175958077249233 1.38380980570961 -1.10937056344449 -2.64222540811728e-05 0.00242330787142254 0.000193743606261641 -0.000149740797138056 0.000348558508286103 -8.44646294793856e-05 3.10853483444725e-05 6.94899990982205e-05 -0.00348125387930033 -0.00481553689971959 -7.80038440894703e-06 0.00410332555882184 0.00269594666059233 5.94355882183947e-06 -6.12499223746471e-05 -2.16490482825638e-05 -1.95059491792213e-06',
- 'LINE_OFF=2199.80872158044',
- 'LINE_SCALE=2202.03966104116',
- 'LONG_OFF=77.3374268058015',
- 'LONG_SCALE=0.139483831686384',
- 'SAMP_DEN_COEFF=1 0.000220381598198686 -5.9113079248377e-05 -0.000123013508187712 -2.69270454504924e-05 3.85090208529735e-05 -5.05359221990966e-05 0.000207017095461956 0.000441092857548974 1.47302072491805e-05 9.4840973108768e-06 -0.000810344094204395 -0.000690502911945615 -1.07959445293954e-05 0.000801157109076503 0.000462754838815978 9.13256389877791e-06 7.49571761868177e-06 -5.00612460432453e-06 -2.25925949180435e-06',
- 'SAMP_NUM_COEFF=-0.00209214639511201 -0.759096012299728 -0.903450038473527 5.43928095403867e-05 -0.000717672934172181 -0.000168790405106395 -0.00015564609496447 0.0013261576802665 -0.000398331147368139 -3.84712681506314e-05 2.70041394522796e-05 0.00254362585790201 0.00332988183285888 3.36326833370395e-05 0.00445687297094153 0.00290078876854111 3.59552237739047e-05 7.16492495304347e-05 -5.6782194494005e-05 2.32051448455541e-06',
- 'SAMP_OFF=3300.39818049514',
- 'SAMP_SCALE=3302.50400920438'
+ "HEIGHT_OFF=1113.66579196784",
+ "HEIGHT_SCALE=12.5010114250099",
+ "LAT_OFF=38.8489906468112",
+ "LAT_SCALE=-0.106514418771489",
+ "LINE_DEN_COEFF=1 -0.000147949809772754 -0.000395269640841174 -1.15825619524758e-05 -0.001613476071797 5.20818134468044e-05 -2.87546958936308e-05 0.00139252754800089 0.00103224907048726 -5.0328770407996e-06 8.03722313022155e-06 0.000236052289425919 0.000208478107633822 -8.11629138727222e-06 0.000168941442517399 0.000392113144410504 3.13299811375497e-06 -1.50306451132806e-07 -1.96870155855449e-06 6.84425679628047e-07",
+ "LINE_NUM_COEFF=0.00175958077249233 1.38380980570961 -1.10937056344449 -2.64222540811728e-05 0.00242330787142254 0.000193743606261641 -0.000149740797138056 0.000348558508286103 -8.44646294793856e-05 3.10853483444725e-05 6.94899990982205e-05 -0.00348125387930033 -0.00481553689971959 -7.80038440894703e-06 0.00410332555882184 0.00269594666059233 5.94355882183947e-06 -6.12499223746471e-05 -2.16490482825638e-05 -1.95059491792213e-06",
+ "LINE_OFF=2199.80872158044",
+ "LINE_SCALE=2202.03966104116",
+ "LONG_OFF=77.3374268058015",
+ "LONG_SCALE=0.139483831686384",
+ "SAMP_DEN_COEFF=1 0.000220381598198686 -5.9113079248377e-05 -0.000123013508187712 -2.69270454504924e-05 3.85090208529735e-05 -5.05359221990966e-05 0.000207017095461956 0.000441092857548974 1.47302072491805e-05 9.4840973108768e-06 -0.000810344094204395 -0.000690502911945615 -1.07959445293954e-05 0.000801157109076503 0.000462754838815978 9.13256389877791e-06 7.49571761868177e-06 -5.00612460432453e-06 -2.25925949180435e-06",
+ "SAMP_NUM_COEFF=-0.00209214639511201 -0.759096012299728 -0.903450038473527 5.43928095403867e-05 -0.000717672934172181 -0.000168790405106395 -0.00015564609496447 0.0013261576802665 -0.000398331147368139 -3.84712681506314e-05 2.70041394522796e-05 0.00254362585790201 0.00332988183285888 3.36326833370395e-05 0.00445687297094153 0.00290078876854111 3.59552237739047e-05 7.16492495304347e-05 -5.6782194494005e-05 2.32051448455541e-06",
+ "SAMP_OFF=3300.39818049514",
+ "SAMP_SCALE=3302.50400920438",
]
- ds.SetMetadata(rpc, 'RPC')
+ ds.SetMetadata(rpc, "RPC")
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT=4000'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC", "RPC_HEIGHT=4000"])
(success, pnt) = tr.TransformPoint(0, 0, 0, 0)
assert not success, pnt
# But this one should succeed
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT=1150'])
+ tr = gdal.Transformer(ds, None, ["METHOD=RPC", "RPC_HEIGHT=1150"])
(success, pnt) = tr.TransformPoint(0, 0, 0, 0)
- assert success and pnt[0] == pytest.approx(77.350939956024618, abs=1e-7) and pnt[1] == pytest.approx(38.739703990877814, abs=1e-7)
+ assert (
+ success
+ and pnt[0] == pytest.approx(77.350939956024618, abs=1e-7)
+ and pnt[1] == pytest.approx(38.739703990877814, abs=1e-7)
+ )
+
###############################################################################
# Test degenerate cases of TPS transformer
@@ -446,7 +638,8 @@ def test_transformer_11():
def test_transformer_12():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
@@ -461,14 +654,20 @@ def test_transformer_12():
data/byte.tif
-""")
+"""
+ )
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_TPS'])
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_TPS"])
assert tr is not None
(success, pnt) = tr.TransformPoint(0, 0, 0)
- assert success and pnt[0] == pytest.approx(0, abs=1e-7) and pnt[1] == pytest.approx(0, abs=1e-7)
-
- ds = gdal.Open("""
+ assert (
+ success
+ and pnt[0] == pytest.approx(0, abs=1e-7)
+ and pnt[1] == pytest.approx(0, abs=1e-7)
+ )
+
+ ds = gdal.Open(
+ """
@@ -483,14 +682,16 @@ def test_transformer_12():
data/byte.tif
-""")
+"""
+ )
gdal.ErrorReset()
with gdaltest.error_handler():
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_TPS'])
- assert gdal.GetLastErrorMsg() != ''
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_TPS"])
+ assert gdal.GetLastErrorMsg() != ""
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
@@ -505,12 +706,14 @@ def test_transformer_12():
data/byte.tif
-""")
+"""
+ )
gdal.ErrorReset()
with gdaltest.error_handler():
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_TPS'])
- assert gdal.GetLastErrorMsg() != ''
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_TPS"])
+ assert gdal.GetLastErrorMsg() != ""
+
###############################################################################
# Test inverse RPC transform at DEM edge (#6377)
@@ -518,7 +721,7 @@ def test_transformer_12():
def test_transformer_13():
- ds = gdal.GetDriverByName('MEM').Create('', 6600, 4400)
+ ds = gdal.GetDriverByName("MEM").Create("", 6600, 4400)
rpc = [
"HEIGHT_OFF=79.895358112544",
"HEIGHT_SCALE=71.8479951519956",
@@ -533,66 +736,83 @@ def test_transformer_13():
"SAMP_DEN_COEFF=1 -0.000817668457487893 -0.00151956231901818 0.00117149108953055 0.000514723430775277 0.000357856819755055 0.000655430235824068 -0.00100177312999255 -0.000488725013873637 -0.000500795084518271 -3.31511569640467e-06 4.60608554396048e-05 4.71371559254521e-05 -3.47487113243818e-06 1.0984752288197e-05 1.6421626141648e-05 -6.2866141729034e-06 -6.32966599886646e-05 -7.06552514786235e-05 3.89288575686084e-06",
"SAMP_NUM_COEFF=0.00547379112608157 0.807100297014362 0.845388298829057 0.01082483811889 -0.00320368761068744 0.00357867636379949 0.00459377712275926 -0.00324853865239341 -0.00218177030092682 2.99823054607907e-05 0.000946829367823539 0.00428577519330827 0.0045745876325088 -0.000396201144848935 0.00488772258958395 0.00435309486883759 -0.000402737234433541 0.000402935809278189 0.000642374929382851 -5.26793321752838e-06",
"SAMP_OFF=3299.3111821927",
- "SAMP_SCALE=3297.19448149873"
+ "SAMP_SCALE=3297.19448149873",
]
- ds.SetMetadata(rpc, 'RPC')
+ ds.SetMetadata(rpc, "RPC")
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=data/transformer_13_dem.tif'])
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_DEM=data/transformer_13_dem.tif"]
+ )
(success, pnt) = tr.TransformPoint(0, 6600, 24)
- assert success and pnt[0] == pytest.approx(-108.00066000065341, abs=1e-7) and pnt[1] == pytest.approx(39.157694013439489, abs=1e-7)
+ assert (
+ success
+ and pnt[0] == pytest.approx(-108.00066000065341, abs=1e-7)
+ and pnt[1] == pytest.approx(39.157694013439489, abs=1e-7)
+ )
+
###############################################################################
# Test inverse RPC transform when iterations do oscillations (#6377)
def test_transformer_14():
- ds = gdal.GetDriverByName('MEM').Create('', 4032, 2688)
- rpc = ["MIN_LAT=0",
- "MAX_LAT=0",
- "MIN_LONG=0",
- "MAX_LONG=0",
- "HEIGHT_OFF=244.72924043124081",
- "HEIGHT_SCALE=391.44066987292678",
- "LAT_OFF=0.095493639758799986",
- "LAT_SCALE=-0.0977494003085103",
- "LINE_DEN_COEFF=1 1.73399671259238e-05 -6.18169396309642e-06 -3.11498839490863e-05 -1.18048814815295e-05 -5.46123898974842e-05 -2.51203895820587e-05 -5.77299008756702e-05 -1.37836923606953e-05 -3.24029327866125e-06 2.06307542696228e-07 -5.16777154466466e-08 2.98762926005741e-07 3.17761145061869e-08 1.48077371641094e-07 -7.69738626480047e-08 2.94990048269861e-08 -3.37468052222007e-08 -3.67859879729462e-08 8.79847359414426e-10 ",
- "LINE_NUM_COEFF=0.000721904493927027 1.02330510505135 -1.27742813759689 -0.0973049949136407 -0.014260789316429 0.00229308399354221 -0.0016640916975237 0.0124508639909873 0.00336835383694126 1.1987123734283e-05 -1.85240614830659e-05 4.40716454954686e-05 2.3198555492418e-05 -8.31659287301587e-08 -5.10329082923063e-05 2.56477008932482e-05 1.01465909326012e-05 1.04407036240869e-05 4.27413648628578e-05 2.91696764503125e-07 ",
- "LINE_OFF=1343.99369782095",
- "LINE_SCALE=1343.96638400536",
- "LONG_OFF=-0.034423410000698595",
- "LONG_SCALE=0.143444599019706",
- "SAMP_DEN_COEFF=1 1.83636704399141e-05 3.55794197969218e-06 -1.33255440425932e-05 -4.25424777986987e-06 -3.95287146748821e-05 1.35786181318561e-05 -3.86131208639696e-05 -1.10085128708761e-05 -1.26863939055319e-05 -2.88045902675552e-07 -1.58732907217101e-07 4.08999884183478e-07 6.6854211618061e-08 -1.46399266323942e-07 -4.69718293745237e-08 -4.14626818788491e-08 -3.00588241056424e-07 4.54784506604435e-08 3.24214474149225e-08 ",
- "SAMP_NUM_COEFF=-0.0112062780844554 -1.05096833835297 -0.704023055461029 0.0384547265206585 -0.00987134340336078 -0.00310989611092616 -0.00116937850565916 -0.0102714370609919 0.000930565787504389 7.03834691339565e-05 -3.83216250787844e-05 -3.67841179314918e-05 2.45498653278515e-05 1.06302833544472e-05 -6.26921822677631e-05 1.29769009118128e-05 1.1336284460811e-05 -3.01250967502161e-05 -7.60511798099513e-06 -4.45260900205512e-07 ",
- "SAMP_OFF=2015.99417232167",
- "SAMP_SCALE=2015.9777295656"
- ]
- ds.SetMetadata(rpc, 'RPC')
-
- old_rpc_inverse_verbose = gdal.GetConfigOption('RPC_INVERSE_VERBOSE')
- gdal.SetConfigOption('RPC_INVERSE_VERBOSE', 'YES')
- old_rpc_inverse_log = gdal.GetConfigOption('RPC_INVERSE_LOG')
- gdal.SetConfigOption('RPC_INVERSE_LOG', '/vsimem/transformer_14.csv')
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=data/transformer_14_dem.tif'])
- gdal.SetConfigOption('RPC_INVERSE_VERBOSE', old_rpc_inverse_verbose)
- gdal.SetConfigOption('RPC_INVERSE_LOG', old_rpc_inverse_log)
+ ds = gdal.GetDriverByName("MEM").Create("", 4032, 2688)
+ rpc = [
+ "MIN_LAT=0",
+ "MAX_LAT=0",
+ "MIN_LONG=0",
+ "MAX_LONG=0",
+ "HEIGHT_OFF=244.72924043124081",
+ "HEIGHT_SCALE=391.44066987292678",
+ "LAT_OFF=0.095493639758799986",
+ "LAT_SCALE=-0.0977494003085103",
+ "LINE_DEN_COEFF=1 1.73399671259238e-05 -6.18169396309642e-06 -3.11498839490863e-05 -1.18048814815295e-05 -5.46123898974842e-05 -2.51203895820587e-05 -5.77299008756702e-05 -1.37836923606953e-05 -3.24029327866125e-06 2.06307542696228e-07 -5.16777154466466e-08 2.98762926005741e-07 3.17761145061869e-08 1.48077371641094e-07 -7.69738626480047e-08 2.94990048269861e-08 -3.37468052222007e-08 -3.67859879729462e-08 8.79847359414426e-10 ",
+ "LINE_NUM_COEFF=0.000721904493927027 1.02330510505135 -1.27742813759689 -0.0973049949136407 -0.014260789316429 0.00229308399354221 -0.0016640916975237 0.0124508639909873 0.00336835383694126 1.1987123734283e-05 -1.85240614830659e-05 4.40716454954686e-05 2.3198555492418e-05 -8.31659287301587e-08 -5.10329082923063e-05 2.56477008932482e-05 1.01465909326012e-05 1.04407036240869e-05 4.27413648628578e-05 2.91696764503125e-07 ",
+ "LINE_OFF=1343.99369782095",
+ "LINE_SCALE=1343.96638400536",
+ "LONG_OFF=-0.034423410000698595",
+ "LONG_SCALE=0.143444599019706",
+ "SAMP_DEN_COEFF=1 1.83636704399141e-05 3.55794197969218e-06 -1.33255440425932e-05 -4.25424777986987e-06 -3.95287146748821e-05 1.35786181318561e-05 -3.86131208639696e-05 -1.10085128708761e-05 -1.26863939055319e-05 -2.88045902675552e-07 -1.58732907217101e-07 4.08999884183478e-07 6.6854211618061e-08 -1.46399266323942e-07 -4.69718293745237e-08 -4.14626818788491e-08 -3.00588241056424e-07 4.54784506604435e-08 3.24214474149225e-08 ",
+ "SAMP_NUM_COEFF=-0.0112062780844554 -1.05096833835297 -0.704023055461029 0.0384547265206585 -0.00987134340336078 -0.00310989611092616 -0.00116937850565916 -0.0102714370609919 0.000930565787504389 7.03834691339565e-05 -3.83216250787844e-05 -3.67841179314918e-05 2.45498653278515e-05 1.06302833544472e-05 -6.26921822677631e-05 1.29769009118128e-05 1.1336284460811e-05 -3.01250967502161e-05 -7.60511798099513e-06 -4.45260900205512e-07 ",
+ "SAMP_OFF=2015.99417232167",
+ "SAMP_SCALE=2015.9777295656",
+ ]
+ ds.SetMetadata(rpc, "RPC")
+
+ old_rpc_inverse_verbose = gdal.GetConfigOption("RPC_INVERSE_VERBOSE")
+ gdal.SetConfigOption("RPC_INVERSE_VERBOSE", "YES")
+ old_rpc_inverse_log = gdal.GetConfigOption("RPC_INVERSE_LOG")
+ gdal.SetConfigOption("RPC_INVERSE_LOG", "/vsimem/transformer_14.csv")
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_DEM=data/transformer_14_dem.tif"]
+ )
+ gdal.SetConfigOption("RPC_INVERSE_VERBOSE", old_rpc_inverse_verbose)
+ gdal.SetConfigOption("RPC_INVERSE_LOG", old_rpc_inverse_log)
(success, pnt) = tr.TransformPoint(0, 0, 0)
- assert success and pnt[0] == pytest.approx(1.9391846640653961e-05, abs=1e-7) and pnt[1] == pytest.approx(-0.0038824752244123275, abs=1e-7)
+ assert (
+ success
+ and pnt[0] == pytest.approx(1.9391846640653961e-05, abs=1e-7)
+ and pnt[1] == pytest.approx(-0.0038824752244123275, abs=1e-7)
+ )
- f = gdal.VSIFOpenL('/vsimem/transformer_14.csvt', 'rb')
+ f = gdal.VSIFOpenL("/vsimem/transformer_14.csvt", "rb")
if f is not None:
- content = gdal.VSIFReadL(1, 1000, f).decode('ASCII')
+ content = gdal.VSIFReadL(1, 1000, f).decode("ASCII")
gdal.VSIFCloseL(f)
- assert content.startswith('Integer,Real,Real,Real,String,Real,Real')
+ assert content.startswith("Integer,Real,Real,Real,String,Real,Real")
- f = gdal.VSIFOpenL('/vsimem/transformer_14.csv', 'rb')
+ f = gdal.VSIFOpenL("/vsimem/transformer_14.csv", "rb")
if f is not None:
- content = gdal.VSIFReadL(1, 1000, f).decode('ASCII')
+ content = gdal.VSIFReadL(1, 1000, f).decode("ASCII")
gdal.VSIFCloseL(f)
- assert content.startswith("""iter,long,lat,height,WKT,error_pixel_x,error_pixel_y
-0,""")
+ assert content.startswith(
+ """iter,long,lat,height,WKT,error_pixel_x,error_pixel_y
+0,"""
+ )
+
+ gdal.Unlink("/vsimem/transformer_14.csvt")
+ gdal.Unlink("/vsimem/transformer_14.csv")
- gdal.Unlink('/vsimem/transformer_14.csvt')
- gdal.Unlink('/vsimem/transformer_14.csv')
###############################################################################
# Test inverse RPC transform with DEM in [-180,180] but guessed longitude going
@@ -601,7 +821,7 @@ def test_transformer_14():
def test_transformer_15():
- ds = gdal.GetDriverByName('MEM').Create('', 6600, 4400)
+ ds = gdal.GetDriverByName("MEM").Create("", 6600, 4400)
rpc = [
"HEIGHT_OFF=50",
"HEIGHT_SCALE=10",
@@ -618,56 +838,81 @@ def test_transformer_15():
"SAMP_OFF=3300.0420831968",
"SAMP_SCALE=3295.90302088781",
]
- ds.SetMetadata(rpc, 'RPC')
+ ds.SetMetadata(rpc, "RPC")
sr = osr.SpatialReference()
- sr.SetWellKnownGeogCS('WGS84')
- demE179 = gdal.GetDriverByName('GTiff').Create('/vsimem/demE179.tif', 10, 10)
+ sr.SetWellKnownGeogCS("WGS84")
+ demE179 = gdal.GetDriverByName("GTiff").Create("/vsimem/demE179.tif", 10, 10)
demE179.SetProjection(sr.ExportToWkt())
demE179.SetGeoTransform([179, 0.1, 0, 0.5, 0, -0.1])
demE179.GetRasterBand(1).Fill(50)
- demW180 = gdal.GetDriverByName('GTiff').Create('/vsimem/demW180.tif', 10, 10)
+ demW180 = gdal.GetDriverByName("GTiff").Create("/vsimem/demW180.tif", 10, 10)
demW180.SetProjection(sr.ExportToWkt())
demW180.SetGeoTransform([-180, 0.1, 0, 0.5, 0, -0.1])
demW180.GetRasterBand(1).Fill(50)
- gdal.BuildVRT('/vsimem/transformer_15_dem.vrt', [demE179, demW180])
+ gdal.BuildVRT("/vsimem/transformer_15_dem.vrt", [demE179, demW180])
demE179 = None
demW180 = None
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/transformer_15_dem.vrt'])
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_DEM=/vsimem/transformer_15_dem.vrt"]
+ )
(success, pnt) = tr.TransformPoint(0, 0, 0)
- assert success and pnt[0] == pytest.approx(180.02280735469199, abs=1e-7) and pnt[1] == pytest.approx(0.061069145746997976, abs=1e-7)
+ assert (
+ success
+ and pnt[0] == pytest.approx(180.02280735469199, abs=1e-7)
+ and pnt[1] == pytest.approx(0.061069145746997976, abs=1e-7)
+ )
(success, pnt_forward) = tr.TransformPoint(1, pnt[0], pnt[1], 0)
- assert success and pnt_forward[0] == pytest.approx(0, abs=0.1) and pnt_forward[1] == pytest.approx(0, abs=0.1), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt_forward[0] == pytest.approx(0, abs=0.1)
+ and pnt_forward[1] == pytest.approx(0, abs=0.1)
+ ), "got wrong reverse transform result."
(success, pnt_forward) = tr.TransformPoint(1, pnt[0] - 360, pnt[1], 0)
- assert success and pnt_forward[0] == pytest.approx(0, abs=0.1) and pnt_forward[1] == pytest.approx(0, abs=0.1), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt_forward[0] == pytest.approx(0, abs=0.1)
+ and pnt_forward[1] == pytest.approx(0, abs=0.1)
+ ), "got wrong reverse transform result."
# Now test around -180
- ds = gdal.GetDriverByName('MEM').Create('', 6600, 4400)
- rpc.remove('LONG_OFF=179.9')
- rpc += ['LONG_OFF=-179.9']
- ds.SetMetadata(rpc, 'RPC')
-
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/transformer_15_dem.vrt'])
+ ds = gdal.GetDriverByName("MEM").Create("", 6600, 4400)
+ rpc.remove("LONG_OFF=179.9")
+ rpc += ["LONG_OFF=-179.9"]
+ ds.SetMetadata(rpc, "RPC")
+
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_DEM=/vsimem/transformer_15_dem.vrt"]
+ )
(success, pnt) = tr.TransformPoint(0, 6600, 4400)
- assert success and pnt[0] == pytest.approx(-180.02313813793387, abs=1e-7) and pnt[1] == pytest.approx(-0.061398913932229765, abs=1e-7)
+ assert (
+ success
+ and pnt[0] == pytest.approx(-180.02313813793387, abs=1e-7)
+ and pnt[1] == pytest.approx(-0.061398913932229765, abs=1e-7)
+ )
(success, pnt_forward) = tr.TransformPoint(1, pnt[0], pnt[1], 0)
- assert success and pnt_forward[0] == pytest.approx(6600, abs=0.1) and pnt_forward[1] == pytest.approx(4400, abs=0.1), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt_forward[0] == pytest.approx(6600, abs=0.1)
+ and pnt_forward[1] == pytest.approx(4400, abs=0.1)
+ ), "got wrong reverse transform result."
(success, pnt_forward) = tr.TransformPoint(1, pnt[0] + 360, pnt[1], 0)
- assert success and pnt_forward[0] == pytest.approx(6600, abs=0.1) and pnt_forward[1] == pytest.approx(4400, abs=0.1), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt_forward[0] == pytest.approx(6600, abs=0.1)
+ and pnt_forward[1] == pytest.approx(4400, abs=0.1)
+ ), "got wrong reverse transform result."
+
+ gdal.Unlink("/vsimem/demE179.tif")
+ gdal.Unlink("/vsimem/demW180.tif")
+ gdal.Unlink("/vsimem/transformer_15_dem.tif")
+ gdal.Unlink("/vsimem/transformer_15_dem.vrt")
- gdal.Unlink('/vsimem/demE179.tif')
- gdal.Unlink('/vsimem/demW180.tif')
- gdal.Unlink('/vsimem/transformer_15_dem.tif')
- gdal.Unlink('/vsimem/transformer_15_dem.vrt')
###############################################################################
# Test approximate sub-transformers in GenImgProjTransformer
@@ -676,37 +921,50 @@ def test_transformer_15():
def test_transformer_16():
- gdal.Translate('/vsimem/transformer_16.tif', 'data/byte.tif', options="-gcp 0 0 440720.000 3751320.000 -gcp 0 20 440720.000 3750120.000 -gcp 20 0 441920.000 3751320.000 -gcp 20 20 441920.000 3750120.000 -a_srs EPSG:26711")
- gdal.Warp('/vsimem/transformer_16.vrt', '/vsimem/transformer_16.tif', options='-of VRT -t_srs EPSG:4326 -et 0 -to SRC_APPROX_ERROR_IN_SRS_UNIT=6.05 -to SRC_APPROX_ERROR_IN_PIXEL=0.1 -to REPROJECTION_APPROX_ERROR_IN_SRC_SRS_UNIT=6.1 -to REPROJECTION_APPROX_ERROR_IN_DST_SRS_UNIT=0.0001')
- f = gdal.VSIFOpenL('/vsimem/transformer_16.vrt', 'rb')
+ gdal.Translate(
+ "/vsimem/transformer_16.tif",
+ "data/byte.tif",
+ options="-gcp 0 0 440720.000 3751320.000 -gcp 0 20 440720.000 3750120.000 -gcp 20 0 441920.000 3751320.000 -gcp 20 20 441920.000 3750120.000 -a_srs EPSG:26711",
+ )
+ gdal.Warp(
+ "/vsimem/transformer_16.vrt",
+ "/vsimem/transformer_16.tif",
+ options="-of VRT -t_srs EPSG:4326 -et 0 -to SRC_APPROX_ERROR_IN_SRS_UNIT=6.05 -to SRC_APPROX_ERROR_IN_PIXEL=0.1 -to REPROJECTION_APPROX_ERROR_IN_SRC_SRS_UNIT=6.1 -to REPROJECTION_APPROX_ERROR_IN_DST_SRS_UNIT=0.0001",
+ )
+ f = gdal.VSIFOpenL("/vsimem/transformer_16.vrt", "rb")
if f is not None:
- content = gdal.VSIFReadL(1, 10000, f).decode('ASCII')
+ content = gdal.VSIFReadL(1, 10000, f).decode("ASCII")
gdal.VSIFCloseL(f)
- assert ('6.05' in content and \
- '0.1' in content and \
- '0.0001' in content and \
- '6.1' in content)
- ds = gdal.Translate('', '/vsimem/transformer_16.vrt', format='MEM')
+ assert (
+ "6.05" in content
+ and "0.1" in content
+ and "0.0001" in content
+ and "6.1" in content
+ )
+ ds = gdal.Translate("", "/vsimem/transformer_16.vrt", format="MEM")
assert ds.GetRasterBand(1).Checksum() == 4727
ds = None
- gdal.Unlink('/vsimem/transformer_16.tif')
- gdal.Unlink('/vsimem/transformer_16.vrt')
+ gdal.Unlink("/vsimem/transformer_16.tif")
+ gdal.Unlink("/vsimem/transformer_16.vrt")
###############################################################################
# Test RPC DEM with unexisting RPC DEM file
+
def test_transformer_17():
- ds = gdal.Open('data/rpc.vrt')
+ ds = gdal.Open("data/rpc.vrt")
with gdaltest.error_handler():
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_DEM=/vsimem/i/donot/exist/dem.tif'])
+ tr = gdal.Transformer(
+ ds, None, ["METHOD=RPC", "RPC_DEM=/vsimem/i/donot/exist/dem.tif"]
+ )
assert tr is None
def test_transformer_longlat_wrap_outside_180():
- ds = gdal.GetDriverByName('MEM').Create('', 360, 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 360, 1, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326)
ds.SetProjection(sr.ExportToWkt())
@@ -719,14 +977,18 @@ def test_transformer_longlat_wrap_outside_180():
assert pnt[1] == pytest.approx(0.5, abs=0.000001), pnt
-
###############################################################################
# Test reprojection transformer without reverse path
# NOTE: in case the inverse airy method is implemented some day, this test
# might fail
+
def test_transformer_no_reverse_method():
- tr = gdal.Transformer(None, None, ['SRC_SRS=+proj=longlat +ellps=GRS80', 'DST_SRS=+proj=airy +ellps=GRS80'])
+ tr = gdal.Transformer(
+ None,
+ None,
+ ["SRC_SRS=+proj=longlat +ellps=GRS80", "DST_SRS=+proj=airy +ellps=GRS80"],
+ )
assert tr
(success, pnt) = tr.TransformPoint(0, 2, 49)
@@ -738,58 +1000,81 @@ def test_transformer_no_reverse_method():
(success, pnt) = tr.TransformPoint(1, 2, 49)
assert not success
+
###############################################################################
# Test precision of GCP based transformer with thin plate splines and lots of GCPs (2115).
+
def test_transformer_tps_precision():
- ds = gdal.Open('data/gcps_2115.vrt')
- tr = gdal.Transformer(ds, None, ['METHOD=GCP_TPS'])
- assert tr, 'tps transformation could not be computed'
+ ds = gdal.Open("data/gcps_2115.vrt")
+ tr = gdal.Transformer(ds, None, ["METHOD=GCP_TPS"])
+ assert tr, "tps transformation could not be computed"
success = True
maxDiffResult = 0.0
for gcp in ds.GetGCPs():
(s, result) = tr.TransformPoint(0, gcp.GCPPixel, gcp.GCPLine)
success &= s
- diffResult = math.sqrt((gcp.GCPX - result[0])**2 + (gcp.GCPY -result[1])**2)
+ diffResult = math.sqrt(
+ (gcp.GCPX - result[0]) ** 2 + (gcp.GCPY - result[1]) ** 2
+ )
maxDiffResult = max(maxDiffResult, diffResult)
- assert success, 'at least one point could not be transformed'
- assert maxDiffResult < 1e-3, 'at least one transformation exceeds the error bound'
+ assert success, "at least one point could not be transformed"
+ assert maxDiffResult < 1e-3, "at least one transformation exceeds the error bound"
###############################################################################
def test_transformer_image_no_srs():
- ds = gdal.GetDriverByName('MEM').Create('', 1, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 1, 1)
ds.SetGeoTransform([0, 10, 0, 0, 0, -10])
- tr = gdal.Transformer(ds, None, ['COORDINATE_OPERATION=+proj=unitconvert +xy_in=1 +xy_out=2'])
+ tr = gdal.Transformer(
+ ds, None, ["COORDINATE_OPERATION=+proj=unitconvert +xy_in=1 +xy_out=2"]
+ )
assert tr
(success, pnt) = tr.TransformPoint(0, 10, 20, 0)
assert success
assert pnt[0] == pytest.approx(50), pnt
assert pnt[1] == pytest.approx(-100), pnt
+
###############################################################################
# Test RPC_DEM_SRS by adding vertical component egm 96 geoid
+
def test_transformer_dem_overrride_srs():
- ds = gdal.Open('data/rpc.vrt')
- ds_dem = gdal.GetDriverByName('GTiff').Create('/vsimem/dem.tif', 100, 100, 1)
+ ds = gdal.Open("data/rpc.vrt")
+ ds_dem = gdal.GetDriverByName("GTiff").Create("/vsimem/dem.tif", 100, 100, 1)
sr = osr.SpatialReference()
sr.ImportFromEPSG(32652)
ds_dem.SetProjection(sr.ExportToWkt())
ds_dem.SetGeoTransform([213300, 200, 0, 4418700, 0, -200])
ds_dem.GetRasterBand(1).Fill(15)
ds_dem = None
- tr = gdal.Transformer(ds, None, ['METHOD=RPC', 'RPC_HEIGHT_SCALE=2', 'RPC_DEM=/vsimem/dem.tif', 'RPC_DEM_SRS=EPSG:32652+5773'])
+ tr = gdal.Transformer(
+ ds,
+ None,
+ [
+ "METHOD=RPC",
+ "RPC_HEIGHT_SCALE=2",
+ "RPC_DEM=/vsimem/dem.tif",
+ "RPC_DEM_SRS=EPSG:32652+5773",
+ ],
+ )
(success, pnt) = tr.TransformPoint(0, 0.5, 0.5, 0)
- assert success and pnt[0] == pytest.approx(125.64813723085801, abs=1e-4) and pnt[1] == pytest.approx(39.869345977927146, abs=1e-4), \
- 'got wrong forward transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(125.64813723085801, abs=1e-4)
+ and pnt[1] == pytest.approx(39.869345977927146, abs=1e-4)
+ ), "got wrong forward transform result."
(success, pnt) = tr.TransformPoint(1, pnt[0], pnt[1], pnt[2])
- assert success and pnt[0] == pytest.approx(0.5, abs=0.05) and pnt[1] == pytest.approx(0.5, abs=0.05), \
- 'got wrong reverse transform result.'
+ assert (
+ success
+ and pnt[0] == pytest.approx(0.5, abs=0.05)
+ and pnt[1] == pytest.approx(0.5, abs=0.05)
+ ), "got wrong reverse transform result."
- gdal.Unlink('/vsimem/dem.tif')
+ gdal.Unlink("/vsimem/dem.tif")
diff --git a/autotest/gcore/virtualmem.py b/autotest/gcore/virtualmem.py
index 6261fcf4f5c9..6946377159b9 100755
--- a/autotest/gcore/virtualmem.py
+++ b/autotest/gcore/virtualmem.py
@@ -31,20 +31,22 @@
import sys
-from osgeo import gdal
import pytest
+from osgeo import gdal
+
# All tests will be skipped if numpy unavailable or SKIP_VIRTUALMEM is set.
-numpy = pytest.importorskip('numpy')
-pytestmark = pytest.mark.skipif(gdal.GetConfigOption('SKIP_VIRTUALMEM'),
- reason='SKIP_VIRTUALMEM is set in config')
+numpy = pytest.importorskip("numpy")
+pytestmark = pytest.mark.skipif(
+ gdal.GetConfigOption("SKIP_VIRTUALMEM"), reason="SKIP_VIRTUALMEM is set in config"
+)
###############################################################################
# Test linear and tiled virtual mem interfaces in read-only mode
def test_virtualmem_1():
- ds = gdal.Open('../gdrivers/data/small_world.tif')
+ ds = gdal.Open("../gdrivers/data/small_world.tif")
bufxsize = 400
bufysize = 128
tilexsize = 128
@@ -53,22 +55,115 @@ def test_virtualmem_1():
ar = ds.ReadAsArray(0, 0, bufxsize, bufysize)
try:
- ar_flat_bsq = ds.GetVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, bufxsize, bufysize, gdal.GDT_Int16, [1, 2, 3], 1, 1024 * 1024, 0)
+ ar_flat_bsq = ds.GetVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ bufxsize,
+ bufysize,
+ gdal.GDT_Int16,
+ [1, 2, 3],
+ 1,
+ 1024 * 1024,
+ 0,
+ )
except:
- if not sys.platform.startswith('linux'):
+ if not sys.platform.startswith("linux"):
# Also try GetTiledVirtualMemArray() robustness (#5728)
try:
- ar_tiled_band1 = ds.GetRasterBand(1).GetTiledVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, tilexsize, tileysize, gdal.GDT_Int16, 1024 * 1024)
+ ar_tiled_band1 = ds.GetRasterBand(1).GetTiledVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ tilexsize,
+ tileysize,
+ gdal.GDT_Int16,
+ 1024 * 1024,
+ )
except:
pass
pytest.skip()
- ar_flat_band1 = ds.GetRasterBand(1).GetVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, bufxsize, bufysize, gdal.GDT_Int16, 1024 * 1024, 0)
- ar_flat_bip = ds.GetVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, bufxsize, bufysize, gdal.GDT_Int16, [1, 2, 3], 0, 1024 * 1024, 0)
- ar_tiled_band1 = ds.GetRasterBand(1).GetTiledVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, tilexsize, tileysize, gdal.GDT_Int16, 1024 * 1024)
- ar_tip = ds.GetTiledVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, tilexsize, tileysize, gdal.GDT_Int16, [1, 2, 3], gdal.GTO_TIP, 1024 * 1024)
- ar_bit = ds.GetTiledVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, tilexsize, tileysize, gdal.GDT_Int16, [1, 2, 3], gdal.GTO_BIT, 1024 * 1024)
- ar_bsq = ds.GetTiledVirtualMemArray(gdal.GF_Read, 0, 0, bufxsize, bufysize, tilexsize, tileysize, gdal.GDT_Int16, [1, 2, 3], gdal.GTO_BSQ, 1024 * 1024)
+ ar_flat_band1 = ds.GetRasterBand(1).GetVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ bufxsize,
+ bufysize,
+ gdal.GDT_Int16,
+ 1024 * 1024,
+ 0,
+ )
+ ar_flat_bip = ds.GetVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ bufxsize,
+ bufysize,
+ gdal.GDT_Int16,
+ [1, 2, 3],
+ 0,
+ 1024 * 1024,
+ 0,
+ )
+ ar_tiled_band1 = ds.GetRasterBand(1).GetTiledVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ tilexsize,
+ tileysize,
+ gdal.GDT_Int16,
+ 1024 * 1024,
+ )
+ ar_tip = ds.GetTiledVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ tilexsize,
+ tileysize,
+ gdal.GDT_Int16,
+ [1, 2, 3],
+ gdal.GTO_TIP,
+ 1024 * 1024,
+ )
+ ar_bit = ds.GetTiledVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ tilexsize,
+ tileysize,
+ gdal.GDT_Int16,
+ [1, 2, 3],
+ gdal.GTO_BIT,
+ 1024 * 1024,
+ )
+ ar_bsq = ds.GetTiledVirtualMemArray(
+ gdal.GF_Read,
+ 0,
+ 0,
+ bufxsize,
+ bufysize,
+ tilexsize,
+ tileysize,
+ gdal.GDT_Int16,
+ [1, 2, 3],
+ gdal.GTO_BSQ,
+ 1024 * 1024,
+ )
tilepercol = int((bufysize + tileysize - 1) / tileysize)
tileperrow = int((bufxsize + tilexsize - 1) / tilexsize)
@@ -83,14 +178,45 @@ def test_virtualmem_1():
for y in range(reqysize):
for x in range(reqxsize):
for band in range(3):
- assert ar_tip[tiley][tilex][y][x][band] == ar[band][tiley * tileysize + y][tilex * tilexsize + x]
- assert ar_tip[tiley][tilex][y][x][band] == ar_flat_bsq[band][tiley * tileysize + y][tilex * tilexsize + x]
- assert ar_tip[tiley][tilex][y][x][band] == ar_flat_bip[tiley * tileysize + y][tilex * tilexsize + x][band]
- assert ar_tip[tiley][tilex][y][x][band] == ar_bsq[band][tiley][tilex][y][x]
- assert ar_tip[tiley][tilex][y][x][band] == ar_bit[tiley][tilex][band][y][x]
+ assert (
+ ar_tip[tiley][tilex][y][x][band]
+ == ar[band][tiley * tileysize + y][tilex * tilexsize + x]
+ )
+ assert (
+ ar_tip[tiley][tilex][y][x][band]
+ == ar_flat_bsq[band][tiley * tileysize + y][
+ tilex * tilexsize + x
+ ]
+ )
+ assert (
+ ar_tip[tiley][tilex][y][x][band]
+ == ar_flat_bip[tiley * tileysize + y][
+ tilex * tilexsize + x
+ ][band]
+ )
+ assert (
+ ar_tip[tiley][tilex][y][x][band]
+ == ar_bsq[band][tiley][tilex][y][x]
+ )
+ assert (
+ ar_tip[tiley][tilex][y][x][band]
+ == ar_bit[tiley][tilex][band][y][x]
+ )
if band == 0:
- assert ar_flat_band1[tiley * tileysize + y][tilex * tilexsize + x] == ar_flat_bip[tiley * tileysize + y][tilex * tilexsize + x][0]
- assert ar_tiled_band1[tiley][tilex][y][x] == ar_flat_bip[tiley * tileysize + y][tilex * tilexsize + x][0]
+ assert (
+ ar_flat_band1[tiley * tileysize + y][
+ tilex * tilexsize + x
+ ]
+ == ar_flat_bip[tiley * tileysize + y][
+ tilex * tilexsize + x
+ ][0]
+ )
+ assert (
+ ar_tiled_band1[tiley][tilex][y][x]
+ == ar_flat_bip[tiley * tileysize + y][
+ tilex * tilexsize + x
+ ][0]
+ )
# We need to destroy the array before dataset destruction
ar_flat_band1 = None
@@ -104,9 +230,9 @@ def test_virtualmem_1():
###############################################################################
# Test write mode
-@pytest.mark.skipif(sys.platform != 'linux', reason='Incorrect platform')
+@pytest.mark.skipif(sys.platform != "linux", reason="Incorrect platform")
def test_virtualmem_2():
- ds = gdal.GetDriverByName('MEM').Create('', 100, 100, 1)
+ ds = gdal.GetDriverByName("MEM").Create("", 100, 100, 1)
ar = ds.GetVirtualMemArray(gdal.GF_Write)
ar.fill(255)
ar = None
@@ -120,10 +246,10 @@ def test_virtualmem_2():
###############################################################################
# Test virtual mem auto with a raw driver
-@pytest.mark.skipif(sys.platform != 'linux', reason='Incorrect platform')
+@pytest.mark.skipif(sys.platform != "linux", reason="Incorrect platform")
def test_virtualmem_3():
- for tmpfile in ['tmp/virtualmem_3.img', '/vsimem/virtualmem_3.img']:
- ds = gdal.GetDriverByName('EHdr').Create(tmpfile, 400, 300, 2)
+ for tmpfile in ["tmp/virtualmem_3.img", "/vsimem/virtualmem_3.img"]:
+ ds = gdal.GetDriverByName("EHdr").Create(tmpfile, 400, 300, 2)
ar1 = ds.GetRasterBand(1).GetVirtualMemAutoArray(gdal.GF_Write)
ar2 = ds.GetRasterBand(2).GetVirtualMemAutoArray(gdal.GF_Write)
for y in range(ds.RasterYSize):
@@ -149,19 +275,21 @@ def test_virtualmem_3():
ar2 = None
ds = None
- gdal.GetDriverByName('EHdr').Delete(tmpfile)
+ gdal.GetDriverByName("EHdr").Delete(tmpfile)
###############################################################################
# Test virtual mem auto with GTiff
-@pytest.mark.skipif(sys.platform != 'linux', reason='Incorrect platform')
+@pytest.mark.skipif(sys.platform != "linux", reason="Incorrect platform")
def test_virtualmem_4():
- tmpfile = 'tmp/virtualmem_4.tif'
- for option in ['INTERLEAVE=PIXEL', 'INTERLEAVE=BAND']:
+ tmpfile = "tmp/virtualmem_4.tif"
+ for option in ["INTERLEAVE=PIXEL", "INTERLEAVE=BAND"]:
gdal.Unlink(tmpfile)
- ds = gdal.GetDriverByName('GTiff').Create(tmpfile, 400, 301, 2, options=[option])
+ ds = gdal.GetDriverByName("GTiff").Create(
+ tmpfile, 400, 301, 2, options=[option]
+ )
ar1 = ds.GetRasterBand(1).GetVirtualMemAutoArray(gdal.GF_Write)
- if gdal.GetLastErrorMsg().find('mmap() failed') >= 0:
+ if gdal.GetLastErrorMsg().find("mmap() failed") >= 0:
ar1 = None
ds = None
pytest.skip()
@@ -204,4 +332,4 @@ def test_virtualmem_4():
ar2 = None
ds = None
- gdal.GetDriverByName('GTiff').Delete(tmpfile)
+ gdal.GetDriverByName("GTiff").Delete(tmpfile)
diff --git a/autotest/gcore/vrt_read.py b/autotest/gcore/vrt_read.py
index 9291023effeb..e69e85abbaf7 100755
--- a/autotest/gcore/vrt_read.py
+++ b/autotest/gcore/vrt_read.py
@@ -34,52 +34,53 @@
import shutil
import struct
+import gdaltest
import pytest
+import test_cli_utilities
-import gdaltest
from osgeo import gdal
-import test_cli_utilities
###############################################################################
# When imported build a list of units based on the files available.
init_list = [
- ('byte.vrt', 4672),
- ('int16.vrt', 4672),
- ('uint16.vrt', 4672),
- ('int32.vrt', 4672),
- ('uint32.vrt', 4672),
- ('float32.vrt', 4672),
- ('float64.vrt', 4672),
- ('cint16.vrt', 5028),
- ('cint32.vrt', 5028),
- ('cfloat32.vrt', 5028),
- ('cfloat64.vrt', 5028),
- ('msubwinbyte.vrt', 2699),
- ('utmsmall.vrt', 50054),
- ('byte_nearest_50pct.vrt', 1192),
- ('byte_averaged_50pct.vrt', 1152),
- ('byte_nearest_200pct.vrt', 18784),
- ('byte_averaged_200pct.vrt', 18784)
+ ("byte.vrt", 4672),
+ ("int16.vrt", 4672),
+ ("uint16.vrt", 4672),
+ ("int32.vrt", 4672),
+ ("uint32.vrt", 4672),
+ ("float32.vrt", 4672),
+ ("float64.vrt", 4672),
+ ("cint16.vrt", 5028),
+ ("cint32.vrt", 5028),
+ ("cfloat32.vrt", 5028),
+ ("cfloat64.vrt", 5028),
+ ("msubwinbyte.vrt", 2699),
+ ("utmsmall.vrt", 50054),
+ ("byte_nearest_50pct.vrt", 1192),
+ ("byte_averaged_50pct.vrt", 1152),
+ ("byte_nearest_200pct.vrt", 18784),
+ ("byte_averaged_200pct.vrt", 18784),
]
@pytest.mark.parametrize(
- 'filename,checksum',
+ "filename,checksum",
init_list,
- ids=[tup[0].split('.')[0] for tup in init_list],
+ ids=[tup[0].split(".")[0] for tup in init_list],
)
-@pytest.mark.require_driver('VRT')
+@pytest.mark.require_driver("VRT")
def test_vrt_open(filename, checksum):
- ut = gdaltest.GDALTest('VRT', filename, 1, checksum)
+ ut = gdaltest.GDALTest("VRT", filename, 1, checksum)
ut.testOpen()
###############################################################################
# The VRT references a non existing TIF file
-@pytest.mark.parametrize('filename', ['data/idontexist.vrt', 'data/idontexist2.vrt'])
+
+@pytest.mark.parametrize("filename", ["data/idontexist.vrt", "data/idontexist2.vrt"])
def test_vrt_read_non_existing_source(filename):
ds = gdal.Open(filename)
@@ -94,6 +95,7 @@ def test_vrt_read_non_existing_source(filename):
ds.GetRasterBand(1).GetMetadata()
ds.GetGCPs()
+
###############################################################################
# Test init of band data in case of cascaded VRT (ticket #2867)
@@ -102,43 +104,44 @@ def test_vrt_read_3():
driver_tif = gdal.GetDriverByName("GTIFF")
- output_dst = driver_tif.Create('tmp/test_mosaic1.tif', 100, 100, 3, gdal.GDT_Byte)
+ output_dst = driver_tif.Create("tmp/test_mosaic1.tif", 100, 100, 3, gdal.GDT_Byte)
output_dst.GetRasterBand(1).Fill(255)
output_dst = None
- output_dst = driver_tif.Create('tmp/test_mosaic2.tif', 100, 100, 3, gdal.GDT_Byte)
+ output_dst = driver_tif.Create("tmp/test_mosaic2.tif", 100, 100, 3, gdal.GDT_Byte)
output_dst.GetRasterBand(1).Fill(127)
output_dst = None
- ds = gdal.Open('data/test_mosaic.vrt')
+ ds = gdal.Open("data/test_mosaic.vrt")
# A simple Checksum() cannot detect if the fix works or not as
# Checksum() reads line per line, and we must use IRasterIO() on multi-line request
data = ds.GetRasterBand(1).ReadRaster(90, 0, 20, 100)
- got = struct.unpack('B' * 20 * 100, data)
+ got = struct.unpack("B" * 20 * 100, data)
for i in range(100):
- assert got[i * 20 + 9] == 255, ('at line %d, did not find 255' % i)
+ assert got[i * 20 + 9] == 255, "at line %d, did not find 255" % i
ds = None
- driver_tif.Delete('tmp/test_mosaic1.tif')
- driver_tif.Delete('tmp/test_mosaic2.tif')
+ driver_tif.Delete("tmp/test_mosaic1.tif")
+ driver_tif.Delete("tmp/test_mosaic2.tif")
###############################################################################
# Test complex source with complex data (#3977)
+
def test_vrt_read_4():
- np = pytest.importorskip('numpy')
+ np = pytest.importorskip("numpy")
data = np.zeros((1, 1), np.complex64)
- data[0, 0] = 1. + 3.j
+ data[0, 0] = 1.0 + 3.0j
- drv = gdal.GetDriverByName('GTiff')
+ drv = gdal.GetDriverByName("GTiff")
ds = drv.Create("/vsimem/test.tif", 1, 1, 1, gdal.GDT_CFloat32)
ds.GetRasterBand(1).WriteArray(data)
ds = None
- complex_xml = '''
+ complex_xml = """
/vsimem/test.tif
@@ -148,7 +151,7 @@ def test_vrt_read_4():
-'''
+"""
ds = gdal.Open(complex_xml)
scaleddata = ds.GetRasterBand(1).ReadAsArray()
@@ -157,8 +160,10 @@ def test_vrt_read_4():
gdal.Unlink("/vsimem/test.tif")
if scaleddata[0, 0].real != 5.0 or scaleddata[0, 0].imag != 9.0:
- print('scaleddata[0, 0]: %f %f' % (scaleddata[0, 0].real, scaleddata[0, 0].imag))
- pytest.fail('did not get expected value')
+ print(
+ "scaleddata[0, 0]: %f %f" % (scaleddata[0, 0].real, scaleddata[0, 0].imag)
+ )
+ pytest.fail("did not get expected value")
###############################################################################
@@ -167,12 +172,12 @@ def test_vrt_read_4():
def test_vrt_read_5():
- src_ds = gdal.Open('data/testserialization.asc')
- ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrt_read_5.vrt', src_ds)
+ src_ds = gdal.Open("data/testserialization.asc")
+ ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrt_read_5.vrt", src_ds)
src_ds = None
ds = None
- ds = gdal.Open('/vsimem/vrt_read_5.vrt')
+ ds = gdal.Open("/vsimem/vrt_read_5.vrt")
gcps = ds.GetGCPs()
assert len(gcps) == 2 and ds.GetGCPCount() == 2
@@ -187,9 +192,9 @@ def test_vrt_read_5():
assert ds.GetGCPProjection().find("WGS 84") != -1
band = ds.GetRasterBand(1)
- assert band.GetDescription() == 'MyDescription'
+ assert band.GetDescription() == "MyDescription"
- assert band.GetUnitType() == 'MyUnit'
+ assert band.GetUnitType() == "MyUnit"
assert band.GetOffset() == 1
@@ -197,7 +202,7 @@ def test_vrt_read_5():
assert band.GetRasterColorInterpretation() == gdal.GCI_PaletteIndex
- assert band.GetCategoryNames() == ['Cat1', 'Cat2']
+ assert band.GetCategoryNames() == ["Cat1", "Cat2"]
ct = band.GetColorTable()
assert ct.GetColorEntry(0) == (0, 0, 0, 255)
@@ -207,11 +212,17 @@ def test_vrt_read_5():
assert band.GetMinimum() == 2
- assert band.GetMetadata() == {'STATISTICS_MEAN': '1', 'STATISTICS_MINIMUM': '2', 'STATISTICS_MAXIMUM': '0', 'STATISTICS_STDDEV': '3'}
+ assert band.GetMetadata() == {
+ "STATISTICS_MEAN": "1",
+ "STATISTICS_MINIMUM": "2",
+ "STATISTICS_MAXIMUM": "0",
+ "STATISTICS_STDDEV": "3",
+ }
ds = None
- gdal.Unlink('/vsimem/vrt_read_5.vrt')
+ gdal.Unlink("/vsimem/vrt_read_5.vrt")
+
###############################################################################
# Test GetMinimum() and GetMaximum()
@@ -219,25 +230,26 @@ def test_vrt_read_5():
def test_vrt_read_6():
- gdal.Unlink('data/byte.tif.aux.xml')
- src_ds = gdal.Open('data/byte.tif')
- mem_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrt_read_6.tif', src_ds)
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrt_read_6.vrt', mem_ds)
+ gdal.Unlink("data/byte.tif.aux.xml")
+ src_ds = gdal.Open("data/byte.tif")
+ mem_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/vrt_read_6.tif", src_ds)
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrt_read_6.vrt", mem_ds)
- assert vrt_ds.GetRasterBand(1).GetMinimum() is None, 'got bad minimum value'
- assert vrt_ds.GetRasterBand(1).GetMaximum() is None, 'got bad maximum value'
+ assert vrt_ds.GetRasterBand(1).GetMinimum() is None, "got bad minimum value"
+ assert vrt_ds.GetRasterBand(1).GetMaximum() is None, "got bad maximum value"
# Now compute source statistics
mem_ds.GetRasterBand(1).ComputeStatistics(False)
- assert vrt_ds.GetRasterBand(1).GetMinimum() == 74, 'got bad minimum value'
- assert vrt_ds.GetRasterBand(1).GetMaximum() == 255, 'got bad maximum value'
+ assert vrt_ds.GetRasterBand(1).GetMinimum() == 74, "got bad minimum value"
+ assert vrt_ds.GetRasterBand(1).GetMaximum() == 255, "got bad maximum value"
mem_ds = None
vrt_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/vrt_read_6.tif')
- gdal.GetDriverByName('VRT').Delete('/vsimem/vrt_read_6.vrt')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/vrt_read_6.tif")
+ gdal.GetDriverByName("VRT").Delete("/vsimem/vrt_read_6.vrt")
+
###############################################################################
# Test GDALOpen() anti-recursion mechanism
@@ -247,7 +259,8 @@ def test_vrt_read_7():
filename = "/vsimem/vrt_read_7.vrt"
- content = """
+ content = (
+ """
%s
@@ -256,7 +269,9 @@ def test_vrt_read_7():
-""" % filename
+"""
+ % filename
+ )
gdal.FileFromMemBuffer(filename, content)
ds = gdal.Open(filename)
@@ -264,15 +279,16 @@ def test_vrt_read_7():
assert ds.GetRasterBand(1).Checksum() == 0
gdal.Unlink(filename)
+
###############################################################################
# Test ComputeRasterMinMax()
def test_vrt_read_8():
- src_ds = gdal.Open('data/byte.tif')
- mem_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrt_read_8.tif', src_ds)
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrt_read_8.vrt', mem_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ mem_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/vrt_read_8.tif", src_ds)
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrt_read_8.vrt", mem_ds)
vrt_minmax = vrt_ds.GetRasterBand(1).ComputeRasterMinMax()
mem_minmax = mem_ds.GetRasterBand(1).ComputeRasterMinMax()
@@ -280,20 +296,21 @@ def test_vrt_read_8():
mem_ds = None
vrt_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/vrt_read_8.tif')
- gdal.GetDriverByName('VRT').Delete('/vsimem/vrt_read_8.vrt')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/vrt_read_8.tif")
+ gdal.GetDriverByName("VRT").Delete("/vsimem/vrt_read_8.vrt")
assert vrt_minmax == mem_minmax
+
###############################################################################
# Test ComputeStatistics()
def test_vrt_read_9():
- src_ds = gdal.Open('data/byte.tif')
- mem_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrt_read_9.tif', src_ds)
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrt_read_9.vrt', mem_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ mem_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/vrt_read_9.tif", src_ds)
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrt_read_9.vrt", mem_ds)
vrt_stats = vrt_ds.GetRasterBand(1).ComputeStatistics(False)
mem_stats = mem_ds.GetRasterBand(1).ComputeStatistics(False)
@@ -301,20 +318,21 @@ def test_vrt_read_9():
mem_ds = None
vrt_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/vrt_read_9.tif')
- gdal.GetDriverByName('VRT').Delete('/vsimem/vrt_read_9.vrt')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/vrt_read_9.tif")
+ gdal.GetDriverByName("VRT").Delete("/vsimem/vrt_read_9.vrt")
assert vrt_stats == mem_stats
+
###############################################################################
# Test GetHistogram() & GetDefaultHistogram()
def test_vrt_read_10():
- src_ds = gdal.Open('data/byte.tif')
- mem_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrt_read_10.tif', src_ds)
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrt_read_10.vrt', mem_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ mem_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/vrt_read_10.tif", src_ds)
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrt_read_10.vrt", mem_ds)
vrt_hist = vrt_ds.GetRasterBand(1).GetHistogram()
mem_hist = mem_ds.GetRasterBand(1).GetHistogram()
@@ -322,42 +340,45 @@ def test_vrt_read_10():
mem_ds = None
vrt_ds = None
- f = gdal.VSIFOpenL('/vsimem/vrt_read_10.vrt', 'rb')
- content = gdal.VSIFReadL(1, 10000, f).decode('ascii')
+ f = gdal.VSIFOpenL("/vsimem/vrt_read_10.vrt", "rb")
+ content = gdal.VSIFReadL(1, 10000, f).decode("ascii")
gdal.VSIFCloseL(f)
assert vrt_hist == mem_hist
- assert '' in content
+ assert "" in content
# Single source optimization
for i in range(2):
- gdal.FileFromMemBuffer('/vsimem/vrt_read_10.vrt',
- """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrt_read_10.vrt",
+ """
vrt_read_10.tif
- """)
+ """,
+ )
- ds = gdal.Open('/vsimem/vrt_read_10.vrt')
+ ds = gdal.Open("/vsimem/vrt_read_10.vrt")
if i == 0:
ds.GetRasterBand(1).GetDefaultHistogram()
else:
ds.GetRasterBand(1).GetHistogram()
ds = None
- f = gdal.VSIFOpenL('/vsimem/vrt_read_10.vrt', 'rb')
- content = gdal.VSIFReadL(1, 10000, f).decode('ascii')
+ f = gdal.VSIFOpenL("/vsimem/vrt_read_10.vrt", "rb")
+ content = gdal.VSIFReadL(1, 10000, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert '' in content
+ assert "" in content
# Two sources general case
for i in range(2):
- gdal.FileFromMemBuffer('/vsimem/vrt_read_10.vrt',
- """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrt_read_10.vrt",
+ """
vrt_read_10.tif
@@ -366,23 +387,25 @@ def test_vrt_read_10():
vrt_read_10.tif
- """)
+ """,
+ )
- ds = gdal.Open('/vsimem/vrt_read_10.vrt')
+ ds = gdal.Open("/vsimem/vrt_read_10.vrt")
if i == 0:
ds.GetRasterBand(1).GetDefaultHistogram()
else:
ds.GetRasterBand(1).GetHistogram()
ds = None
- f = gdal.VSIFOpenL('/vsimem/vrt_read_10.vrt', 'rb')
- content = gdal.VSIFReadL(1, 10000, f).decode('ascii')
+ f = gdal.VSIFOpenL("/vsimem/vrt_read_10.vrt", "rb")
+ content = gdal.VSIFReadL(1, 10000, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert '' in content
+ assert "" in content
+
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/vrt_read_10.tif")
+ gdal.GetDriverByName("VRT").Delete("/vsimem/vrt_read_10.vrt")
- gdal.GetDriverByName('GTiff').Delete('/vsimem/vrt_read_10.tif')
- gdal.GetDriverByName('VRT').Delete('/vsimem/vrt_read_10.vrt')
###############################################################################
# Test resolving files from a symlinked vrt using relativeToVRT with an absolute symlink
@@ -394,19 +417,20 @@ def test_vrt_read_11():
pytest.skip()
try:
- os.remove('tmp/byte.vrt')
- print('Removed tmp/byte.vrt. Was not supposed to exist...')
+ os.remove("tmp/byte.vrt")
+ print("Removed tmp/byte.vrt. Was not supposed to exist...")
except OSError:
pass
- os.symlink(os.path.join(os.getcwd(), 'data/byte.vrt'), 'tmp/byte.vrt')
+ os.symlink(os.path.join(os.getcwd(), "data/byte.vrt"), "tmp/byte.vrt")
- ds = gdal.Open('tmp/byte.vrt')
+ ds = gdal.Open("tmp/byte.vrt")
- os.remove('tmp/byte.vrt')
+ os.remove("tmp/byte.vrt")
assert ds is not None
+
###############################################################################
# Test resolving files from a symlinked vrt using relativeToVRT
# with a relative symlink pointing to a relative symlink
@@ -418,19 +442,20 @@ def test_vrt_read_12():
pytest.skip()
try:
- os.remove('tmp/byte.vrt')
- print('Removed tmp/byte.vrt. Was not supposed to exist...')
+ os.remove("tmp/byte.vrt")
+ print("Removed tmp/byte.vrt. Was not supposed to exist...")
except OSError:
pass
- os.symlink('../data/byte.vrt', 'tmp/byte.vrt')
+ os.symlink("../data/byte.vrt", "tmp/byte.vrt")
- ds = gdal.Open('tmp/byte.vrt')
+ ds = gdal.Open("tmp/byte.vrt")
- os.remove('tmp/byte.vrt')
+ os.remove("tmp/byte.vrt")
assert ds is not None
+
###############################################################################
# Test resolving files from a symlinked vrt using relativeToVRT with a relative symlink
@@ -441,36 +466,38 @@ def test_vrt_read_13():
pytest.skip()
try:
- os.remove('tmp/byte.vrt')
- print('Removed tmp/byte.vrt. Was not supposed to exist...')
+ os.remove("tmp/byte.vrt")
+ print("Removed tmp/byte.vrt. Was not supposed to exist...")
except OSError:
pass
try:
- os.remove('tmp/other_byte.vrt')
- print('Removed tmp/other_byte.vrt. Was not supposed to exist...')
+ os.remove("tmp/other_byte.vrt")
+ print("Removed tmp/other_byte.vrt. Was not supposed to exist...")
except OSError:
pass
- os.symlink('../data/byte.vrt', 'tmp/byte.vrt')
- os.symlink('../tmp/byte.vrt', 'tmp/other_byte.vrt')
+ os.symlink("../data/byte.vrt", "tmp/byte.vrt")
+ os.symlink("../tmp/byte.vrt", "tmp/other_byte.vrt")
- ds = gdal.Open('tmp/other_byte.vrt')
+ ds = gdal.Open("tmp/other_byte.vrt")
- os.remove('tmp/other_byte.vrt')
- os.remove('tmp/byte.vrt')
+ os.remove("tmp/other_byte.vrt")
+ os.remove("tmp/byte.vrt")
assert ds is not None
+
###############################################################################
# Test ComputeStatistics() when the VRT is a subwindow of the source dataset (#5468)
def test_vrt_read_14():
- src_ds = gdal.Open('data/byte.tif')
- mem_ds = gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrt_read_14.tif', src_ds)
+ src_ds = gdal.Open("data/byte.tif")
+ mem_ds = gdal.GetDriverByName("GTiff").CreateCopy("/vsimem/vrt_read_14.tif", src_ds)
mem_ds.FlushCache() # hum this should not be necessary ideally
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
/vsimem/vrt_read_14.tif
@@ -480,24 +507,27 @@ def test_vrt_read_14():
-""")
+"""
+ )
vrt_stats = vrt_ds.GetRasterBand(1).ComputeStatistics(False)
mem_ds = None
vrt_ds = None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/vrt_read_14.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/vrt_read_14.tif")
assert vrt_stats[0] == 115.0 and vrt_stats[1] == 173.0
+
###############################################################################
# Test RasterIO() with resampling on SimpleSource
def test_vrt_read_15():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
data/byte.tif
@@ -514,18 +544,21 @@ def test_vrt_read_15():
-""")
+"""
+ )
cs = vrt_ds.GetRasterBand(1).Checksum()
assert cs == 1044
+
###############################################################################
# Test RasterIO() with resampling on ComplexSource
def test_vrt_read_16():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
data/byte.tif
@@ -542,18 +575,21 @@ def test_vrt_read_16():
-""")
+"""
+ )
cs = vrt_ds.GetRasterBand(1).Checksum()
assert cs == 1044
+
###############################################################################
# Test RasterIO() with resampling on AveragedSource
def test_vrt_read_17():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
data/byte.tif
@@ -563,30 +599,34 @@ def test_vrt_read_17():
-""")
+"""
+ )
# Note: AveragedSource with resampling does not give consistent results
# depending on the RasterIO() request
cs = vrt_ds.GetRasterBand(1).Checksum()
assert cs == 847
+
###############################################################################
# Test that relative path is correctly VRT-in-VRT
def test_vrt_read_18():
- vrt_ds = gdal.Open('data/vrtinvrt.vrt')
+ vrt_ds = gdal.Open("data/vrtinvrt.vrt")
cs = vrt_ds.GetRasterBand(1).Checksum()
assert cs == 4672
+
###############################################################################
# Test shared="0"
def test_vrt_read_19():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
data/byte.tif
@@ -594,16 +634,19 @@ def test_vrt_read_19():
-""")
+"""
+ )
- vrt2_ds = gdal.Open("""
+ vrt2_ds = gdal.Open(
+ """
data/byte.tif
1
-""")
+"""
+ )
cs = vrt_ds.GetRasterBand(1).Checksum()
assert cs == 4672
@@ -615,14 +658,16 @@ def test_vrt_read_19():
###############################################################################
# Test 2 level of VRT with shared="0"
+
def test_vrt_read_20():
if test_cli_utilities.get_gdalinfo_path() is None:
pytest.skip()
- shutil.copy('data/byte.tif', 'tmp')
+ shutil.copy("data/byte.tif", "tmp")
for i in range(3):
- open('tmp/byte1_%d.vrt' % (i + 1), 'wt').write("""
+ open("tmp/byte1_%d.vrt" % (i + 1), "wt").write(
+ """
byte.tif
@@ -632,8 +677,10 @@ def test_vrt_read_20():
- """)
- open('tmp/byte2.vrt', 'wt').write("""
+ """
+ )
+ open("tmp/byte2.vrt", "wt").write(
+ """
byte1_1.vrt
@@ -657,11 +704,21 @@ def test_vrt_read_20():
-""")
- ret = gdaltest.runexternal(test_cli_utilities.get_gdalinfo_path() + ' -checksum tmp/byte2.vrt --config VRT_SHARED_SOURCE 0 --config GDAL_MAX_DATASET_POOL_SIZE 3')
- assert 'Checksum=4672' in ret
-
- for f in ['tmp/byte.tif', 'tmp/byte1_1.vrt', 'tmp/byte1_2.vrt', 'tmp/byte1_3.vrt', 'tmp/byte2.vrt']:
+"""
+ )
+ ret = gdaltest.runexternal(
+ test_cli_utilities.get_gdalinfo_path()
+ + " -checksum tmp/byte2.vrt --config VRT_SHARED_SOURCE 0 --config GDAL_MAX_DATASET_POOL_SIZE 3"
+ )
+ assert "Checksum=4672" in ret
+
+ for f in [
+ "tmp/byte.tif",
+ "tmp/byte1_1.vrt",
+ "tmp/byte1_2.vrt",
+ "tmp/byte1_3.vrt",
+ "tmp/byte2.vrt",
+ ]:
os.unlink(f)
@@ -671,15 +728,17 @@ def test_vrt_read_20():
def test_vrt_read_21():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
data = ds.ReadRaster(0, 0, 20, 20, 400, 400)
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/byte.tif', 400, 400)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/byte.tif", 400, 400)
ds.WriteRaster(0, 0, 400, 400, data)
- ds.BuildOverviews('NEAR', [2])
+ ds.BuildOverviews("NEAR", [2])
ds = None
- gdal.FileFromMemBuffer('/vsimem/vrt_read_21.vrt', """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrt_read_21.vrt",
+ """
/vsimem/byte.tif
@@ -689,13 +748,16 @@ def test_vrt_read_21():
-""")
- ds = gdal.Open('/vsimem/vrt_read_21.vrt')
+""",
+ )
+ ds = gdal.Open("/vsimem/vrt_read_21.vrt")
assert ds.GetRasterBand(1).GetOverviewCount() == 1
data_ds_one_band = ds.ReadRaster(0, 0, 800, 800, 400, 400)
ds = None
- gdal.FileFromMemBuffer('/vsimem/vrt_read_21.vrt', """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrt_read_21.vrt",
+ """
/vsimem/byte.tif
@@ -715,11 +777,12 @@ def test_vrt_read_21():
10
-""")
- ds = gdal.Open('/vsimem/vrt_read_21.vrt')
+""",
+ )
+ ds = gdal.Open("/vsimem/vrt_read_21.vrt")
assert ds.GetRasterBand(1).GetOverviewCount() == 1
- ds = gdal.Open('/vsimem/vrt_read_21.vrt')
+ ds = gdal.Open("/vsimem/vrt_read_21.vrt")
ovr_band = ds.GetRasterBand(1).GetOverview(-1)
assert ovr_band is None
ovr_band = ds.GetRasterBand(1).GetOverview(1)
@@ -731,9 +794,11 @@ def test_vrt_read_21():
data = ds.ReadRaster(0, 0, 800, 800, 400, 400)
- assert data == data_ds_one_band + ds.GetRasterBand(2).ReadRaster(0, 0, 800, 800, 400, 400)
+ assert data == data_ds_one_band + ds.GetRasterBand(2).ReadRaster(
+ 0, 0, 800, 800, 400, 400
+ )
- mem_ds = gdal.GetDriverByName('MEM').Create('', 400, 400, 2)
+ mem_ds = gdal.GetDriverByName("MEM").Create("", 400, 400, 2)
mem_ds.WriteRaster(0, 0, 400, 400, data)
ref_cs = mem_ds.GetRasterBand(1).Checksum()
ref_cs2 = mem_ds.GetRasterBand(2).Checksum()
@@ -741,7 +806,7 @@ def test_vrt_read_21():
assert cs == ref_cs
assert cs2 == ref_cs2
- ds.BuildOverviews('NEAR', [2])
+ ds.BuildOverviews("NEAR", [2])
expected_cs = ds.GetRasterBand(1).GetOverview(0).Checksum()
expected_cs2 = ds.GetRasterBand(2).GetOverview(0).Checksum()
ds = None
@@ -749,9 +814,10 @@ def test_vrt_read_21():
assert cs == expected_cs
assert cs2 == expected_cs2
- gdal.Unlink('/vsimem/vrt_read_21.vrt')
- gdal.Unlink('/vsimem/vrt_read_21.vrt.ovr')
- gdal.Unlink('/vsimem/byte.tif')
+ gdal.Unlink("/vsimem/vrt_read_21.vrt")
+ gdal.Unlink("/vsimem/vrt_read_21.vrt.ovr")
+ gdal.Unlink("/vsimem/byte.tif")
+
###############################################################################
# Test that we honour NBITS with SimpleSource and ComplexSource
@@ -759,15 +825,16 @@ def test_vrt_read_21():
def test_vrt_read_22():
- ds = gdal.Open('data/byte.tif')
+ ds = gdal.Open("data/byte.tif")
data = ds.ReadRaster()
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/byte.tif', 20, 20)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/byte.tif", 20, 20)
ds.WriteRaster(0, 0, 20, 20, data)
ds.GetRasterBand(1).ComputeStatistics(False)
ds = None
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
6
@@ -777,7 +844,8 @@ def test_vrt_read_22():
1
-""")
+"""
+ )
assert ds.GetRasterBand(1).GetMinimum() == 63
assert ds.GetRasterBand(1).GetMaximum() == 63
@@ -787,10 +855,11 @@ def test_vrt_read_22():
assert ds.GetRasterBand(1).ComputeStatistics(False) == [63.0, 63.0, 63.0, 0.0]
data = ds.ReadRaster()
- got = struct.unpack('B' * 20 * 20, data)
+ got = struct.unpack("B" * 20 * 20, data)
assert got[0] == 63
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
6
@@ -800,7 +869,8 @@ def test_vrt_read_22():
1
-""")
+"""
+ )
assert ds.GetRasterBand(1).GetMinimum() == 63
assert ds.GetRasterBand(1).GetMaximum() == 63
@@ -809,7 +879,8 @@ def test_vrt_read_22():
assert ds.GetRasterBand(1).ComputeStatistics(False) == [63.0, 63.0, 63.0, 0.0]
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
6
@@ -820,7 +891,8 @@ def test_vrt_read_22():
10
-""")
+"""
+ )
assert ds.GetRasterBand(1).GetMinimum() is None
assert ds.GetRasterBand(1).GetMaximum() is None
@@ -829,8 +901,9 @@ def test_vrt_read_22():
assert ds.GetRasterBand(1).ComputeStatistics(False) == [63.0, 63.0, 63.0, 0.0]
- gdal.Unlink('/vsimem/byte.tif')
- gdal.Unlink('/vsimem/byte.tif.aux.xml')
+ gdal.Unlink("/vsimem/byte.tif")
+ gdal.Unlink("/vsimem/byte.tif.aux.xml")
+
###############################################################################
# Test non-nearest resampling on a VRT exposing a nodata value but with
@@ -839,45 +912,62 @@ def test_vrt_read_22():
def test_vrt_read_23():
- numpy = pytest.importorskip('numpy')
+ numpy = pytest.importorskip("numpy")
- mem_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/vrt_read_23.tif', 2, 1)
+ mem_ds = gdal.GetDriverByName("GTiff").Create("/vsimem/vrt_read_23.tif", 2, 1)
mem_ds.GetRasterBand(1).WriteArray(numpy.array([[0, 10]]))
mem_ds = None
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
0
/vsimem/vrt_read_23.tif
-""")
- got_ar = ds.GetRasterBand(1).ReadAsArray(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear)
+"""
+ )
+ got_ar = ds.GetRasterBand(1).ReadAsArray(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ )
assert list(got_ar[0]) == [0, 10, 10, 10]
- assert ds.ReadRaster(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear) == ds.GetRasterBand(1).ReadRaster(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear)
+ assert ds.ReadRaster(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ ) == ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ )
ds = None
- gdal.Unlink('/vsimem/vrt_read_23.tif')
+ gdal.Unlink("/vsimem/vrt_read_23.tif")
# Same but with nodata set on source band too
- mem_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/vrt_read_23.tif', 2, 1)
+ mem_ds = gdal.GetDriverByName("GTiff").Create("/vsimem/vrt_read_23.tif", 2, 1)
mem_ds.GetRasterBand(1).SetNoDataValue(0)
mem_ds.GetRasterBand(1).WriteArray(numpy.array([[0, 10]]))
mem_ds = None
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
0
/vsimem/vrt_read_23.tif
-""")
- got_ar = ds.GetRasterBand(1).ReadAsArray(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear)
+"""
+ )
+ got_ar = ds.GetRasterBand(1).ReadAsArray(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ )
assert list(got_ar[0]) == [0, 10, 10, 10]
- assert ds.ReadRaster(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear) == ds.GetRasterBand(1).ReadRaster(0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear)
+ assert ds.ReadRaster(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ ) == ds.GetRasterBand(1).ReadRaster(
+ 0, 0, 2, 1, 4, 1, resample_alg=gdal.GRIORA_Bilinear
+ )
ds = None
- gdal.Unlink('/vsimem/vrt_read_23.tif')
+ gdal.Unlink("/vsimem/vrt_read_23.tif")
+
###############################################################################
# Test floating point rounding issues when the VRT does a zoom-in
@@ -885,11 +975,11 @@ def test_vrt_read_23():
def test_vrt_read_24():
- ds = gdal.Open('data/zoom_in.vrt')
+ ds = gdal.Open("data/zoom_in.vrt")
data = ds.ReadRaster(34, 5, 66, 87)
ds = None
- ds = gdal.GetDriverByName('MEM').Create('', 66, 87)
+ ds = gdal.GetDriverByName("MEM").Create("", 66, 87)
ds.WriteRaster(0, 0, 66, 87, data)
cs = ds.GetRasterBand(1).Checksum()
ds = None
@@ -899,6 +989,7 @@ def test_vrt_read_24():
assert cs == 46612
ds = None
+
###############################################################################
# Test GetDataCoverageStatus()
@@ -906,10 +997,12 @@ def test_vrt_read_24():
def test_vrt_read_25():
import ogrtest
+
if not ogrtest.have_geos():
pytest.skip()
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
data/byte.tif
@@ -930,7 +1023,8 @@ def test_vrt_read_25():
-""")
+"""
+ )
(flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(0, 0, 20, 20)
assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA and pct == 100.0
@@ -942,16 +1036,22 @@ def test_vrt_read_25():
assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 0.0
(flags, pct) = ds.GetRasterBand(1).GetDataCoverageStatus(10, 10, 20, 20)
- assert flags == gdal.GDAL_DATA_COVERAGE_STATUS_DATA | gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY and pct == 25.0
+ assert (
+ flags
+ == gdal.GDAL_DATA_COVERAGE_STATUS_DATA | gdal.GDAL_DATA_COVERAGE_STATUS_EMPTY
+ and pct == 25.0
+ )
###############################################################################
# Test consistency of RasterIO() with resampling, that is extracting different
# sub-windows give consistent results
+
def test_vrt_read_26():
- vrt_ds = gdal.Open("""
+ vrt_ds = gdal.Open(
+ """
data/byte.tif
@@ -961,23 +1061,26 @@ def test_vrt_read_26():
-""")
+"""
+ )
full_data = vrt_ds.GetRasterBand(1).ReadRaster(0, 0, 22, 22)
- full_data = struct.unpack('B' * 22 * 22, full_data)
+ full_data = struct.unpack("B" * 22 * 22, full_data)
partial_data = vrt_ds.GetRasterBand(1).ReadRaster(1, 1, 1, 1)
- partial_data = struct.unpack('B' * 1 * 1, partial_data)
+ partial_data = struct.unpack("B" * 1 * 1, partial_data)
assert partial_data[0] == full_data[22 + 1]
+
###############################################################################
# Test fix for https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1553
def test_vrt_read_27():
- gdal.Open('data/empty_gcplist.vrt')
+ gdal.Open("data/empty_gcplist.vrt")
+
###############################################################################
# Test fix for https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1551
@@ -986,22 +1089,25 @@ def test_vrt_read_27():
def test_vrt_read_28():
with gdaltest.error_handler():
- ds = gdal.Open('')
+ ds = gdal.Open(
+ ''
+ )
assert ds is None
###############################################################################
# Check VRT source sharing and non-sharing situations (#6939)
+
def test_vrt_read_29():
- f = open('data/byte.tif')
+ f = open("data/byte.tif")
lst_before = sorted(gdaltest.get_opened_files())
if not lst_before:
pytest.skip()
f.close()
- gdal.Translate('tmp/vrt_read_29.tif', 'data/byte.tif')
+ gdal.Translate("tmp/vrt_read_29.tif", "data/byte.tif")
vrt_text = """
@@ -1053,7 +1159,8 @@ def test_vrt_read_29():
lst = sorted(gdaltest.get_opened_files())
assert len(lst) == len(lst_before) + 1
- gdal.Unlink('tmp/vrt_read_29.tif')
+ gdal.Unlink("tmp/vrt_read_29.tif")
+
###############################################################################
# Check VRT reading with DatasetRasterIO
@@ -1061,90 +1168,102 @@ def test_vrt_read_29():
def test_vrt_read_30():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
-""")
+"""
+ )
- data = ds.ReadRaster(0, 0, 2, 2, 2, 2, buf_pixel_space=3, buf_line_space=2 * 3, buf_band_space=1)
- got = struct.unpack('B' * 2 * 2 * 3, data)
+ data = ds.ReadRaster(
+ 0, 0, 2, 2, 2, 2, buf_pixel_space=3, buf_line_space=2 * 3, buf_band_space=1
+ )
+ got = struct.unpack("B" * 2 * 2 * 3, data)
for i in range(2 * 2 * 3):
assert got[i] == 0
ds = None
+
###############################################################################
# Check that we take into account intermediate data type demotion
def test_vrt_read_31():
- gdal.FileFromMemBuffer('/vsimem/in.asc',
- """ncols 2
+ gdal.FileFromMemBuffer(
+ "/vsimem/in.asc",
+ """ncols 2
nrows 2
xllcorner 0
yllcorner 0
dx 1
dy 1
-255 1
-254 256""")
+254 256""",
+ )
- ds = gdal.Translate('', '/vsimem/in.asc', outputType=gdal.GDT_Byte, format='VRT')
+ ds = gdal.Translate("", "/vsimem/in.asc", outputType=gdal.GDT_Byte, format="VRT")
data = ds.GetRasterBand(1).ReadRaster(0, 0, 2, 2, buf_type=gdal.GDT_Float32)
- got = struct.unpack('f' * 2 * 2, data)
+ got = struct.unpack("f" * 2 * 2, data)
assert got == (0, 1, 254, 255)
data = ds.ReadRaster(0, 0, 2, 2, buf_type=gdal.GDT_Float32)
- got = struct.unpack('f' * 2 * 2, data)
+ got = struct.unpack("f" * 2 * 2, data)
assert got == (0, 1, 254, 255)
ds = None
- gdal.Unlink('/vsimem/in.asc')
+ gdal.Unlink("/vsimem/in.asc")
###############################################################################
# Test reading a VRT where the NODATA & NoDataValue are slightly below the
# minimum float value (https://github.com/OSGeo/gdal/issues/1071)
+
def test_vrt_float32_with_nodata_slightly_below_float_min():
- shutil.copyfile('data/minfloat.tif', 'tmp/minfloat.tif')
- shutil.copyfile('data/minfloat_nodata_slightly_out_of_float.vrt',
- 'tmp/minfloat_nodata_slightly_out_of_float.vrt')
- gdal.Unlink('tmp/minfloat_nodata_slightly_out_of_float.vrt.aux.xml')
+ shutil.copyfile("data/minfloat.tif", "tmp/minfloat.tif")
+ shutil.copyfile(
+ "data/minfloat_nodata_slightly_out_of_float.vrt",
+ "tmp/minfloat_nodata_slightly_out_of_float.vrt",
+ )
+ gdal.Unlink("tmp/minfloat_nodata_slightly_out_of_float.vrt.aux.xml")
- ds = gdal.Open('tmp/minfloat_nodata_slightly_out_of_float.vrt')
+ ds = gdal.Open("tmp/minfloat_nodata_slightly_out_of_float.vrt")
nodata = ds.GetRasterBand(1).GetNoDataValue()
stats = ds.GetRasterBand(1).ComputeStatistics(False)
ds = None
- vrt_content = open('tmp/minfloat_nodata_slightly_out_of_float.vrt', 'rt').read()
+ vrt_content = open("tmp/minfloat_nodata_slightly_out_of_float.vrt", "rt").read()
- gdal.Unlink('tmp/minfloat.tif')
- gdal.Unlink('tmp/minfloat_nodata_slightly_out_of_float.vrt')
+ gdal.Unlink("tmp/minfloat.tif")
+ gdal.Unlink("tmp/minfloat_nodata_slightly_out_of_float.vrt")
# Check that the values were 'normalized' when regenerating the VRT
- assert '-3.402823466385289' not in vrt_content, \
- 'did not get expected nodata in rewritten VRT'
+ assert (
+ "-3.402823466385289" not in vrt_content
+ ), "did not get expected nodata in rewritten VRT"
- if nodata != -3.4028234663852886e+38:
+ if nodata != -3.4028234663852886e38:
print("%.18g" % nodata)
- pytest.fail('did not get expected nodata')
+ pytest.fail("did not get expected nodata")
- assert stats == [-3.0, 5.0, 1.0, 4.0], 'did not get expected stats'
+ assert stats == [-3.0, 5.0, 1.0, 4.0], "did not get expected stats"
###############################################################################
# Fix issue raised in https://lists.osgeo.org/pipermail/gdal-dev/2018-December/049415.html
+
def test_vrt_subpixel_offset():
- ds = gdal.Open('data/vrt_subpixel_offset.vrt')
+ ds = gdal.Open("data/vrt_subpixel_offset.vrt")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 4849
@@ -1153,9 +1272,10 @@ def test_vrt_subpixel_offset():
# Check bug fix of bug fix of
# https://lists.osgeo.org/pipermail/gdal-dev/2018-December/049415.html
+
def test_vrt_dstsize_larger_than_source():
- ds = gdal.Open('data/dstsize_larger_than_source.vrt')
+ ds = gdal.Open("data/dstsize_larger_than_source.vrt")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 33273
@@ -1207,7 +1327,7 @@ def test_vrt_no_explicit_dataAxisToSRSAxisMapping():
"""
ds = gdal.Open(vrt_text)
- assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [2,1]
+ assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [2, 1]
ds = None
@@ -1226,7 +1346,7 @@ def test_vrt_explicit_dataAxisToSRSAxisMapping_1_2():
"""
ds = gdal.Open(vrt_text)
- assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [1,2]
+ assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [1, 2]
ds = None
@@ -1265,8 +1385,12 @@ def test_vrt_shared_no_proxy_pool():
after = gdaltest.get_opened_files()
- if len(before) != len(after) and (gdaltest.is_travis_branch('trusty_clang') or gdaltest.is_travis_branch('trusty_32bit') or gdaltest.is_travis_branch('ubuntu_1604')):
- pytest.xfail('Mysterious failure')
+ if len(before) != len(after) and (
+ gdaltest.is_travis_branch("trusty_clang")
+ or gdaltest.is_travis_branch("trusty_32bit")
+ or gdaltest.is_travis_branch("ubuntu_1604")
+ ):
+ pytest.xfail("Mysterious failure")
assert len(before) == len(after)
@@ -1289,21 +1413,21 @@ def test_vrt_invalid_source_band():
def test_vrt_protocol():
with gdaltest.error_handler():
- assert not gdal.Open('vrt://')
- assert not gdal.Open('vrt://i_do_not_exist')
- assert not gdal.Open('vrt://i_do_not_exist?')
+ assert not gdal.Open("vrt://")
+ assert not gdal.Open("vrt://i_do_not_exist")
+ assert not gdal.Open("vrt://i_do_not_exist?")
- ds = gdal.Open('vrt://data/byte.tif')
+ ds = gdal.Open("vrt://data/byte.tif")
assert ds.RasterCount == 1
assert ds.GetRasterBand(1).Checksum() == 4672
with gdaltest.error_handler():
- assert not gdal.Open('vrt://data/byte.tif?foo=bar')
- assert not gdal.Open('vrt://data/byte.tif?bands=foo')
- assert not gdal.Open('vrt://data/byte.tif?bands=0')
- assert not gdal.Open('vrt://data/byte.tif?bands=2')
+ assert not gdal.Open("vrt://data/byte.tif?foo=bar")
+ assert not gdal.Open("vrt://data/byte.tif?bands=foo")
+ assert not gdal.Open("vrt://data/byte.tif?bands=0")
+ assert not gdal.Open("vrt://data/byte.tif?bands=2")
- ds = gdal.Open('vrt://data/byte.tif?bands=1,mask,1')
+ ds = gdal.Open("vrt://data/byte.tif?bands=1,mask,1")
assert ds.RasterCount == 3
assert ds.GetRasterBand(1).Checksum() == 4672
assert ds.GetRasterBand(2).Checksum() == 4873
@@ -1320,7 +1444,7 @@ def test_vrt_source_no_dstrect():
"""
- filename = '/vsimem/out.tif'
+ filename = "/vsimem/out.tif"
ds = gdal.Translate(filename, vrt_text)
assert ds.GetRasterBand(1).Checksum() == 4672
ds = None
@@ -1329,7 +1453,9 @@ def test_vrt_source_no_dstrect():
def test_vrt_dataset_rasterio_recursion_detection():
- gdal.FileFromMemBuffer('/vsimem/test.vrt', """
+ gdal.FileFromMemBuffer(
+ "/vsimem/test.vrt",
+ """
data/byte.tif
@@ -1343,12 +1469,14 @@ def test_vrt_dataset_rasterio_recursion_detection():
1
-""")
+""",
+ )
- ds = gdal.Open('/vsimem/test.vrt')
+ ds = gdal.Open("/vsimem/test.vrt")
with gdaltest.error_handler():
- ds.ReadRaster(0,0,20,20,10,10)
- gdal.Unlink('/vsimem/test.vrt')
+ ds.ReadRaster(0, 0, 20, 20, 10, 10)
+ gdal.Unlink("/vsimem/test.vrt")
+
def test_vrt_dataset_rasterio_recursion_detection_does_not_trigger():
@@ -1376,17 +1504,17 @@ def test_vrt_dataset_rasterio_recursion_detection_does_not_trigger():
"""
ds = gdal.Open(vrt_text)
- got_data = ds.ReadRaster(0,0,50,50,25,25,resample_alg=gdal.GRIORA_Cubic)
- ds = gdal.Open('data/rgbsmall.tif')
- ref_data = ds.ReadRaster(0,0,50,50,25,25,resample_alg=gdal.GRIORA_Cubic)
+ got_data = ds.ReadRaster(0, 0, 50, 50, 25, 25, resample_alg=gdal.GRIORA_Cubic)
+ ds = gdal.Open("data/rgbsmall.tif")
+ ref_data = ds.ReadRaster(0, 0, 50, 50, 25, 25, resample_alg=gdal.GRIORA_Cubic)
assert got_data == ref_data
def test_vrt_dataset_rasterio_non_nearest_resampling_source_with_ovr():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src.tif', 10, 10, 3)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src.tif", 10, 10, 3)
ds.GetRasterBand(1).Fill(255)
- ds.BuildOverviews('NONE', [2])
+ ds.BuildOverviews("NONE", [2])
ds.GetRasterBand(1).GetOverview(0).Fill(10)
ds = None
@@ -1424,22 +1552,22 @@ def test_vrt_dataset_rasterio_non_nearest_resampling_source_with_ovr():
"""
ds = gdal.Open(vrt_text)
- got_data = ds.ReadRaster(0,0,10,10,4,4)
- got_data = struct.unpack('B' * 4 * 4 * 3, got_data)
+ got_data = ds.ReadRaster(0, 0, 10, 10, 4, 4)
+ got_data = struct.unpack("B" * 4 * 4 * 3, got_data)
assert got_data[0] == 10
- got_data = ds.ReadRaster(0,0,10,10,4,4,resample_alg=gdal.GRIORA_Cubic)
- got_data = struct.unpack('B' * 4 * 4 * 3, got_data)
+ got_data = ds.ReadRaster(0, 0, 10, 10, 4, 4, resample_alg=gdal.GRIORA_Cubic)
+ got_data = struct.unpack("B" * 4 * 4 * 3, got_data)
assert got_data[0] == 10
- gdal.Unlink('/vsimem/src.tif')
+ gdal.Unlink("/vsimem/src.tif")
def test_vrt_implicit_ovr_with_hidenodatavalue():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src.tif', 256, 256, 3)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src.tif", 256, 256, 3)
ds.GetRasterBand(1).Fill(255)
- ds.BuildOverviews('NONE', [2])
+ ds.BuildOverviews("NONE", [2])
ds.GetRasterBand(1).GetOverview(0).Fill(10)
ds = None
@@ -1481,31 +1609,31 @@ def test_vrt_implicit_ovr_with_hidenodatavalue():
ds = gdal.Open(vrt_text)
assert ds.GetRasterBand(1).GetOverviewCount() == 1
- got_data = ds.ReadRaster(0,0,256,256,64,64)
- got_data = struct.unpack('B' * 64 * 64 * 3, got_data)
+ got_data = ds.ReadRaster(0, 0, 256, 256, 64, 64)
+ got_data = struct.unpack("B" * 64 * 64 * 3, got_data)
assert got_data[0] == 5
- assert got_data[32*64+32] == 10
+ assert got_data[32 * 64 + 32] == 10
- got_data = ds.GetRasterBand(1).ReadRaster(0,0,256,256,64,64)
- got_data = struct.unpack('B' * 64 * 64, got_data)
+ got_data = ds.GetRasterBand(1).ReadRaster(0, 0, 256, 256, 64, 64)
+ got_data = struct.unpack("B" * 64 * 64, got_data)
assert got_data[0] == 5
- assert got_data[32*64+32] == 10
+ assert got_data[32 * 64 + 32] == 10
- gdal.Unlink('/vsimem/src.tif')
+ gdal.Unlink("/vsimem/src.tif")
def test_vrt_usemaskband():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src1.tif', 3, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src1.tif", 3, 1)
ds.GetRasterBand(1).Fill(255)
ds.CreateMaskBand(0)
- ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, b'\xff')
+ ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, b"\xff")
ds = None
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src2.tif', 3, 1)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src2.tif", 3, 1)
ds.GetRasterBand(1).Fill(127)
ds.CreateMaskBand(0)
- ds.GetRasterBand(1).GetMaskBand().WriteRaster(1, 0, 1, 1, b'\xff')
+ ds.GetRasterBand(1).GetMaskBand().WriteRaster(1, 0, 1, 1, b"\xff")
ds = None
vrt_text = """
@@ -1545,25 +1673,29 @@ def test_vrt_usemaskband():
"""
ds = gdal.Open(vrt_text)
- assert struct.unpack('B' * 3, ds.ReadRaster()) == (255, 127, 0)
- assert struct.unpack('B' * 3, ds.GetRasterBand(1).GetMaskBand().ReadRaster()) == (255, 255, 0)
+ assert struct.unpack("B" * 3, ds.ReadRaster()) == (255, 127, 0)
+ assert struct.unpack("B" * 3, ds.GetRasterBand(1).GetMaskBand().ReadRaster()) == (
+ 255,
+ 255,
+ 0,
+ )
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src1.tif')
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src2.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src1.tif")
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src2.tif")
def test_vrt_usemaskband_alpha():
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src1.tif', 3, 1, 2)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src1.tif", 3, 1, 2)
ds.GetRasterBand(1).Fill(255)
- ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, b'\xff')
+ ds.GetRasterBand(1).GetMaskBand().WriteRaster(0, 0, 1, 1, b"\xff")
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
- ds.GetRasterBand(2).WriteRaster(0, 0, 1, 1, b'\xff')
+ ds.GetRasterBand(2).WriteRaster(0, 0, 1, 1, b"\xff")
- ds = gdal.GetDriverByName('GTiff').Create('/vsimem/src2.tif', 3, 1, 2)
+ ds = gdal.GetDriverByName("GTiff").Create("/vsimem/src2.tif", 3, 1, 2)
ds.GetRasterBand(1).Fill(127)
ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
- ds.GetRasterBand(2).WriteRaster(1, 0, 1, 1, b'\xff')
+ ds.GetRasterBand(2).WriteRaster(1, 0, 1, 1, b"\xff")
ds = None
vrt_text = """
@@ -1602,11 +1734,11 @@ def test_vrt_usemaskband_alpha():
"""
ds = gdal.Open(vrt_text)
- assert struct.unpack('B' * 3, ds.GetRasterBand(1).ReadRaster()) == (255, 127, 0)
- assert struct.unpack('B' * 3, ds.GetRasterBand(2).ReadRaster()) == (255, 255, 0)
+ assert struct.unpack("B" * 3, ds.GetRasterBand(1).ReadRaster()) == (255, 127, 0)
+ assert struct.unpack("B" * 3, ds.GetRasterBand(2).ReadRaster()) == (255, 255, 0)
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src1.tif')
- gdal.GetDriverByName('GTiff').Delete('/vsimem/src2.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src1.tif")
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/src2.tif")
def test_vrt_check_dont_open_unneeded_source():
@@ -1629,14 +1761,16 @@ def test_vrt_check_dont_open_unneeded_source():
"""
- tmpfilename = '/vsimem/tmp.vrt'
+ tmpfilename = "/vsimem/tmp.vrt"
gdal.FileFromMemBuffer(tmpfilename, vrt)
try:
- ds = gdal.Translate('', tmpfilename, options = '-of MEM -srcwin 0 0 10 10')
+ ds = gdal.Translate("", tmpfilename, options="-of MEM -srcwin 0 0 10 10")
assert ds is not None
with gdaltest.error_handler():
- ds = gdal.Translate('', tmpfilename, options = '-of MEM -srcwin 0 0 10.1 10.1')
+ ds = gdal.Translate(
+ "", tmpfilename, options="-of MEM -srcwin 0 0 10.1 10.1"
+ )
assert ds is None
finally:
gdal.Unlink(tmpfilename)
@@ -1664,14 +1798,16 @@ def test_vrt_check_dont_open_unneeded_source_with_complex_source_nodata():
"""
- tmpfilename = '/vsimem/tmp.vrt'
+ tmpfilename = "/vsimem/tmp.vrt"
gdal.FileFromMemBuffer(tmpfilename, vrt)
try:
- ds = gdal.Translate('', tmpfilename, options = '-of MEM -srcwin 0 0 10 10')
+ ds = gdal.Translate("", tmpfilename, options="-of MEM -srcwin 0 0 10 10")
assert ds is not None
with gdaltest.error_handler():
- ds = gdal.Translate('', tmpfilename, options = '-of MEM -srcwin 0 0 10.1 10.1')
+ ds = gdal.Translate(
+ "", tmpfilename, options="-of MEM -srcwin 0 0 10.1 10.1"
+ )
assert ds is None
finally:
gdal.Unlink(tmpfilename)
@@ -1679,7 +1815,7 @@ def test_vrt_check_dont_open_unneeded_source_with_complex_source_nodata():
def test_vrt_nodata_and_implicit_ovr_recursion_issue():
- """ Tests scenario https://github.com/OSGeo/gdal/issues/4620#issuecomment-938636360 """
+ """Tests scenario https://github.com/OSGeo/gdal/issues/4620#issuecomment-938636360"""
vrt = """
@@ -1693,7 +1829,7 @@ def test_vrt_nodata_and_implicit_ovr_recursion_issue():
2
"""
- tmpfilename = '/vsimem/tmp.vrt'
+ tmpfilename = "/vsimem/tmp.vrt"
with gdaltest.tempfile(tmpfilename, vrt):
ds = gdal.Open(tmpfilename)
assert ds.GetRasterBand(1).GetOverview(0).Checksum() == 1152
@@ -1701,23 +1837,23 @@ def test_vrt_nodata_and_implicit_ovr_recursion_issue():
def test_vrt_statistics_and_implicit_ovr_recursion_issue():
- """ Tests scenario https://github.com/OSGeo/gdal/issues/4661 """
+ """Tests scenario https://github.com/OSGeo/gdal/issues/4661"""
- gdal.Translate('/vsimem/test.tif', 'data/uint16.tif', width = 2048)
- vrt_ds = gdal.Translate('', '/vsimem/test.tif', format='VRT')
- with gdaltest.config_option('VRT_VIRTUAL_OVERVIEWS', 'YES'):
- vrt_ds.BuildOverviews('NEAR', [2, 4])
+ gdal.Translate("/vsimem/test.tif", "data/uint16.tif", width=2048)
+ vrt_ds = gdal.Translate("", "/vsimem/test.tif", format="VRT")
+ with gdaltest.config_option("VRT_VIRTUAL_OVERVIEWS", "YES"):
+ vrt_ds.BuildOverviews("NEAR", [2, 4])
- stats = vrt_ds.GetRasterBand(1).ComputeStatistics(True) # approx stats
- assert gdal.GetLastErrorMsg() == ''
+ stats = vrt_ds.GetRasterBand(1).ComputeStatistics(True) # approx stats
+ assert gdal.GetLastErrorMsg() == ""
assert stats[0] >= 74 and stats[0] <= 90
- min_max = vrt_ds.GetRasterBand(1).ComputeRasterMinMax(True) # approx stats
- assert gdal.GetLastErrorMsg() == ''
+ min_max = vrt_ds.GetRasterBand(1).ComputeRasterMinMax(True) # approx stats
+ assert gdal.GetLastErrorMsg() == ""
assert min_max[0] >= 74 and min_max[0] <= 90
- hist = vrt_ds.GetRasterBand(1).GetHistogram(True) # approx stats
- assert gdal.GetLastErrorMsg() == ''
+ hist = vrt_ds.GetRasterBand(1).GetHistogram(True) # approx stats
+ assert gdal.GetLastErrorMsg() == ""
assert hist is not None
- gdal.GetDriverByName('GTiff').Delete('/vsimem/test.tif')
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/test.tif")
diff --git a/autotest/gcore/vrtmisc.py b/autotest/gcore/vrtmisc.py
index 34bcf766b06f..40a4bd87973e 100755
--- a/autotest/gcore/vrtmisc.py
+++ b/autotest/gcore/vrtmisc.py
@@ -29,13 +29,13 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-import gdaltest
import os
import shutil
import sys
-from osgeo import gdal
-from osgeo import osr
+import gdaltest
+
+from osgeo import gdal, osr
###############################################################################
# Test linear scaling
@@ -43,11 +43,12 @@
def test_vrtmisc_1():
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 74 255 0 255')
+ ds = gdal.Translate("", "data/byte.tif", options="-of MEM -scale 74 255 0 255")
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 4323, 'did not get expected checksum'
+ assert cs == 4323, "did not get expected checksum"
+
###############################################################################
# Test power scaling
@@ -55,11 +56,14 @@ def test_vrtmisc_1():
def test_vrtmisc_2():
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 74 255 0 255 -exponent 2.2')
+ ds = gdal.Translate(
+ "", "data/byte.tif", options="-of MEM -scale 74 255 0 255 -exponent 2.2"
+ )
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 4159, 'did not get expected checksum'
+ assert cs == 4159, "did not get expected checksum"
+
###############################################################################
# Test power scaling (not in VRT file)
@@ -67,7 +71,8 @@ def test_vrtmisc_2():
def test_vrtmisc_3():
- ds = gdal.Open("""
+ ds = gdal.Open(
+ """
data/byte.tif
@@ -77,11 +82,13 @@ def test_vrtmisc_3():
255
-""")
+"""
+ )
cs = ds.GetRasterBand(1).Checksum()
ds = None
- assert cs == 4159, 'did not get expected checksum'
+ assert cs == 4159, "did not get expected checksum"
+
###############################################################################
# Test multi-band linear scaling with a single -scale occurrence.
@@ -90,13 +97,16 @@ def test_vrtmisc_3():
def test_vrtmisc_4():
# -scale specified once applies to all bands
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 74 255 0 255 -b 1 -b 1')
+ ds = gdal.Translate(
+ "", "data/byte.tif", options="-of MEM -scale 74 255 0 255 -b 1 -b 1"
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4323, 'did not get expected checksum'
- assert cs2 == 4323, 'did not get expected checksum'
+ assert cs1 == 4323, "did not get expected checksum"
+ assert cs2 == 4323, "did not get expected checksum"
+
###############################################################################
# Test multi-band linear scaling with -scale_XX syntax
@@ -105,13 +115,16 @@ def test_vrtmisc_4():
def test_vrtmisc_5():
# -scale_2 applies to band 2 only
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale_2 74 255 0 255 -b 1 -b 1')
+ ds = gdal.Translate(
+ "", "data/byte.tif", options="-of MEM -scale_2 74 255 0 255 -b 1 -b 1"
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4672, 'did not get expected checksum'
- assert cs2 == 4323, 'did not get expected checksum'
+ assert cs1 == 4672, "did not get expected checksum"
+ assert cs2 == 4323, "did not get expected checksum"
+
###############################################################################
# Test multi-band linear scaling with repeated -scale syntax
@@ -120,13 +133,18 @@ def test_vrtmisc_5():
def test_vrtmisc_6():
# -scale repeated as many times as output band number
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 0 255 0 255 -scale 74 255 0 255 -b 1 -b 1')
+ ds = gdal.Translate(
+ "",
+ "data/byte.tif",
+ options="-of MEM -scale 0 255 0 255 -scale 74 255 0 255 -b 1 -b 1",
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4672, 'did not get expected checksum'
- assert cs2 == 4323, 'did not get expected checksum'
+ assert cs1 == 4672, "did not get expected checksum"
+ assert cs2 == 4323, "did not get expected checksum"
+
###############################################################################
# Test multi-band power scaling with a single -scale and -exponent occurrence.
@@ -135,13 +153,18 @@ def test_vrtmisc_6():
def test_vrtmisc_7():
# -scale and -exponent, specified once, apply to all bands
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 74 255 0 255 -exponent 2.2 -b 1 -b 1')
+ ds = gdal.Translate(
+ "",
+ "data/byte.tif",
+ options="-of MEM -scale 74 255 0 255 -exponent 2.2 -b 1 -b 1",
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4159, 'did not get expected checksum'
- assert cs2 == 4159, 'did not get expected checksum'
+ assert cs1 == 4159, "did not get expected checksum"
+ assert cs2 == 4159, "did not get expected checksum"
+
###############################################################################
# Test multi-band power scaling with -scale_XX and -exponent_XX syntax
@@ -150,13 +173,18 @@ def test_vrtmisc_7():
def test_vrtmisc_8():
# -scale_2 and -exponent_2 apply to band 2 only
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale_2 74 255 0 255 -exponent_2 2.2 -b 1 -b 1')
+ ds = gdal.Translate(
+ "",
+ "data/byte.tif",
+ options="-of MEM -scale_2 74 255 0 255 -exponent_2 2.2 -b 1 -b 1",
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4672, 'did not get expected checksum'
- assert cs2 == 4159, 'did not get expected checksum'
+ assert cs1 == 4672, "did not get expected checksum"
+ assert cs2 == 4159, "did not get expected checksum"
+
###############################################################################
# Test multi-band linear scaling with repeated -scale and -exponent syntax
@@ -165,13 +193,18 @@ def test_vrtmisc_8():
def test_vrtmisc_9():
# -scale and -exponent repeated as many times as output band number
- ds = gdal.Translate('', 'data/byte.tif', options='-of MEM -scale 0 255 0 255 -scale 74 255 0 255 -exponent 1 -exponent 2.2 -b 1 -b 1')
+ ds = gdal.Translate(
+ "",
+ "data/byte.tif",
+ options="-of MEM -scale 0 255 0 255 -scale 74 255 0 255 -exponent 1 -exponent 2.2 -b 1 -b 1",
+ )
cs1 = ds.GetRasterBand(1).Checksum()
cs2 = ds.GetRasterBand(2).Checksum()
ds = None
- assert cs1 == 4672, 'did not get expected checksum'
- assert cs2 == 4159, 'did not get expected checksum'
+ assert cs1 == 4672, "did not get expected checksum"
+ assert cs2 == 4159, "did not get expected checksum"
+
###############################################################################
# Test metadata serialization (#5944)
@@ -179,8 +212,9 @@ def test_vrtmisc_9():
def test_vrtmisc_10():
- gdal.FileFromMemBuffer("/vsimem/vrtmisc_10.vrt",
- """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrtmisc_10.vrt",
+ """
bar
@@ -200,7 +234,8 @@ def test_vrtmisc_10():
-""")
+""",
+ )
ds = gdal.Open("/vsimem/vrtmisc_10.vrt", gdal.GA_Update)
# to trigger a flush
@@ -208,28 +243,29 @@ def test_vrtmisc_10():
ds = None
ds = gdal.Open("/vsimem/vrtmisc_10.vrt", gdal.GA_Update)
- assert ds.GetMetadata() == {'foo': 'bar'}
- assert ds.GetMetadata('some_domain') == {'bar': 'baz'}
- assert ds.GetMetadata_List('xml:a_xml_domain')[0] == '\n'
+ assert ds.GetMetadata() == {"foo": "bar"}
+ assert ds.GetMetadata("some_domain") == {"bar": "baz"}
+ assert ds.GetMetadata_List("xml:a_xml_domain")[0] == "\n"
# Empty default domain
ds.SetMetadata({})
ds = None
ds = gdal.Open("/vsimem/vrtmisc_10.vrt")
assert ds.GetMetadata() == {}
- assert ds.GetMetadata('some_domain') == {'bar': 'baz'}
- assert ds.GetMetadata_List('xml:a_xml_domain')[0] == '\n'
+ assert ds.GetMetadata("some_domain") == {"bar": "baz"}
+ assert ds.GetMetadata_List("xml:a_xml_domain")[0] == "\n"
ds = None
gdal.Unlink("/vsimem/vrtmisc_10.vrt")
+
###############################################################################
# Test relativeToVRT is preserved during re-serialization (#5985)
def test_vrtmisc_11():
- f = open('tmp/vrtmisc_11.vrt', 'wt')
+ f = open("tmp/vrtmisc_11.vrt", "wt")
f.write(
"""
@@ -242,7 +278,8 @@ def test_vrtmisc_11():
-""")
+"""
+ )
f.close()
ds = gdal.Open("tmp/vrtmisc_11.vrt", gdal.GA_Update)
@@ -250,20 +287,22 @@ def test_vrtmisc_11():
ds.SetMetadata(ds.GetMetadata())
ds = None
- data = open('tmp/vrtmisc_11.vrt', 'rt').read()
+ data = open("tmp/vrtmisc_11.vrt", "rt").read()
gdal.Unlink("tmp/vrtmisc_11.vrt")
assert '../data/byte.tif' in data
+
###############################################################################
# Test set/delete nodata
def test_vrtmisc_12():
- gdal.FileFromMemBuffer("/vsimem/vrtmisc_12.vrt",
- """
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrtmisc_12.vrt",
+ """
foo.tif
@@ -274,7 +313,8 @@ def test_vrtmisc_12():
-""")
+""",
+ )
ds = gdal.Open("/vsimem/vrtmisc_12.vrt", gdal.GA_Update)
ds.GetRasterBand(1).SetNoDataValue(123)
@@ -291,15 +331,17 @@ def test_vrtmisc_12():
gdal.Unlink("/vsimem/vrtmisc_12.vrt")
+
###############################################################################
# Test CreateCopy() preserve NBITS
def test_vrtmisc_13():
- ds = gdal.Open('data/oddsize1bit.tif')
- out_ds = gdal.GetDriverByName('VRT').CreateCopy('', ds)
- assert out_ds.GetRasterBand(1).GetMetadataItem('NBITS', 'IMAGE_STRUCTURE') == '1'
+ ds = gdal.Open("data/oddsize1bit.tif")
+ out_ds = gdal.GetDriverByName("VRT").CreateCopy("", ds)
+ assert out_ds.GetRasterBand(1).GetMetadataItem("NBITS", "IMAGE_STRUCTURE") == "1"
+
###############################################################################
# Test SrcRect/DstRect are serialized as integers
@@ -307,31 +349,46 @@ def test_vrtmisc_13():
def test_vrtmisc_14():
- src_ds = gdal.GetDriverByName('GTiff').Create('/vsimem/vrtmisc_14_src.tif', 123456789, 1, options=['SPARSE_OK=YES', 'TILED=YES'])
- gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrtmisc_14.vrt', src_ds)
+ src_ds = gdal.GetDriverByName("GTiff").Create(
+ "/vsimem/vrtmisc_14_src.tif",
+ 123456789,
+ 1,
+ options=["SPARSE_OK=YES", "TILED=YES"],
+ )
+ gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrtmisc_14.vrt", src_ds)
src_ds = None
- fp = gdal.VSIFOpenL('/vsimem/vrtmisc_14.vrt', 'rb')
- content = gdal.VSIFReadL(1, 10000, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsimem/vrtmisc_14.vrt", "rb")
+ content = gdal.VSIFReadL(1, 10000, fp).decode("latin1")
gdal.VSIFCloseL(fp)
gdal.Unlink("/vsimem/vrtmisc_14_src.tif")
gdal.Unlink("/vsimem/vrtmisc_14.vrt")
- assert ('
+ gdal.FileFromMemBuffer(
+ "/vsimem/vrtmisc_16.vrt",
+ """
0
@@ -388,13 +458,17 @@ def test_vrtmisc_16():
0
-""")
- gdal.GetDriverByName('GTiff').CreateCopy('/vsimem/vrtmisc_16.tif', gdal.Open('/vsimem/vrtmisc_16.vrt'))
- ds = gdal.Open('/vsimem/vrtmisc_16.tif')
+""",
+ )
+ gdal.GetDriverByName("GTiff").CreateCopy(
+ "/vsimem/vrtmisc_16.tif", gdal.Open("/vsimem/vrtmisc_16.vrt")
+ )
+ ds = gdal.Open("/vsimem/vrtmisc_16.tif")
cs = ds.GetRasterBand(1).Checksum()
assert cs == 206
- gdal.Unlink('/vsimem/vrtmisc_16.tif')
- gdal.Unlink('/vsimem/vrtmisc_16.vrt')
+ gdal.Unlink("/vsimem/vrtmisc_16.tif")
+ gdal.Unlink("/vsimem/vrtmisc_16.vrt")
+
###############################################################################
# Check that the serialized xml:VRT doesn't include itself (#6767)
@@ -402,14 +476,15 @@ def test_vrtmisc_16():
def test_vrtmisc_17():
- ds = gdal.Open('data/byte.tif')
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrtmisc_17.vrt', ds)
- xml_vrt = vrt_ds.GetMetadata('xml:VRT')[0]
+ ds = gdal.Open("data/byte.tif")
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrtmisc_17.vrt", ds)
+ xml_vrt = vrt_ds.GetMetadata("xml:VRT")[0]
vrt_ds = None
- gdal.Unlink('/vsimem/vrtmisc_17.vrt')
+ gdal.Unlink("/vsimem/vrtmisc_17.vrt")
+
+ assert "xml:VRT" not in xml_vrt
- assert 'xml:VRT' not in xml_vrt
###############################################################################
# Check GetMetadata('xml:VRT') behaviour on a in-memory VRT copied from a VRT
@@ -417,14 +492,18 @@ def test_vrtmisc_17():
def test_vrtmisc_18():
- ds = gdal.Open('data/byte.vrt')
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('', ds)
- xml_vrt = vrt_ds.GetMetadata('xml:VRT')[0]
- assert gdal.GetLastErrorMsg() == ''
+ ds = gdal.Open("data/byte.vrt")
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("", ds)
+ xml_vrt = vrt_ds.GetMetadata("xml:VRT")[0]
+ assert gdal.GetLastErrorMsg() == ""
vrt_ds = None
- assert ('data/byte.tif' in xml_vrt or \
- 'data\\byte.tif' in xml_vrt)
+ assert (
+ 'data/byte.tif' in xml_vrt
+ or 'data\\byte.tif'
+ in xml_vrt
+ )
+
###############################################################################
# Check RAT support
@@ -432,30 +511,32 @@ def test_vrtmisc_18():
def test_vrtmisc_rat():
- ds = gdal.Translate('/vsimem/vrtmisc_rat.tif', 'data/byte.tif', format='MEM')
+ ds = gdal.Translate("/vsimem/vrtmisc_rat.tif", "data/byte.tif", format="MEM")
rat = gdal.RasterAttributeTable()
rat.CreateColumn("Ints", gdal.GFT_Integer, gdal.GFU_Generic)
ds.GetRasterBand(1).SetDefaultRAT(rat)
- vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('/vsimem/vrtmisc_rat.vrt', ds)
+ vrt_ds = gdal.GetDriverByName("VRT").CreateCopy("/vsimem/vrtmisc_rat.vrt", ds)
- xml_vrt = vrt_ds.GetMetadata('xml:VRT')[0]
- assert gdal.GetLastErrorMsg() == ''
+ xml_vrt = vrt_ds.GetMetadata("xml:VRT")[0]
+ assert gdal.GetLastErrorMsg() == ""
vrt_ds = None
assert '' in xml_vrt
- vrt_ds = gdal.Translate('/vsimem/vrtmisc_rat.vrt', ds, format='VRT', srcWin=[0, 0, 1, 1])
+ vrt_ds = gdal.Translate(
+ "/vsimem/vrtmisc_rat.vrt", ds, format="VRT", srcWin=[0, 0, 1, 1]
+ )
- xml_vrt = vrt_ds.GetMetadata('xml:VRT')[0]
- assert gdal.GetLastErrorMsg() == ''
+ xml_vrt = vrt_ds.GetMetadata("xml:VRT")[0]
+ assert gdal.GetLastErrorMsg() == ""
vrt_ds = None
assert '' in xml_vrt
ds = None
- vrt_ds = gdal.Open('/vsimem/vrtmisc_rat.vrt', gdal.GA_Update)
+ vrt_ds = gdal.Open("/vsimem/vrtmisc_rat.vrt", gdal.GA_Update)
rat = vrt_ds.GetRasterBand(1).GetDefaultRAT()
assert rat is not None and rat.GetColumnCount() == 1
vrt_ds.GetRasterBand(1).SetDefaultRAT(None)
@@ -464,8 +545,9 @@ def test_vrtmisc_rat():
ds = None
- gdal.Unlink('/vsimem/vrtmisc_rat.vrt')
- gdal.Unlink('/vsimem/vrtmisc_rat.tif')
+ gdal.Unlink("/vsimem/vrtmisc_rat.vrt")
+ gdal.Unlink("/vsimem/vrtmisc_rat.tif")
+
###############################################################################
# Check ColorTable support
@@ -473,7 +555,7 @@ def test_vrtmisc_rat():
def test_vrtmisc_colortable():
- ds = gdal.Translate('', 'data/byte.tif', format='VRT')
+ ds = gdal.Translate("", "data/byte.tif", format="VRT")
ct = gdal.ColorTable()
ct.SetColorEntry(0, (255, 255, 255, 255))
ds.GetRasterBand(1).SetColorTable(ct)
@@ -481,14 +563,15 @@ def test_vrtmisc_colortable():
ds.GetRasterBand(1).SetColorTable(None)
assert ds.GetRasterBand(1).GetColorTable() is None
+
###############################################################################
# Check histogram support
def test_vrtmisc_histogram():
- tmpfile = '/vsimem/vrtmisc_histogram.vrt'
- ds = gdal.Translate(tmpfile, 'data/byte.tif', format='VRT')
+ tmpfile = "/vsimem/vrtmisc_histogram.vrt"
+ ds = gdal.Translate(tmpfile, "data/byte.tif", format="VRT")
ds.GetRasterBand(1).SetDefaultHistogram(1, 2, [3000000000, 4])
ds = None
@@ -500,14 +583,15 @@ def test_vrtmisc_histogram():
gdal.Unlink(tmpfile)
+
###############################################################################
# write SRS with unusual data axis to SRS axis mapping
def test_vrtmisc_write_srs():
- tmpfile = '/vsimem/test_vrtmisc_write_srs.vrt'
- ds = gdal.Translate(tmpfile, 'data/byte.tif', format='VRT')
+ tmpfile = "/vsimem/test_vrtmisc_write_srs.vrt"
+ ds = gdal.Translate(tmpfile, "data/byte.tif", format="VRT")
sr = osr.SpatialReference()
sr.SetAxisMappingStrategy(osr.OAMS_AUTHORITY_COMPLIANT)
sr.ImportFromEPSG(4326)
@@ -515,37 +599,45 @@ def test_vrtmisc_write_srs():
ds = None
ds = gdal.Open(tmpfile)
- assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [1,2]
+ assert ds.GetSpatialRef().GetDataAxisToSRSAxisMapping() == [1, 2]
ds = None
gdal.Unlink(tmpfile)
+
###############################################################################
# complex scenario involving masks and implicit overviews
+
def test_vrtmisc_mask_implicit_overviews():
- with gdaltest.config_option('GDAL_TIFF_INTERNAL_MASK', 'YES'):
- ds = gdal.Translate('/vsimem/cog.tif', 'data/stefan_full_rgba.tif', options = '-outsize 2048 0 -b 1 -b 2 -b 3 -mask 4')
- ds.BuildOverviews('NEAR', [2, 4])
+ with gdaltest.config_option("GDAL_TIFF_INTERNAL_MASK", "YES"):
+ ds = gdal.Translate(
+ "/vsimem/cog.tif",
+ "data/stefan_full_rgba.tif",
+ options="-outsize 2048 0 -b 1 -b 2 -b 3 -mask 4",
+ )
+ ds.BuildOverviews("NEAR", [2, 4])
ds = None
- gdal.Translate('/vsimem/cog.vrt', '/vsimem/cog.tif')
- ds = gdal.Open('/vsimem/cog.vrt')
+ gdal.Translate("/vsimem/cog.vrt", "/vsimem/cog.tif")
+ ds = gdal.Open("/vsimem/cog.vrt")
assert ds.GetRasterBand(1).GetOverview(0).GetMaskFlags() == gdal.GMF_PER_DATASET
assert ds.GetRasterBand(1).GetMaskBand().IsMaskBand()
assert ds.GetRasterBand(1).GetOverview(0).GetMaskBand().IsMaskBand()
ds = None
- gdal.Translate('/vsimem/out.tif', '/vsimem/cog.vrt', options = '-b mask -outsize 10% 0')
- gdal.GetDriverByName('GTiff').Delete('/vsimem/cog.tif')
- gdal.Unlink('/vsimem/cog.vrt')
- ds = gdal.Open('/vsimem/out.tif')
+ gdal.Translate(
+ "/vsimem/out.tif", "/vsimem/cog.vrt", options="-b mask -outsize 10% 0"
+ )
+ gdal.GetDriverByName("GTiff").Delete("/vsimem/cog.tif")
+ gdal.Unlink("/vsimem/cog.vrt")
+ ds = gdal.Open("/vsimem/out.tif")
histo = ds.GetRasterBand(1).GetDefaultHistogram()[3]
# Check that there are only 0 and 255 in the histogram
assert histo[0] + histo[255] == ds.RasterXSize * ds.RasterYSize, histo
assert ds.GetRasterBand(1).Checksum() == 46885
ds = None
- gdal.Unlink('/vsimem/out.tif')
+ gdal.Unlink("/vsimem/out.tif")
###############################################################################
@@ -553,13 +645,9 @@ def test_vrtmisc_mask_implicit_overviews():
def test_vrtmisc_blocksize():
- filename = '/vsimem/test_vrtmisc_blocksize.vrt'
- vrt_ds = gdal.GetDriverByName('VRT').Create(filename, 50, 50, 0)
- options = [
- 'subClass=VRTSourcedRasterBand',
- 'blockXSize=32',
- 'blockYSize=48'
- ]
+ filename = "/vsimem/test_vrtmisc_blocksize.vrt"
+ vrt_ds = gdal.GetDriverByName("VRT").Create(filename, 50, 50, 0)
+ options = ["subClass=VRTSourcedRasterBand", "blockXSize=32", "blockYSize=48"]
vrt_ds.AddBand(gdal.GDT_Byte, options)
vrt_ds = None
@@ -578,8 +666,8 @@ def test_vrtmisc_blocksize():
def test_vrtmisc_coordinate_epoch():
- filename = '/vsimem/temp.vrt'
- gdal.Translate(filename, 'data/byte.tif', options='-a_coord_epoch 2021.3')
+ filename = "/vsimem/temp.vrt"
+ gdal.Translate(filename, "data/byte.tif", options="-a_coord_epoch 2021.3")
ds = gdal.Open(filename)
srs = ds.GetSpatialRef()
assert srs.GetCoordinateEpoch() == 2021.3
@@ -591,79 +679,96 @@ def test_vrtmisc_coordinate_epoch():
###############################################################################
# Test the relativeToVRT attribute of SourceFilename
+
def test_vrtmisc_sourcefilename_all_relatives():
- shutil.copy('data/byte.tif', 'tmp')
+ shutil.copy("data/byte.tif", "tmp")
try:
- src_ds = gdal.Open(os.path.join('tmp', 'byte.tif'))
- ds = gdal.GetDriverByName('VRT').CreateCopy('', src_ds)
- ds.SetDescription(os.path.join('tmp', 'byte.vrt'))
+ src_ds = gdal.Open(os.path.join("tmp", "byte.tif"))
+ ds = gdal.GetDriverByName("VRT").CreateCopy("", src_ds)
+ ds.SetDescription(os.path.join("tmp", "byte.vrt"))
ds = None
- assert 'byte.tif<' in open('tmp/byte.vrt', 'rt').read()
+ assert (
+ 'byte.tif<'
+ in open("tmp/byte.vrt", "rt").read()
+ )
finally:
- gdal.Unlink('tmp/byte.tif')
- gdal.Unlink('tmp/byte.vrt')
+ gdal.Unlink("tmp/byte.tif")
+ gdal.Unlink("tmp/byte.vrt")
###############################################################################
# Test the relativeToVRT attribute of SourceFilename
+
def test_vrtmisc_sourcefilename_source_relative_dest_absolute():
- shutil.copy('data/byte.tif', 'tmp')
+ shutil.copy("data/byte.tif", "tmp")
try:
- src_ds = gdal.Open(os.path.join('tmp', 'byte.tif'))
- ds = gdal.GetDriverByName('VRT').CreateCopy('', src_ds)
- path = os.path.join(os.getcwd(), 'tmp', 'byte.vrt')
- if sys.platform == 'win32':
- path = path.replace('/', '\\')
+ src_ds = gdal.Open(os.path.join("tmp", "byte.tif"))
+ ds = gdal.GetDriverByName("VRT").CreateCopy("", src_ds)
+ path = os.path.join(os.getcwd(), "tmp", "byte.vrt")
+ if sys.platform == "win32":
+ path = path.replace("/", "\\")
ds.SetDescription(path)
ds = None
- assert 'byte.tif<' in open('tmp/byte.vrt', 'rt').read()
+ assert (
+ 'byte.tif<'
+ in open("tmp/byte.vrt", "rt").read()
+ )
finally:
- gdal.Unlink('tmp/byte.tif')
- gdal.Unlink('tmp/byte.vrt')
+ gdal.Unlink("tmp/byte.tif")
+ gdal.Unlink("tmp/byte.vrt")
###############################################################################
# Test the relativeToVRT attribute of SourceFilename
+
def test_vrtmisc_sourcefilename_source_absolute_dest_absolute():
- shutil.copy('data/byte.tif', 'tmp')
+ shutil.copy("data/byte.tif", "tmp")
try:
- src_ds = gdal.Open(os.path.join(os.getcwd(), 'tmp', 'byte.tif'))
- ds = gdal.GetDriverByName('VRT').CreateCopy('', src_ds)
- ds.SetDescription(os.path.join(os.getcwd(), 'tmp', 'byte.vrt'))
+ src_ds = gdal.Open(os.path.join(os.getcwd(), "tmp", "byte.tif"))
+ ds = gdal.GetDriverByName("VRT").CreateCopy("", src_ds)
+ ds.SetDescription(os.path.join(os.getcwd(), "tmp", "byte.vrt"))
ds = None
- assert 'byte.tif<' in open('tmp/byte.vrt', 'rt').read()
+ assert (
+ 'byte.tif<'
+ in open("tmp/byte.vrt", "rt").read()
+ )
finally:
- gdal.Unlink('tmp/byte.tif')
- gdal.Unlink('tmp/byte.vrt')
+ gdal.Unlink("tmp/byte.tif")
+ gdal.Unlink("tmp/byte.vrt")
###############################################################################
# Test the relativeToVRT attribute of SourceFilename
+
def test_vrtmisc_sourcefilename_source_absolute_dest_relative():
- shutil.copy('data/byte.tif', 'tmp')
+ shutil.copy("data/byte.tif", "tmp")
try:
- path = os.path.join(os.getcwd(), 'tmp', 'byte.tif')
- if sys.platform == 'win32':
- path = path.replace('/', '\\')
+ path = os.path.join(os.getcwd(), "tmp", "byte.tif")
+ if sys.platform == "win32":
+ path = path.replace("/", "\\")
src_ds = gdal.Open(path)
- ds = gdal.GetDriverByName('VRT').CreateCopy('', src_ds)
- ds.SetDescription(os.path.join('tmp', 'byte.vrt'))
+ ds = gdal.GetDriverByName("VRT").CreateCopy("", src_ds)
+ ds.SetDescription(os.path.join("tmp", "byte.vrt"))
ds = None
- assert 'byte.tif<' in open('tmp/byte.vrt', 'rt').read()
+ assert (
+ 'byte.tif<'
+ in open("tmp/byte.vrt", "rt").read()
+ )
finally:
- gdal.Unlink('tmp/byte.tif')
- gdal.Unlink('tmp/byte.vrt')
+ gdal.Unlink("tmp/byte.tif")
+ gdal.Unlink("tmp/byte.vrt")
+
###############################################################################
# Test Int64 nodata
@@ -671,8 +776,10 @@ def test_vrtmisc_sourcefilename_source_absolute_dest_relative():
def test_vrtmisc_nodata_int64():
- filename = '/vsimem/temp.vrt'
- ds = gdal.Translate(filename, 'data/byte.tif', format = 'VRT', outputType = gdal.GDT_Int64)
+ filename = "/vsimem/temp.vrt"
+ ds = gdal.Translate(
+ filename, "data/byte.tif", format="VRT", outputType=gdal.GDT_Int64
+ )
val = -(1 << 63)
assert ds.GetRasterBand(1).SetNoDataValue(val) == gdal.CE_None
assert ds.GetRasterBand(1).GetNoDataValue() == val
@@ -691,8 +798,10 @@ def test_vrtmisc_nodata_int64():
def test_vrtmisc_nodata_uint64():
- filename = '/vsimem/temp.vrt'
- ds = gdal.Translate(filename, 'data/byte.tif', format = 'VRT', outputType = gdal.GDT_UInt64)
+ filename = "/vsimem/temp.vrt"
+ ds = gdal.Translate(
+ filename, "data/byte.tif", format="VRT", outputType=gdal.GDT_UInt64
+ )
val = (1 << 64) - 1
assert ds.GetRasterBand(1).SetNoDataValue(val) == gdal.CE_None
assert ds.GetRasterBand(1).GetNoDataValue() == val
@@ -711,8 +820,8 @@ def test_vrtmisc_nodata_uint64():
def test_vrtmisc_alpha_ismaskband():
- src_ds = gdal.GetDriverByName('MEM').Create('', 1, 1, 2)
+ src_ds = gdal.GetDriverByName("MEM").Create("", 1, 1, 2)
src_ds.GetRasterBand(2).SetColorInterpretation(gdal.GCI_AlphaBand)
- ds = gdal.GetDriverByName('VRT').CreateCopy('', src_ds)
+ ds = gdal.GetDriverByName("VRT").CreateCopy("", src_ds)
assert not ds.GetRasterBand(1).IsMaskBand()
assert ds.GetRasterBand(2).IsMaskBand()
diff --git a/autotest/gcore/vsiadls.py b/autotest/gcore/vsiadls.py
index afcd0e1c5e06..78ab3bba3f12 100755
--- a/autotest/gcore/vsiadls.py
+++ b/autotest/gcore/vsiadls.py
@@ -29,42 +29,45 @@
###############################################################################
import sys
-from osgeo import gdal
-
import gdaltest
-import webserver
import pytest
+import webserver
-pytestmark = pytest.mark.skipif(not gdaltest.built_against_curl(), reason="GDAL not built against curl")
+from osgeo import gdal
+
+pytestmark = pytest.mark.skipif(
+ not gdaltest.built_against_curl(), reason="GDAL not built against curl"
+)
def open_for_read(uri):
"""
Opens a test file for reading.
"""
- return gdal.VSIFOpenExL(uri, 'rb', 1)
+ return gdal.VSIFOpenExL(uri, "rb", 1)
###############################################################################
-@pytest.fixture(autouse=True, scope='module')
+@pytest.fixture(autouse=True, scope="module")
def startup_and_cleanup():
# Unset all env vars that could influence the tests
az_vars = {}
for var, reset_val in (
- ('AZURE_STORAGE_CONNECTION_STRING', None),
- ('AZURE_STORAGE_ACCOUNT', None),
- ('AZURE_STORAGE_ACCESS_KEY', None),
- ('AZURE_STORAGE_SAS_TOKEN', None),
- ('AZURE_NO_SIGN_REQUEST', None),
- ('AZURE_CONFIG_DIR', ''),
- ('AZURE_STORAGE_ACCESS_TOKEN', '')):
+ ("AZURE_STORAGE_CONNECTION_STRING", None),
+ ("AZURE_STORAGE_ACCOUNT", None),
+ ("AZURE_STORAGE_ACCESS_KEY", None),
+ ("AZURE_STORAGE_SAS_TOKEN", None),
+ ("AZURE_NO_SIGN_REQUEST", None),
+ ("AZURE_CONFIG_DIR", ""),
+ ("AZURE_STORAGE_ACCESS_TOKEN", ""),
+ ):
az_vars[var] = gdal.GetConfigOption(var)
gdal.SetConfigOption(var, reset_val)
- with gdaltest.config_option('CPL_AZURE_VM_API_ROOT_URL', 'disabled'):
- assert gdal.GetSignedURL('/vsiadls/foo/bar') is None
+ with gdaltest.config_option("CPL_AZURE_VM_API_ROOT_URL", "disabled"):
+ assert gdal.GetSignedURL("/vsiadls/foo/bar") is None
gdaltest.webserver_process = None
gdaltest.webserver_port = 0
@@ -72,15 +75,20 @@ def startup_and_cleanup():
if not gdaltest.built_against_curl():
pytest.skip()
- (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if gdaltest.webserver_port == 0:
pytest.skip()
- gdal.SetConfigOption('AZURE_STORAGE_CONNECTION_STRING',
- 'DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port)
- gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '')
- gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', '')
- gdal.SetConfigOption('CPL_AZURE_TIMESTAMP', 'my_timestamp')
+ gdal.SetConfigOption(
+ "AZURE_STORAGE_CONNECTION_STRING",
+ "DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ )
+ gdal.SetConfigOption("AZURE_STORAGE_ACCOUNT", "")
+ gdal.SetConfigOption("AZURE_STORAGE_ACCESS_KEY", "")
+ gdal.SetConfigOption("CPL_AZURE_TIMESTAMP", "my_timestamp")
yield
@@ -97,6 +105,7 @@ def startup_and_cleanup():
###############################################################################
# Basic authentication tests
+
def test_vsiadls_fake_basic():
if gdaltest.webserver_port == 0:
@@ -104,42 +113,56 @@ def test_vsiadls_fake_basic():
gdal.VSICurlClearCache()
- signed_url = gdal.GetSignedURL('/vsiadls/az_fake_bucket/resource', ['START_DATE=20180213T123456'])
- assert (signed_url in ('http://127.0.0.1:8080/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12',
- 'http://127.0.0.1:8081/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12'))
+ signed_url = gdal.GetSignedURL(
+ "/vsiadls/az_fake_bucket/resource", ["START_DATE=20180213T123456"]
+ )
+ assert signed_url in (
+ "http://127.0.0.1:8080/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12",
+ "http://127.0.0.1:8081/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12",
+ )
def method(request):
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
h = request.headers
- if 'Authorization' not in h or \
- h['Authorization'] != 'SharedKey myaccount:+n9wC1twBBP4T84fioDIGi9bz/CrbwRaQL0LV4sACnw=' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Authorization" not in h
+ or h["Authorization"]
+ != "SharedKey myaccount:+n9wC1twBBP4T84fioDIGi9bz/CrbwRaQL0LV4sACnw="
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Length', 3)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Length", 3)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write("""foo""".encode('ascii'))
+ request.wfile.write("""foo""".encode("ascii"))
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', custom_method=method)
+ handler.add(
+ "GET", "/azure/blob/myaccount/az_fake_bucket/resource", custom_method=method
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiadls/az_fake_bucket/resource')
+ f = open_for_read("/vsiadls/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_fake_bucket/resource2.bin', 200,
- {'Content-Length': '1000000'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_fake_bucket/resource2.bin",
+ 200,
+ {"Content-Length": "1000000"},
+ )
with webserver.install_http_handler(handler):
- stat_res = gdal.VSIStatL('/vsiadls/az_fake_bucket/resource2.bin')
+ stat_res = gdal.VSIStatL("/vsiadls/az_fake_bucket/resource2.bin")
if stat_res is None or stat_res.size != 1000000:
if stat_res is not None:
print(stat_res.size)
@@ -160,60 +183,104 @@ def test_vsiadls_fake_readdir():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?directory=a_dir%20with_space&recursive=false&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8', 'x-ms-continuation': 'contmarker'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?directory=a_dir%20with_space&recursive=false&resource=filesystem",
+ 200,
+ {
+ "Content-type": "application/json;charset=utf-8",
+ "x-ms-continuation": "contmarker",
+ },
+ """
{"paths":[{"name":"a_dir with_space/resource3 with_space.bin","contentLength":"123456","lastModified": "Mon, 01 Jan 1970 00:00:01"}]}
- """)
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?continuation=contmarker&directory=a_dir%20with_space&recursive=false&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8'},
- """
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?continuation=contmarker&directory=a_dir%20with_space&recursive=false&resource=filesystem",
+ 200,
+ {"Content-type": "application/json;charset=utf-8"},
+ """
{"paths":[{"name":"a_dir with_space/resource4.bin","contentLength":"456789","lastModified": "16 Oct 2016 12:34:56"},
{"name":"a_dir with_space/subdir","isDirectory":"true"}]}
- """
- )
+ """,
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin')
+ f = open_for_read(
+ "/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ )
if f is None:
pytest.fail()
gdal.VSIFCloseL(f)
- dir_contents = gdal.ReadDir('/vsiadls/az_fake_bucket2/a_dir with_space')
- assert dir_contents == ['resource3 with_space.bin', 'resource4.bin', 'subdir']
- assert gdal.VSIStatL('/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin').size == 123456
- assert gdal.VSIStatL('/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin').mtime == 1
+ dir_contents = gdal.ReadDir("/vsiadls/az_fake_bucket2/a_dir with_space")
+ assert dir_contents == ["resource3 with_space.bin", "resource4.bin", "subdir"]
+ assert (
+ gdal.VSIStatL(
+ "/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ ).size
+ == 123456
+ )
+ assert (
+ gdal.VSIStatL(
+ "/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ ).mtime
+ == 1
+ )
# ReadDir on something known to be a file shouldn't cause network access
- dir_contents = gdal.ReadDir('/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin')
+ dir_contents = gdal.ReadDir(
+ "/vsiadls/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ )
assert dir_contents is None
# Test error on ReadDir()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?directory=error_test&recursive=false&resource=filesystem', 500)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?directory=error_test&recursive=false&resource=filesystem",
+ 500,
+ )
with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiadls/az_fake_bucket2/error_test/')
+ dir_contents = gdal.ReadDir("/vsiadls/az_fake_bucket2/error_test/")
assert dir_contents is None
# List containers (empty result)
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?resource=account', 200, {'Content-type': 'application/json'},
- """{ "filesystems": [] }""")
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?resource=account",
+ 200,
+ {"Content-type": "application/json"},
+ """{ "filesystems": [] }""",
+ )
with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiadls/')
- assert dir_contents == ['.']
+ dir_contents = gdal.ReadDir("/vsiadls/")
+ assert dir_contents == ["."]
gdal.VSICurlClearCache()
# List containers
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?resource=account', 200, {'Content-type': 'application/json', 'x-ms-continuation': 'contmarker'},
- """{ "filesystems": [{ "name": "mycontainer1"}] }""")
- handler.add('GET', '/azure/blob/myaccount/?continuation=contmarker&resource=account', 200, {'Content-type': 'application/json'},
- """{ "filesystems": [{ "name": "mycontainer2"}] }""")
- with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiadls/')
- assert dir_contents == ['mycontainer1', 'mycontainer2']
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?resource=account",
+ 200,
+ {"Content-type": "application/json", "x-ms-continuation": "contmarker"},
+ """{ "filesystems": [{ "name": "mycontainer1"}] }""",
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?continuation=contmarker&resource=account",
+ 200,
+ {"Content-type": "application/json"},
+ """{ "filesystems": [{ "name": "mycontainer2"}] }""",
+ )
+ with webserver.install_http_handler(handler):
+ dir_contents = gdal.ReadDir("/vsiadls/")
+ assert dir_contents == ["mycontainer1", "mycontainer2"]
+
###############################################################################
# Test OpenDir() with a fake server
@@ -228,64 +295,93 @@ def test_vsiadls_opendir():
# Unlimited depth from root
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?resource=account', 200, {'Content-type': 'application/json', 'x-ms-continuation': 'contmarker_root'},
- """{ "filesystems": [{ "name": "fs1"}, { "name": "fs2"} ]}""")
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?resource=account",
+ 200,
+ {"Content-type": "application/json", "x-ms-continuation": "contmarker_root"},
+ """{ "filesystems": [{ "name": "fs1"}, { "name": "fs2"} ]}""",
+ )
with webserver.install_http_handler(handler):
- d = gdal.OpenDir('/vsiadls/')
+ d = gdal.OpenDir("/vsiadls/")
assert d is not None
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/fs1?recursive=true&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8', 'x-ms-continuation': 'contmarker_within_fs'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/fs1?recursive=true&resource=filesystem",
+ 200,
+ {
+ "Content-type": "application/json;charset=utf-8",
+ "x-ms-continuation": "contmarker_within_fs",
+ },
+ """
{"paths":[{"name":"foo.txt","contentLength":"123456","lastModified": "Mon, 01 Jan 1970 00:00:01"}]}
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs1'
+ assert entry.name == "fs1"
assert entry.mode == 16384
handler = webserver.SequentialHandler()
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs1/foo.txt'
+ assert entry.name == "fs1/foo.txt"
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/fs1?continuation=contmarker_within_fs&recursive=true&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8', 'x-ms-continuation': ''},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/fs1?continuation=contmarker_within_fs&recursive=true&resource=filesystem",
+ 200,
+ {"Content-type": "application/json;charset=utf-8", "x-ms-continuation": ""},
+ """
{"paths":[{"name":"bar.txt","contentLength":"123456","lastModified": "Mon, 01 Jan 1970 00:00:01"}]}
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs1/bar.txt'
+ assert entry.name == "fs1/bar.txt"
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/fs2?recursive=true&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8', 'x-ms-continuation': ''},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/fs2?recursive=true&resource=filesystem",
+ 200,
+ {"Content-type": "application/json;charset=utf-8", "x-ms-continuation": ""},
+ """
{"paths":[]}
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs2'
-
- handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?continuation=contmarker_root&resource=account', 200, {'Content-type': 'application/json'},
- """{ "filesystems": [{ "name": "fs3"}] }""")
- handler.add('GET', '/azure/blob/myaccount/fs3?recursive=true&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8', 'x-ms-continuation': ''},
- """
+ assert entry.name == "fs2"
+
+ handler = webserver.SequentialHandler()
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?continuation=contmarker_root&resource=account",
+ 200,
+ {"Content-type": "application/json"},
+ """{ "filesystems": [{ "name": "fs3"}] }""",
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/fs3?recursive=true&resource=filesystem",
+ 200,
+ {"Content-type": "application/json;charset=utf-8", "x-ms-continuation": ""},
+ """
{"paths":[{"name":"baz.txt","contentLength":"123456","lastModified": "Mon, 01 Jan 1970 00:00:01"}]}
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs3'
+ assert entry.name == "fs3"
handler = webserver.SequentialHandler()
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'fs3/baz.txt'
+ assert entry.name == "fs3/baz.txt"
entry = gdal.GetNextDirEntry(d)
assert entry is None
@@ -294,20 +390,24 @@ def test_vsiadls_opendir():
# Prefix filtering on subdir
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/fs1?directory=sub_dir&recursive=true&resource=filesystem', 200,
- {'Content-type': 'application/json;charset=utf-8'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/fs1?directory=sub_dir&recursive=true&resource=filesystem",
+ 200,
+ {"Content-type": "application/json;charset=utf-8"},
+ """
{"paths":[{"name":"sub_dir/foo.txt","contentLength":"123456","lastModified": "Mon, 01 Jan 1970 00:00:01"},
{"name":"sub_dir/my_prefix_test.txt","contentLength":"40","lastModified": "Mon, 01 Jan 1970 00:00:01"}]}
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- d = gdal.OpenDir('/vsiadls/fs1/sub_dir', -1, ['PREFIX=my_prefix'])
+ d = gdal.OpenDir("/vsiadls/fs1/sub_dir", -1, ["PREFIX=my_prefix"])
assert d is not None
handler = webserver.SequentialHandler()
with webserver.install_http_handler(handler):
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'my_prefix_test.txt'
+ assert entry.name == "my_prefix_test.txt"
assert entry.size == 40
assert entry.mode == 32768
assert entry.mtime == 1
@@ -318,16 +418,30 @@ def test_vsiadls_opendir():
gdal.CloseDir(d)
# No network access done
- s = gdal.VSIStatL('/vsiadls/fs1/sub_dir/my_prefix_test.txt',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG |gdal.VSI_STAT_CACHE_ONLY)
+ s = gdal.VSIStatL(
+ "/vsiadls/fs1/sub_dir/my_prefix_test.txt",
+ gdal.VSI_STAT_EXISTS_FLAG
+ | gdal.VSI_STAT_NATURE_FLAG
+ | gdal.VSI_STAT_SIZE_FLAG
+ | gdal.VSI_STAT_CACHE_ONLY,
+ )
assert s
assert (s.mode & 32768) != 0
assert s.size == 40
assert s.mtime == 1
# No network access done
- assert gdal.VSIStatL('/vsiadls/fs1/sub_dir/i_do_not_exist.txt',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG | gdal.VSI_STAT_CACHE_ONLY) is None
+ assert (
+ gdal.VSIStatL(
+ "/vsiadls/fs1/sub_dir/i_do_not_exist.txt",
+ gdal.VSI_STAT_EXISTS_FLAG
+ | gdal.VSI_STAT_NATURE_FLAG
+ | gdal.VSI_STAT_SIZE_FLAG
+ | gdal.VSI_STAT_CACHE_ONLY,
+ )
+ is None
+ )
+
###############################################################################
# Test write
@@ -342,79 +456,148 @@ def test_vsiadls_fake_write():
# Error case in initial PUT
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 400)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 400)
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is None
# Empty file
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=0', 200)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 201)
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=0",
+ 200,
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is not None
assert gdal.VSIFCloseL(f) == 0
# Small file
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201,
- expected_headers = {'x-ms-client-request-id': 'REQUEST_ID'})
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=0', 202, expected_body = b'foo')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=3', 200)
- with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenExL('/vsiadls/test_copy/file.bin', 'wb', 0, ['x-ms-client-request-id=REQUEST_ID'])
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_copy/file.bin?resource=file",
+ 201,
+ expected_headers={"x-ms-client-request-id": "REQUEST_ID"},
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=0",
+ 202,
+ expected_body=b"foo",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=3",
+ 200,
+ )
+ with webserver.install_http_handler(handler):
+ f = gdal.VSIFOpenExL(
+ "/vsiadls/test_copy/file.bin",
+ "wb",
+ 0,
+ ["x-ms-client-request-id=REQUEST_ID"],
+ )
assert f is not None
- assert gdal.VSIFWriteL('foo', 1, 3, f) == 3
+ assert gdal.VSIFWriteL("foo", 1, 3, f) == 3
assert gdal.VSIFCloseL(f) == 0
# Error case in PATCH append
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=0', 400, expected_body = b'foo')
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 201)
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=0",
+ 400,
+ expected_body=b"foo",
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is not None
- assert gdal.VSIFWriteL('foo', 1, 3, f) == 3
+ assert gdal.VSIFWriteL("foo", 1, 3, f) == 3
assert gdal.VSIFCloseL(f) != 0
# Error case in PATCH close
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=0', 202, expected_body = b'foo')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=3', 400)
- with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 201)
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=0",
+ 202,
+ expected_body=b"foo",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=3",
+ 400,
+ )
+ with webserver.install_http_handler(handler):
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is not None
- assert gdal.VSIFWriteL('foo', 1, 3, f) == 3
+ assert gdal.VSIFWriteL("foo", 1, 3, f) == 3
assert gdal.VSIFCloseL(f) != 0
# Chunked output
- with gdaltest.config_option('VSIAZ_CHUNK_SIZE_BYTES', '10'):
+ with gdaltest.config_option("VSIAZ_CHUNK_SIZE_BYTES", "10"):
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=0', 202, expected_body = b'0123456789')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=10', 202, expected_body = b'abcd')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=14', 200)
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 201
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=0",
+ 202,
+ expected_body=b"0123456789",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=10",
+ 202,
+ expected_body=b"abcd",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=14",
+ 200,
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is not None
- assert gdal.VSIFWriteL('0123456789abcd', 1, 14, f) == 14
+ assert gdal.VSIFWriteL("0123456789abcd", 1, 14, f) == 14
assert gdal.VSIFCloseL(f) == 0
# Chunked output with last chunk being the chunk size
- with gdaltest.config_option('VSIAZ_CHUNK_SIZE_BYTES', '5'):
+ with gdaltest.config_option("VSIAZ_CHUNK_SIZE_BYTES", "5"):
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=0', 202, expected_body = b'01234')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=append&position=5', 202, expected_body = b'56789')
- handler.add('PATCH', '/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=10', 200)
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?resource=file", 201
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=0",
+ 202,
+ expected_body=b"01234",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=append&position=5",
+ 202,
+ expected_body=b"56789",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_copy/file.bin?action=flush&close=true&position=10",
+ 200,
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsiadls/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiadls/test_copy/file.bin", "wb")
assert f is not None
- assert gdal.VSIFWriteL('0123456789', 1, 10, f) == 10
+ assert gdal.VSIFWriteL("0123456789", 1, 10, f) == 10
assert gdal.VSIFCloseL(f) == 0
+
###############################################################################
# Test Unlink()
@@ -428,21 +611,42 @@ def test_vsiadls_fake_unlink():
# Success
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 200, {'Content-Length': '1'})
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 200, {'Connection': 'close'})
- with webserver.install_http_handler(handler):
- ret = gdal.Unlink('/vsiadls/az_bucket_test_unlink/myfile')
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 200,
+ {"Content-Length": "1"},
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 200,
+ {"Connection": "close"},
+ )
+ with webserver.install_http_handler(handler):
+ ret = gdal.Unlink("/vsiadls/az_bucket_test_unlink/myfile")
assert ret == 0
# Failure
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 200, {'Content-Length': '1'})
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 400, {'Connection': 'close'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 200,
+ {"Content-Length": "1"},
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 400,
+ {"Connection": "close"},
+ )
with webserver.install_http_handler(handler):
with gdaltest.error_handler():
- ret = gdal.Unlink('/vsiadls/az_bucket_test_unlink/myfile')
+ ret = gdal.Unlink("/vsiadls/az_bucket_test_unlink/myfile")
assert ret == -1
+
###############################################################################
# Test Mkdir() / Rmdir() / RmdirRecursive()
@@ -455,59 +659,89 @@ def test_vsiadls_fake_mkdir_rmdir():
gdal.VSICurlClearCache()
# Invalid name
- ret = gdal.Mkdir('/vsiadls', 0)
+ ret = gdal.Mkdir("/vsiadls", 0)
assert ret != 0
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir', 404, {'Connection': 'close'})
- handler.add('PUT', '/azure/blob/myaccount/az_bucket_test_mkdir/dir?resource=directory', 201)
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir",
+ 404,
+ {"Connection": "close"},
+ )
+ handler.add(
+ "PUT", "/azure/blob/myaccount/az_bucket_test_mkdir/dir?resource=directory", 201
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Mkdir('/vsiadls/az_bucket_test_mkdir/dir', 0)
+ ret = gdal.Mkdir("/vsiadls/az_bucket_test_mkdir/dir", 0)
assert ret == 0
# Try creating already existing directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir', 200, {'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'directory' } )
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir",
+ 200,
+ {"x-ms-permissions": "rwxrwxrwx", "x-ms-resource-type": "directory"},
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Mkdir('/vsiadls/az_bucket_test_mkdir/dir', 0)
+ ret = gdal.Mkdir("/vsiadls/az_bucket_test_mkdir/dir", 0)
assert ret != 0
# Invalid name
- ret = gdal.Rmdir('/vsiadls')
+ ret = gdal.Rmdir("/vsiadls")
assert ret != 0
# Not a directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/it_is_a_file', 200, {'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'file' } )
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/it_is_a_file",
+ 200,
+ {"x-ms-permissions": "rwxrwxrwx", "x-ms-resource-type": "file"},
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiadls/az_bucket_test_mkdir/it_is_a_file')
+ ret = gdal.Rmdir("/vsiadls/az_bucket_test_mkdir/it_is_a_file")
assert ret != 0
# Valid
handler = webserver.SequentialHandler()
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_mkdir/dir?recursive=false', 200)
+ handler.add(
+ "DELETE", "/azure/blob/myaccount/az_bucket_test_mkdir/dir?recursive=false", 200
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiadls/az_bucket_test_mkdir/dir')
+ ret = gdal.Rmdir("/vsiadls/az_bucket_test_mkdir/dir")
assert ret == 0
# Try deleting already deleted directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir', 404 )
+ handler.add("HEAD", "/azure/blob/myaccount/az_bucket_test_mkdir/dir", 404)
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiadls/az_bucket_test_mkdir/dir')
+ ret = gdal.Rmdir("/vsiadls/az_bucket_test_mkdir/dir")
assert ret != 0
# RmdirRecursive
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir_rec', 200, {'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'directory' } )
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_mkdir/dir_rec?recursive=true', 200)
- with webserver.install_http_handler(handler):
- ret = gdal.RmdirRecursive('/vsiadls/az_bucket_test_mkdir/dir_rec')
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir_rec",
+ 200,
+ {"x-ms-permissions": "rwxrwxrwx", "x-ms-resource-type": "directory"},
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir_rec?recursive=true",
+ 200,
+ )
+ with webserver.install_http_handler(handler):
+ ret = gdal.RmdirRecursive("/vsiadls/az_bucket_test_mkdir/dir_rec")
assert ret == 0
+
###############################################################################
# Test rename
+
def test_vsiadls_fake_rename():
if gdaltest.webserver_port == 0:
@@ -515,18 +749,33 @@ def test_vsiadls_fake_rename():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/source.txt', 200, {'Content-Length': '3', 'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'file'})
- handler.add('PUT', '/azure/blob/myaccount/test/target.txt', 201, expected_headers = {'x-ms-rename-source' : '/test/source.txt'})
- handler.add('HEAD', '/azure/blob/myaccount/test/source.txt', 404)
- with webserver.install_http_handler(handler):
- assert gdal.Rename( '/vsiadls/test/source.txt', '/vsiadls/test/target.txt') == 0
- assert gdal.VSIStatL('/vsiadls/test/source.txt') is None
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test/source.txt",
+ 200,
+ {
+ "Content-Length": "3",
+ "x-ms-permissions": "rwxrwxrwx",
+ "x-ms-resource-type": "file",
+ },
+ )
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test/target.txt",
+ 201,
+ expected_headers={"x-ms-rename-source": "/test/source.txt"},
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test/source.txt", 404)
+ with webserver.install_http_handler(handler):
+ assert gdal.Rename("/vsiadls/test/source.txt", "/vsiadls/test/target.txt") == 0
+ assert gdal.VSIStatL("/vsiadls/test/source.txt") is None
###############################################################################
# Test Sync() with source and target on /vsiadls/
# Note: this is using Azure blob object copying since ADLS has no equivalent
+
def test_vsiadls_fake_sync_copyobject():
if gdaltest.webserver_port == 0:
@@ -535,25 +784,50 @@ def test_vsiadls_fake_sync_copyobject():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/src.txt', 200, {'Content-Length': '3', 'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'file'})
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/dst.txt', 404)
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/dst.txt', 202,
- expected_headers={'x-ms-copy-source': 'http://127.0.0.1:%d/azure/blob/myaccount/test_bucket/src.txt' % gdaltest.webserver_port})
- with webserver.install_http_handler(handler):
- assert gdal.Sync('/vsiadls/test_bucket/src.txt',
- '/vsiadls/test_bucket/dst.txt')
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test_bucket/src.txt",
+ 200,
+ {
+ "Content-Length": "3",
+ "x-ms-permissions": "rwxrwxrwx",
+ "x-ms-resource-type": "file",
+ },
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/dst.txt", 404)
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/dst.txt",
+ 202,
+ expected_headers={
+ "x-ms-copy-source": "http://127.0.0.1:%d/azure/blob/myaccount/test_bucket/src.txt"
+ % gdaltest.webserver_port
+ },
+ )
+ with webserver.install_http_handler(handler):
+ assert gdal.Sync("/vsiadls/test_bucket/src.txt", "/vsiadls/test_bucket/dst.txt")
gdal.VSICurlClearCache()
# Error case
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/src.txt', 200, {'Content-Length': '3', 'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'file'})
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/dst.txt', 404)
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/dst.txt', 400)
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test_bucket/src.txt",
+ 200,
+ {
+ "Content-Length": "3",
+ "x-ms-permissions": "rwxrwxrwx",
+ "x-ms-resource-type": "file",
+ },
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/dst.txt", 404)
+ handler.add("PUT", "/azure/blob/myaccount/test_bucket/dst.txt", 400)
with webserver.install_http_handler(handler):
with gdaltest.error_handler():
- assert not gdal.Sync('/vsiadls/test_bucket/src.txt',
- '/vsiadls/test_bucket/dst.txt')
+ assert not gdal.Sync(
+ "/vsiadls/test_bucket/src.txt", "/vsiadls/test_bucket/dst.txt"
+ )
###############################################################################
@@ -567,24 +841,40 @@ def test_vsiadls_fake_sync_multithreaded_upload_single_file():
gdal.VSICurlClearCache()
- gdal.Mkdir('/vsimem/test', 0)
- gdal.FileFromMemBuffer('/vsimem/test/foo', 'foo\n')
-
- handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket?resource=filesystem', 200)
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/foo', 404)
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/foo?resource=file', 201)
- handler.add('PATCH', '/azure/blob/myaccount/test_bucket/foo?action=append&position=0', 202, expected_body = b'foo')
- handler.add('PATCH', '/azure/blob/myaccount/test_bucket/foo?action=append&position=3', 202, expected_body = b'\n')
- handler.add('PATCH', '/azure/blob/myaccount/test_bucket/foo?action=flush&close=true&position=4', 200)
-
- with gdaltest.config_option('VSIS3_SIMULATE_THREADING', 'YES'):
+ gdal.Mkdir("/vsimem/test", 0)
+ gdal.FileFromMemBuffer("/vsimem/test/foo", "foo\n")
+
+ handler = webserver.SequentialHandler()
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket?resource=filesystem", 200)
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/foo", 404)
+ handler.add("PUT", "/azure/blob/myaccount/test_bucket/foo?resource=file", 201)
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_bucket/foo?action=append&position=0",
+ 202,
+ expected_body=b"foo",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_bucket/foo?action=append&position=3",
+ 202,
+ expected_body=b"\n",
+ )
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test_bucket/foo?action=flush&close=true&position=4",
+ 200,
+ )
+
+ with gdaltest.config_option("VSIS3_SIMULATE_THREADING", "YES"):
with webserver.install_http_handler(handler):
- assert gdal.Sync('/vsimem/test/foo',
- '/vsiadls/test_bucket',
- options=['NUM_THREADS=1', 'CHUNK_SIZE=3'])
+ assert gdal.Sync(
+ "/vsimem/test/foo",
+ "/vsiadls/test_bucket",
+ options=["NUM_THREADS=1", "CHUNK_SIZE=3"],
+ )
- gdal.RmdirRecursive('/vsimem/test')
+ gdal.RmdirRecursive("/vsimem/test")
###############################################################################
@@ -599,47 +889,90 @@ def test_vsiadls_fake_metadata():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/foo.bin', 200, {'Content-Length': '3', 'x-ms-permissions': 'rwxrwxrwx', 'x-ms-resource-type': 'file'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test/foo.bin",
+ 200,
+ {
+ "Content-Length": "3",
+ "x-ms-permissions": "rwxrwxrwx",
+ "x-ms-resource-type": "file",
+ },
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiadls/test/foo.bin', 'HEADERS')
- assert 'x-ms-permissions' in md
+ md = gdal.GetFileMetadata("/vsiadls/test/foo.bin", "HEADERS")
+ assert "x-ms-permissions" in md
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/foo.bin?action=getStatus', 200, {'foo': 'bar'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test/foo.bin?action=getStatus",
+ 200,
+ {"foo": "bar"},
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiadls/test/foo.bin', 'STATUS')
- assert 'foo' in md
+ md = gdal.GetFileMetadata("/vsiadls/test/foo.bin", "STATUS")
+ assert "foo" in md
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/foo.bin?action=getAccessControl', 200, {'x-ms-acl': 'some_acl'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test/foo.bin?action=getAccessControl",
+ 200,
+ {"x-ms-acl": "some_acl"},
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiadls/test/foo.bin', 'ACL')
- assert 'x-ms-acl' in md
+ md = gdal.GetFileMetadata("/vsiadls/test/foo.bin", "ACL")
+ assert "x-ms-acl" in md
# Error case
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/foo.bin?action=getStatus', 404)
+ handler.add("HEAD", "/azure/blob/myaccount/test/foo.bin?action=getStatus", 404)
with webserver.install_http_handler(handler):
- assert gdal.GetFileMetadata('/vsiadls/test/foo.bin', 'STATUS') == {}
+ assert gdal.GetFileMetadata("/vsiadls/test/foo.bin", "STATUS") == {}
# SetMetadata()
handler = webserver.SequentialHandler()
- handler.add('PATCH', '/azure/blob/myaccount/test/foo.bin?action=setProperties', 200, expected_headers={'x-ms-properties': 'foo=bar'})
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test/foo.bin?action=setProperties",
+ 200,
+ expected_headers={"x-ms-properties": "foo=bar"},
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiadls/test/foo.bin', {'x-ms-properties': 'foo=bar'}, 'PROPERTIES')
+ assert gdal.SetFileMetadata(
+ "/vsiadls/test/foo.bin", {"x-ms-properties": "foo=bar"}, "PROPERTIES"
+ )
handler = webserver.SequentialHandler()
- handler.add('PATCH', '/azure/blob/myaccount/test/foo.bin?action=setAccessControl', 200, expected_headers={'x-ms-acl': 'foo'})
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test/foo.bin?action=setAccessControl",
+ 200,
+ expected_headers={"x-ms-acl": "foo"},
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiadls/test/foo.bin', {'x-ms-acl': 'foo'}, 'ACL')
+ assert gdal.SetFileMetadata("/vsiadls/test/foo.bin", {"x-ms-acl": "foo"}, "ACL")
handler = webserver.SequentialHandler()
- handler.add('PATCH', '/azure/blob/myaccount/test/foo.bin?action=setAccessControlRecursive&mode=set', 200, expected_headers={'x-ms-acl': 'foo'})
+ handler.add(
+ "PATCH",
+ "/azure/blob/myaccount/test/foo.bin?action=setAccessControlRecursive&mode=set",
+ 200,
+ expected_headers={"x-ms-acl": "foo"},
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiadls/test/foo.bin', {'x-ms-acl': 'foo'}, 'ACL', ['RECURSIVE=TRUE', 'MODE=set'])
+ assert gdal.SetFileMetadata(
+ "/vsiadls/test/foo.bin",
+ {"x-ms-acl": "foo"},
+ "ACL",
+ ["RECURSIVE=TRUE", "MODE=set"],
+ )
# Error case
handler = webserver.SequentialHandler()
- handler.add('PATCH', '/azure/blob/myaccount/test/foo.bin?action=setProperties', 404)
+ handler.add("PATCH", "/azure/blob/myaccount/test/foo.bin?action=setProperties", 404)
with webserver.install_http_handler(handler):
- assert not gdal.SetFileMetadata('/vsiadls/test/foo.bin', {'x-ms-properties': 'foo=bar'}, 'PROPERTIES')
+ assert not gdal.SetFileMetadata(
+ "/vsiadls/test/foo.bin", {"x-ms-properties": "foo=bar"}, "PROPERTIES"
+ )
diff --git a/autotest/gcore/vsiadls_real_instance.py b/autotest/gcore/vsiadls_real_instance.py
index bfddabaf42fa..66019c029109 100755
--- a/autotest/gcore/vsiadls_real_instance.py
+++ b/autotest/gcore/vsiadls_real_instance.py
@@ -30,20 +30,22 @@
import base64
import stat
-from osgeo import gdal
-
import gdaltest
import pytest
-pytestmark = pytest.mark.skipif(not gdaltest.built_against_curl(), reason="GDAL not built against curl")
+from osgeo import gdal
+
+pytestmark = pytest.mark.skipif(
+ not gdaltest.built_against_curl(), reason="GDAL not built against curl"
+)
def open_for_read(uri):
"""
Opens a test file for reading.
"""
- return gdal.VSIFOpenExL(uri, 'rb', 1)
+ return gdal.VSIFOpenExL(uri, "rb", 1)
###############################################################################
@@ -52,132 +54,152 @@ def open_for_read(uri):
def test_vsiadls_real_instance_tests():
- adls_resource = gdal.GetConfigOption('ADLS_RESOURCE')
+ adls_resource = gdal.GetConfigOption("ADLS_RESOURCE")
if adls_resource is None:
- pytest.skip('Missing ADLS_RESOURCE')
+ pytest.skip("Missing ADLS_RESOURCE")
- if '/' not in adls_resource:
- path = '/vsiadls/' + adls_resource
+ if "/" not in adls_resource:
+ path = "/vsiadls/" + adls_resource
try:
statres = gdal.VSIStatL(path)
- assert statres is not None and stat.S_ISDIR(statres.mode), \
- ('%s is not a valid bucket' % path)
+ assert statres is not None and stat.S_ISDIR(statres.mode), (
+ "%s is not a valid bucket" % path
+ )
readdir = gdal.ReadDir(path)
- assert readdir is not None, 'ReadDir() should not return empty list'
+ assert readdir is not None, "ReadDir() should not return empty list"
for filename in readdir:
- if filename != '.':
- subpath = path + '/' + filename
- assert gdal.VSIStatL(subpath) is not None, \
- ('Stat(%s) should not return an error' % subpath)
-
- unique_id = 'vsiadls_test'
- subpath = path + '/' + unique_id
+ if filename != ".":
+ subpath = path + "/" + filename
+ assert gdal.VSIStatL(subpath) is not None, (
+ "Stat(%s) should not return an error" % subpath
+ )
+
+ unique_id = "vsiadls_test"
+ subpath = path + "/" + unique_id
ret = gdal.Mkdir(subpath, 0)
- assert ret >= 0, ('Mkdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Mkdir(%s) should not return an error" % subpath
readdir = gdal.ReadDir(path)
- assert unique_id in readdir, \
- ('ReadDir(%s) should contain %s' % (path, unique_id))
+ assert unique_id in readdir, "ReadDir(%s) should contain %s" % (
+ path,
+ unique_id,
+ )
ret = gdal.Mkdir(subpath, 0)
- assert ret != 0, ('Mkdir(%s) repeated should return an error' % subpath)
+ assert ret != 0, "Mkdir(%s) repeated should return an error" % subpath
ret = gdal.Rmdir(subpath)
- assert ret >= 0, ('Rmdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Rmdir(%s) should not return an error" % subpath
readdir = gdal.ReadDir(path)
- assert unique_id not in readdir, \
- ('ReadDir(%s) should not contain %s' % (path, unique_id))
+ assert unique_id not in readdir, "ReadDir(%s) should not contain %s" % (
+ path,
+ unique_id,
+ )
ret = gdal.Rmdir(subpath)
- assert ret != 0, ('Rmdir(%s) repeated should return an error' % subpath)
+ assert ret != 0, "Rmdir(%s) repeated should return an error" % subpath
ret = gdal.Mkdir(subpath, 0)
- assert ret >= 0, ('Mkdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Mkdir(%s) should not return an error" % subpath
- f = gdal.VSIFOpenL(subpath + '/test.txt', 'wb')
+ f = gdal.VSIFOpenL(subpath + "/test.txt", "wb")
assert f is not None
- gdal.VSIFWriteL('hello', 1, 5, f)
+ gdal.VSIFWriteL("hello", 1, 5, f)
gdal.VSIFCloseL(f)
ret = gdal.Rmdir(subpath)
- assert ret != 0, \
- ('Rmdir(%s) on non empty directory should return an error' % subpath)
+ assert ret != 0, (
+ "Rmdir(%s) on non empty directory should return an error" % subpath
+ )
- f = gdal.VSIFOpenL(subpath + '/test.txt', 'rb')
+ f = gdal.VSIFOpenL(subpath + "/test.txt", "rb")
assert f is not None
- data = gdal.VSIFReadL(1, 5, f).decode('utf-8')
- assert data == 'hello'
+ data = gdal.VSIFReadL(1, 5, f).decode("utf-8")
+ assert data == "hello"
gdal.VSIFCloseL(f)
- assert gdal.VSIStatL(subpath + '/test.txt') is not None
+ assert gdal.VSIStatL(subpath + "/test.txt") is not None
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'HEADERS')
- assert 'x-ms-properties' in md
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "HEADERS")
+ assert "x-ms-properties" in md
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'STATUS')
- assert 'x-ms-resource-type' in md
- assert 'x-ms-properties' not in md
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "STATUS")
+ assert "x-ms-resource-type" in md
+ assert "x-ms-properties" not in md
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'ACL')
- assert 'x-ms-acl' in md
- assert 'x-ms-permissions' in md
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "ACL")
+ assert "x-ms-acl" in md
+ assert "x-ms-permissions" in md
# Change properties
- properties_foo_bar = 'foo=' + base64.b64encode('bar')
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'x-ms-properties': properties_foo_bar}, 'PROPERTIES')
+ properties_foo_bar = "foo=" + base64.b64encode("bar")
+ assert gdal.SetFileMetadata(
+ subpath + "/test.txt",
+ {"x-ms-properties": properties_foo_bar},
+ "PROPERTIES",
+ )
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'HEADERS')
- assert 'x-ms-properties' in md
- assert md['x-ms-properties'] == properties_foo_bar
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "HEADERS")
+ assert "x-ms-properties" in md
+ assert md["x-ms-properties"] == properties_foo_bar
# Change ACL
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'x-ms-permissions': '0777'}, 'ACL')
+ assert gdal.SetFileMetadata(
+ subpath + "/test.txt", {"x-ms-permissions": "0777"}, "ACL"
+ )
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'ACL')
- assert 'x-ms-permissions' in md
- assert md['x-ms-permissions'] == 'rwxrwxrwx'
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "ACL")
+ assert "x-ms-permissions" in md
+ assert md["x-ms-permissions"] == "rwxrwxrwx"
# Change ACL recursively
- md = gdal.GetFileMetadata(subpath, 'ACL')
- assert 'x-ms-acl' in md
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'x-ms-acl': md['x-ms-acl']}, 'ACL', ['RECURSIVE=YES', 'MODE=set'])
-
+ md = gdal.GetFileMetadata(subpath, "ACL")
+ assert "x-ms-acl" in md
+ assert gdal.SetFileMetadata(
+ subpath + "/test.txt",
+ {"x-ms-acl": md["x-ms-acl"]},
+ "ACL",
+ ["RECURSIVE=YES", "MODE=set"],
+ )
- assert gdal.Rename(subpath + '/test.txt', subpath + '/test2.txt') == 0
+ assert gdal.Rename(subpath + "/test.txt", subpath + "/test2.txt") == 0
- assert gdal.VSIStatL(subpath + '/test.txt') is None
+ assert gdal.VSIStatL(subpath + "/test.txt") is None
- assert gdal.VSIStatL(subpath + '/test2.txt') is not None
+ assert gdal.VSIStatL(subpath + "/test2.txt") is not None
- f = gdal.VSIFOpenL(subpath + '/test2.txt', 'rb')
+ f = gdal.VSIFOpenL(subpath + "/test2.txt", "rb")
assert f is not None
- data = gdal.VSIFReadL(1, 5, f).decode('utf-8')
- assert data == 'hello'
+ data = gdal.VSIFReadL(1, 5, f).decode("utf-8")
+ assert data == "hello"
gdal.VSIFCloseL(f)
- ret = gdal.Unlink(subpath + '/test2.txt')
- assert ret >= 0, \
- ('Unlink(%s) should not return an error' % (subpath + '/test2.txt'))
+ ret = gdal.Unlink(subpath + "/test2.txt")
+ assert ret >= 0, "Unlink(%s) should not return an error" % (
+ subpath + "/test2.txt"
+ )
- assert gdal.VSIStatL(subpath + '/test2.txt') is None
+ assert gdal.VSIStatL(subpath + "/test2.txt") is None
- assert gdal.Unlink(subpath + '/test2.txt') != 0, "Unlink on a deleted file should return an error"
+ assert (
+ gdal.Unlink(subpath + "/test2.txt") != 0
+ ), "Unlink on a deleted file should return an error"
- f = gdal.VSIFOpenL(subpath + '/test2.txt', 'wb')
+ f = gdal.VSIFOpenL(subpath + "/test2.txt", "wb")
assert f is not None
gdal.VSIFCloseL(f)
- assert gdal.VSIStatL(subpath + '/test2.txt') is not None
+ assert gdal.VSIStatL(subpath + "/test2.txt") is not None
finally:
assert gdal.RmdirRecursive(subpath) == 0
return
- f = open_for_read('/vsiadls/' + adls_resource)
+ f = open_for_read("/vsiadls/" + adls_resource)
assert f is not None
ret = gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
@@ -185,25 +207,27 @@ def test_vsiadls_real_instance_tests():
assert len(ret) == 1
# Test GetSignedURL()
- signed_url = gdal.GetSignedURL('/vsiadls/' + adls_resource)
- f = open_for_read('/vsicurl_streaming/' + signed_url)
+ signed_url = gdal.GetSignedURL("/vsiadls/" + adls_resource)
+ f = open_for_read("/vsicurl_streaming/" + signed_url)
assert f is not None
ret = gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
assert len(ret) == 1
+
###############################################################################
# Nominal cases (require valid credentials)
# Note: that test must be run with a delay > 30 seconds due to such a delay
# for re-creating a filesystem of the same name of one that has been destroyed
+
def test_vsiadls_real_instance_filesystem_tests():
- if gdal.GetConfigOption('ADLS_ALLOW_FILESYSTEM_TESTS') is None:
- pytest.skip('Missing ADLS_ALLOW_FILESYSTEM_TESTS')
+ if gdal.GetConfigOption("ADLS_ALLOW_FILESYSTEM_TESTS") is None:
+ pytest.skip("Missing ADLS_ALLOW_FILESYSTEM_TESTS")
- fspath = '/vsiadls/test-vsiadls-filesystem-tests'
+ fspath = "/vsiadls/test-vsiadls-filesystem-tests"
try:
assert gdal.VSIStatL(fspath) is None
@@ -213,13 +237,13 @@ def test_vsiadls_real_instance_filesystem_tests():
statres = gdal.VSIStatL(fspath)
assert statres is not None and stat.S_ISDIR(statres.mode)
- assert gdal.ReadDir(fspath) == [ "." ]
+ assert gdal.ReadDir(fspath) == ["."]
assert gdal.Mkdir(fspath, 0) != 0
- assert gdal.Mkdir(fspath + '/subdir', 0) == 0
+ assert gdal.Mkdir(fspath + "/subdir", 0) == 0
- statres = gdal.VSIStatL(fspath + '/subdir')
+ statres = gdal.VSIStatL(fspath + "/subdir")
assert statres is not None and stat.S_ISDIR(statres.mode)
assert gdal.Rmdir(fspath) != 0
diff --git a/autotest/gcore/vsiaz.py b/autotest/gcore/vsiaz.py
index aacc6f98a863..3d7020d5d94d 100755
--- a/autotest/gcore/vsiaz.py
+++ b/autotest/gcore/vsiaz.py
@@ -29,38 +29,43 @@
###############################################################################
import sys
-from osgeo import gdal
-
import gdaltest
-import webserver
import pytest
+import webserver
+
+from osgeo import gdal
+
+pytestmark = pytest.mark.skipif(
+ not gdaltest.built_against_curl(), reason="GDAL not built against curl"
+)
-pytestmark = pytest.mark.skipif(not gdaltest.built_against_curl(), reason="GDAL not built against curl")
def open_for_read(uri):
"""
Opens a test file for reading.
"""
- return gdal.VSIFOpenExL(uri, 'rb', 1)
+ return gdal.VSIFOpenExL(uri, "rb", 1)
+
###############################################################################
-@pytest.fixture(autouse=True, scope='module')
+@pytest.fixture(autouse=True, scope="module")
def startup_and_cleanup():
az_vars = {}
for var, reset_val in (
- ('AZURE_STORAGE_CONNECTION_STRING', None),
- ('AZURE_STORAGE_ACCOUNT', None),
- ('AZURE_STORAGE_ACCESS_KEY', None),
- ('AZURE_STORAGE_SAS_TOKEN', None),
- ('AZURE_NO_SIGN_REQUEST', None),
- ('AZURE_CONFIG_DIR', ''),
- ('AZURE_STORAGE_ACCESS_TOKEN', '')):
+ ("AZURE_STORAGE_CONNECTION_STRING", None),
+ ("AZURE_STORAGE_ACCOUNT", None),
+ ("AZURE_STORAGE_ACCESS_KEY", None),
+ ("AZURE_STORAGE_SAS_TOKEN", None),
+ ("AZURE_NO_SIGN_REQUEST", None),
+ ("AZURE_CONFIG_DIR", ""),
+ ("AZURE_STORAGE_ACCESS_TOKEN", ""),
+ ):
az_vars[var] = gdal.GetConfigOption(var)
gdal.SetConfigOption(var, reset_val)
- assert gdal.GetSignedURL('/vsiaz/foo/bar') is None
+ assert gdal.GetSignedURL("/vsiaz/foo/bar") is None
gdaltest.webserver_process = None
gdaltest.webserver_port = 0
@@ -68,13 +73,18 @@ def startup_and_cleanup():
if not gdaltest.built_against_curl():
pytest.skip()
- (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if gdaltest.webserver_port == 0:
pytest.skip()
- gdal.SetConfigOption('AZURE_STORAGE_CONNECTION_STRING',
- 'DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port)
- gdal.SetConfigOption('CPL_AZURE_TIMESTAMP', 'my_timestamp')
+ gdal.SetConfigOption(
+ "AZURE_STORAGE_CONNECTION_STRING",
+ "DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ )
+ gdal.SetConfigOption("CPL_AZURE_TIMESTAMP", "my_timestamp")
yield
@@ -87,6 +97,7 @@ def startup_and_cleanup():
for var in az_vars:
gdal.SetConfigOption(var, az_vars[var])
+
###############################################################################
# Test with a fake Azure Blob server
@@ -98,70 +109,91 @@ def test_vsiaz_fake_basic():
gdal.VSICurlClearCache()
- signed_url = gdal.GetSignedURL('/vsiaz/az_fake_bucket/resource', ['START_DATE=20180213T123456'])
- assert (signed_url in ('http://127.0.0.1:8080/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12',
- 'http://127.0.0.1:8081/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12'))
+ signed_url = gdal.GetSignedURL(
+ "/vsiaz/az_fake_bucket/resource", ["START_DATE=20180213T123456"]
+ )
+ assert signed_url in (
+ "http://127.0.0.1:8080/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12",
+ "http://127.0.0.1:8081/azure/blob/myaccount/az_fake_bucket/resource?se=2018-02-13T13%3A34%3A56Z&sig=9Jc4yBFlSRZSSxf059OohN6pYRrjuHWJWSEuryczN%2FM%3D&sp=r&sr=c&st=2018-02-13T12%3A34%3A56Z&sv=2012-02-12",
+ )
def method(request):
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
h = request.headers
- if 'Authorization' not in h or \
- h['Authorization'] != 'SharedKey myaccount:+n9wC1twBBP4T84fioDIGi9bz/CrbwRaQL0LV4sACnw=' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Authorization" not in h
+ or h["Authorization"]
+ != "SharedKey myaccount:+n9wC1twBBP4T84fioDIGi9bz/CrbwRaQL0LV4sACnw="
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Length', 3)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Length", 3)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write("""foo""".encode('ascii'))
+ request.wfile.write("""foo""".encode("ascii"))
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', custom_method=method)
+ handler.add(
+ "GET", "/azure/blob/myaccount/az_fake_bucket/resource", custom_method=method
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
def method(request):
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
h = request.headers
- if 'Authorization' not in h or \
- h['Authorization'] != 'SharedKey myaccount:EbxgYgvs7jUPNq14XrbmFBAj4eLE3ymYAHIGfMhUI9A=' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp' or \
- 'Accept-Encoding' not in h or h['Accept-Encoding'] != 'gzip':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Authorization" not in h
+ or h["Authorization"]
+ != "SharedKey myaccount:EbxgYgvs7jUPNq14XrbmFBAj4eLE3ymYAHIGfMhUI9A="
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ or "Accept-Encoding" not in h
+ or h["Accept-Encoding"] != "gzip"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Length', 3)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Length", 3)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write("""foo""".encode('ascii'))
+ request.wfile.write("""foo""".encode("ascii"))
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', custom_method=method)
+ handler.add(
+ "GET", "/azure/blob/myaccount/az_fake_bucket/resource", custom_method=method
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz_streaming/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz_streaming/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_fake_bucket/resource2.bin', 200,
- {'Content-Length': '1000000'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_fake_bucket/resource2.bin",
+ 200,
+ {"Content-Length": "1000000"},
+ )
with webserver.install_http_handler(handler):
- stat_res = gdal.VSIStatL('/vsiaz/az_fake_bucket/resource2.bin')
+ stat_res = gdal.VSIStatL("/vsiaz/az_fake_bucket/resource2.bin")
if stat_res is None or stat_res.size != 1000000:
if stat_res is not None:
print(stat_res.size)
@@ -170,10 +202,14 @@ def method(request):
pytest.fail()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_fake_bucket/resource2.bin', 200,
- {'Content-Length': 1000000})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_fake_bucket/resource2.bin",
+ 200,
+ {"Content-Length": 1000000},
+ )
with webserver.install_http_handler(handler):
- stat_res = gdal.VSIStatL('/vsiaz_streaming/az_fake_bucket/resource2.bin')
+ stat_res = gdal.VSIStatL("/vsiaz_streaming/az_fake_bucket/resource2.bin")
if stat_res is None or stat_res.size != 1000000:
if stat_res is not None:
print(stat_res.size)
@@ -183,12 +219,19 @@ def method(request):
# Test that we don't emit a Authorization header in AZURE_NO_SIGN_REQUEST
# mode, even if we have credentials
- with gdaltest.config_option('AZURE_NO_SIGN_REQUEST', 'YES'):
+ with gdaltest.config_option("AZURE_NO_SIGN_REQUEST", "YES"):
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_fake_bucket/test_AZURE_NO_SIGN_REQUEST.bin', 200,
- {'Content-Length': 1000000}, unexpected_headers = ['Authorization'])
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_fake_bucket/test_AZURE_NO_SIGN_REQUEST.bin",
+ 200,
+ {"Content-Length": 1000000},
+ unexpected_headers=["Authorization"],
+ )
with webserver.install_http_handler(handler):
- stat_res = gdal.VSIStatL('/vsiaz_streaming/az_fake_bucket/test_AZURE_NO_SIGN_REQUEST.bin')
+ stat_res = gdal.VSIStatL(
+ "/vsiaz_streaming/az_fake_bucket/test_AZURE_NO_SIGN_REQUEST.bin"
+ )
assert stat_res is not None
@@ -202,9 +245,12 @@ def test_vsiaz_fake_readdir():
pytest.skip()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&prefix=a_dir%20with_space%2F&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&prefix=a_dir%20with_space%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
a_dir with_space/
bla
@@ -218,10 +264,14 @@ def test_vsiaz_fake_readdir():
- """)
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&marker=bla&prefix=a_dir%20with_space%2F&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&marker=bla&prefix=a_dir%20with_space%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
a_dir with_space/
@@ -237,52 +287,80 @@ def test_vsiaz_fake_readdir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin')
+ f = open_for_read(
+ "/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ )
if f is None:
- if gdaltest.is_travis_branch('trusty'):
- pytest.skip('Skipped on trusty branch, but should be investigated')
+ if gdaltest.is_travis_branch("trusty"):
+ pytest.skip("Skipped on trusty branch, but should be investigated")
pytest.fail()
gdal.VSIFCloseL(f)
- dir_contents = gdal.ReadDir('/vsiaz/az_fake_bucket2/a_dir with_space')
- assert dir_contents == ['resource3 with_space.bin', 'resource4.bin', 'subdir']
- assert gdal.VSIStatL('/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin').size == 123456
- assert gdal.VSIStatL('/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin').mtime == 1
+ dir_contents = gdal.ReadDir("/vsiaz/az_fake_bucket2/a_dir with_space")
+ assert dir_contents == ["resource3 with_space.bin", "resource4.bin", "subdir"]
+ assert (
+ gdal.VSIStatL(
+ "/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ ).size
+ == 123456
+ )
+ assert (
+ gdal.VSIStatL(
+ "/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ ).mtime
+ == 1
+ )
# ReadDir on something known to be a file shouldn't cause network access
- dir_contents = gdal.ReadDir('/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin')
+ dir_contents = gdal.ReadDir(
+ "/vsiaz/az_fake_bucket2/a_dir with_space/resource3 with_space.bin"
+ )
assert dir_contents is None
# Test error on ReadDir()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&prefix=error_test%2F&restype=container', 500)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket2?comp=list&delimiter=%2F&prefix=error_test%2F&restype=container",
+ 500,
+ )
with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiaz/az_fake_bucket2/error_test/')
+ dir_contents = gdal.ReadDir("/vsiaz/az_fake_bucket2/error_test/")
assert dir_contents is None
# List containers (empty result)
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiaz/')
- assert dir_contents == ['.']
+ dir_contents = gdal.ReadDir("/vsiaz/")
+ assert dir_contents == ["."]
gdal.VSICurlClearCache()
# List containers
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -291,9 +369,14 @@ def test_vsiaz_fake_readdir():
bla
- """)
- handler.add('GET', '/azure/blob/myaccount/?comp=list&marker=bla', 200, {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list&marker=bla",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -301,10 +384,12 @@ def test_vsiaz_fake_readdir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- dir_contents = gdal.ReadDir('/vsiaz/')
- assert dir_contents == ['mycontainer1', 'mycontainer2']
+ dir_contents = gdal.ReadDir("/vsiaz/")
+ assert dir_contents == ["mycontainer1", "mycontainer2"]
+
###############################################################################
# Test AZURE_STORAGE_SAS_TOKEN option with fake server
@@ -317,17 +402,25 @@ def test_vsiaz_sas_fake():
gdal.VSICurlClearCache()
- with gdaltest.config_options({'AZURE_STORAGE_ACCOUNT': 'test',
- 'AZURE_STORAGE_SAS_TOKEN': 'sig=sas',
- 'CPL_AZURE_ENDPOINT' : 'http://127.0.0.1:%d/azure/blob/test' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'AZURE_STORAGE_CONNECTION_STRING': ''}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_ACCOUNT": "test",
+ "AZURE_STORAGE_SAS_TOKEN": "sig=sas",
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/test"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "AZURE_STORAGE_CONNECTION_STRING": "",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/test/test?comp=list&delimiter=%2F&restype=container&sig=sas', 200,
- {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/test/test?comp=list&delimiter=%2F&restype=container&sig=sas",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -340,12 +433,14 @@ def test_vsiaz_sas_fake():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- assert 'foo.bin' in gdal.ReadDir('/vsiaz/test')
+ assert "foo.bin" in gdal.ReadDir("/vsiaz/test")
+
+ assert gdal.VSIStatL("/vsiaz/test/foo.bin").size == 456789
- assert gdal.VSIStatL('/vsiaz/test/foo.bin').size == 456789
###############################################################################
# Test write
@@ -359,50 +454,65 @@ def test_vsiaz_fake_write():
gdal.VSICurlClearCache()
# Test creation of BlockBob
- f = gdal.VSIFOpenExL('/vsiaz/test_copy/file.tif', 'wb', 0, ['Content-Encoding=bar', 'x-ms-client-request-id=REQUEST_ID'])
+ f = gdal.VSIFOpenExL(
+ "/vsiaz/test_copy/file.tif",
+ "wb",
+ 0,
+ ["Content-Encoding=bar", "x-ms-client-request-id=REQUEST_ID"],
+ )
assert f is not None
handler = webserver.SequentialHandler()
def method(request):
h = request.headers
- if 'Authorization' not in h or \
- h['Authorization'] != 'SharedKey myaccount:QQv1veT5YQPRSJz8rymEvH2VBNNXnlGnqQhRLAu+MII=' or \
- 'Expect' not in h or h['Expect'] != '100-continue' or \
- 'Content-Length' not in h or h['Content-Length'] != '40000' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp' or \
- 'x-ms-blob-type' not in h or h['x-ms-blob-type'] != 'BlockBlob' or \
- 'Content-Type' not in h or h['Content-Type'] != 'image/tiff' or \
- 'Content-Encoding' not in h or h['Content-Encoding'] != 'bar' or \
- 'x-ms-client-request-id' not in h or h['x-ms-client-request-id'] != 'REQUEST_ID':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Authorization" not in h
+ or h["Authorization"]
+ != "SharedKey myaccount:QQv1veT5YQPRSJz8rymEvH2VBNNXnlGnqQhRLAu+MII="
+ or "Expect" not in h
+ or h["Expect"] != "100-continue"
+ or "Content-Length" not in h
+ or h["Content-Length"] != "40000"
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ or "x-ms-blob-type" not in h
+ or h["x-ms-blob-type"] != "BlockBlob"
+ or "Content-Type" not in h
+ or h["Content-Type"] != "image/tiff"
+ or "Content-Encoding" not in h
+ or h["Content-Encoding"] != "bar"
+ or "x-ms-client-request-id" not in h
+ or h["x-ms-client-request-id"] != "REQUEST_ID"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
- request.wfile.write('HTTP/1.1 100 Continue\r\n\r\n'.encode('ascii'))
- content = request.rfile.read(40000).decode('ascii')
+ request.protocol_version = "HTTP/1.1"
+ request.wfile.write("HTTP/1.1 100 Continue\r\n\r\n".encode("ascii"))
+ content = request.rfile.read(40000).decode("ascii")
if len(content) != 40000:
- sys.stderr.write('Bad headers: %s\n' % str(request.headers))
+ sys.stderr.write("Bad headers: %s\n" % str(request.headers))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', custom_method=method)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", custom_method=method)
with webserver.install_http_handler(handler):
- ret = gdal.VSIFWriteL('x' * 35000, 1, 35000, f)
- ret += gdal.VSIFWriteL('x' * 5000, 1, 5000, f)
+ ret = gdal.VSIFWriteL("x" * 35000, 1, 35000, f)
+ ret += gdal.VSIFWriteL("x" * 5000, 1, 5000, f)
if ret != 40000:
gdal.VSIFCloseL(f)
pytest.fail(ret)
gdal.VSIFCloseL(f)
# Simulate illegal read
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
assert f is not None
with gdaltest.error_handler():
ret = gdal.VSIFReadL(1, 1, f)
@@ -410,7 +520,7 @@ def method(request):
gdal.VSIFCloseL(f)
# Simulate illegal seek
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
assert f is not None
with gdaltest.error_handler():
ret = gdal.VSIFSeekL(f, 1, 0)
@@ -418,24 +528,24 @@ def method(request):
gdal.VSIFCloseL(f)
# Simulate failure when putting BlockBob
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
assert f is not None
handler = webserver.SequentialHandler()
def method(request):
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', custom_method=method)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", custom_method=method)
if gdal.VSIFSeekL(f, 0, 0) != 0:
gdal.VSIFCloseL(f)
pytest.fail()
- gdal.VSIFWriteL('x' * 35000, 1, 35000, f)
+ gdal.VSIFWriteL("x" * 35000, 1, 35000, f)
if gdal.VSIFTellL(f) != 35000:
gdal.VSIFCloseL(f)
@@ -464,139 +574,169 @@ def method(request):
pytest.fail(ret)
# Simulate creation of BlockBob over an existing blob of incompatible type
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
assert f is not None
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', 409)
- handler.add('DELETE', '/azure/blob/myaccount/test_copy/file.tif', 202)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', 201)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", 409)
+ handler.add("DELETE", "/azure/blob/myaccount/test_copy/file.tif", 202)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", 201)
with webserver.install_http_handler(handler):
gdal.VSIFCloseL(f)
# Test creation of AppendBlob
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', '10')
- f = gdal.VSIFOpenExL('/vsiaz/test_copy/file.tif', 'wb', 0, ['x-ms-client-request-id=REQUEST_ID'])
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', None)
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", "10")
+ f = gdal.VSIFOpenExL(
+ "/vsiaz/test_copy/file.tif", "wb", 0, ["x-ms-client-request-id=REQUEST_ID"]
+ )
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", None)
assert f is not None
handler = webserver.SequentialHandler()
def method(request):
h = request.headers
- if 'Authorization' not in h or \
- h['Authorization'] != 'SharedKey myaccount:DCVvJjXpnSkpAbuzpZU+ZnAiIo2Jy2oh8xyrHoU3ygw=' or \
- 'Content-Length' not in h or h['Content-Length'] != '0' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp' or \
- 'x-ms-blob-type' not in h or h['x-ms-blob-type'] != 'AppendBlob' or \
- 'x-ms-client-request-id' not in h or h['x-ms-client-request-id'] != 'REQUEST_ID':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Authorization" not in h
+ or h["Authorization"]
+ != "SharedKey myaccount:DCVvJjXpnSkpAbuzpZU+ZnAiIo2Jy2oh8xyrHoU3ygw="
+ or "Content-Length" not in h
+ or h["Content-Length"] != "0"
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ or "x-ms-blob-type" not in h
+ or h["x-ms-blob-type"] != "AppendBlob"
+ or "x-ms-client-request-id" not in h
+ or h["x-ms-client-request-id"] != "REQUEST_ID"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', custom_method=method)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", custom_method=method)
def method(request):
h = request.headers
- if 'Content-Length' not in h or h['Content-Length'] != '10' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp' or \
- 'x-ms-blob-type' not in h or h['x-ms-blob-type'] != 'AppendBlob' or \
- 'x-ms-blob-condition-appendpos' not in h or h['x-ms-blob-condition-appendpos'] != '0':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Content-Length" not in h
+ or h["Content-Length"] != "10"
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ or "x-ms-blob-type" not in h
+ or h["x-ms-blob-type"] != "AppendBlob"
+ or "x-ms-blob-condition-appendpos" not in h
+ or h["x-ms-blob-condition-appendpos"] != "0"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
- content = request.rfile.read(10).decode('ascii')
- if content != '0123456789':
- sys.stderr.write('Bad headers: %s\n' % str(request.headers))
+ request.protocol_version = "HTTP/1.1"
+ content = request.rfile.read(10).decode("ascii")
+ if content != "0123456789":
+ sys.stderr.write("Bad headers: %s\n" % str(request.headers))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif?comp=appendblock', custom_method=method)
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_copy/file.tif?comp=appendblock",
+ custom_method=method,
+ )
def method(request):
h = request.headers
- if 'Content-Length' not in h or h['Content-Length'] != '6' or \
- 'x-ms-date' not in h or h['x-ms-date'] != 'my_timestamp' or \
- 'x-ms-blob-type' not in h or h['x-ms-blob-type'] != 'AppendBlob' or \
- 'x-ms-blob-condition-appendpos' not in h or h['x-ms-blob-condition-appendpos'] != '10':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if (
+ "Content-Length" not in h
+ or h["Content-Length"] != "6"
+ or "x-ms-date" not in h
+ or h["x-ms-date"] != "my_timestamp"
+ or "x-ms-blob-type" not in h
+ or h["x-ms-blob-type"] != "AppendBlob"
+ or "x-ms-blob-condition-appendpos" not in h
+ or h["x-ms-blob-condition-appendpos"] != "10"
+ ):
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
- content = request.rfile.read(6).decode('ascii')
- if content != 'abcdef':
- sys.stderr.write('Bad headers: %s\n' % str(request.headers))
+ request.protocol_version = "HTTP/1.1"
+ content = request.rfile.read(6).decode("ascii")
+ if content != "abcdef":
+ sys.stderr.write("Bad headers: %s\n" % str(request.headers))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif?comp=appendblock', custom_method=method)
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_copy/file.tif?comp=appendblock",
+ custom_method=method,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.VSIFWriteL('0123456789abcdef', 1, 16, f)
+ ret = gdal.VSIFWriteL("0123456789abcdef", 1, 16, f)
if ret != 16:
gdal.VSIFCloseL(f)
pytest.fail(ret)
gdal.VSIFCloseL(f)
# Test failed creation of AppendBlob
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', '10')
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', None)
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", "10")
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", None)
assert f is not None
handler = webserver.SequentialHandler()
def method(request):
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', custom_method=method)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", custom_method=method)
with webserver.install_http_handler(handler):
with gdaltest.error_handler():
- ret = gdal.VSIFWriteL('0123456789abcdef', 1, 16, f)
+ ret = gdal.VSIFWriteL("0123456789abcdef", 1, 16, f)
if ret != 0:
gdal.VSIFCloseL(f)
pytest.fail(ret)
gdal.VSIFCloseL(f)
# Test failed writing of a block of an AppendBlob
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', '10')
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.tif', 'wb')
- gdal.SetConfigOption('VSIAZ_CHUNK_SIZE_BYTES', None)
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", "10")
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.tif", "wb")
+ gdal.SetConfigOption("VSIAZ_CHUNK_SIZE_BYTES", None)
assert f is not None
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif', 201)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.tif?comp=appendblock', 403)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif", 201)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.tif?comp=appendblock", 403)
with webserver.install_http_handler(handler):
with gdaltest.error_handler():
- ret = gdal.VSIFWriteL('0123456789abcdef', 1, 16, f)
+ ret = gdal.VSIFWriteL("0123456789abcdef", 1, 16, f)
if ret != 0:
gdal.VSIFCloseL(f)
pytest.fail(ret)
gdal.VSIFCloseL(f)
+
###############################################################################
# Test write with retry
@@ -609,35 +749,39 @@ def test_vsiaz_write_blockblob_retry():
gdal.VSICurlClearCache()
# Test creation of BlockBob
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.bin", "wb")
assert f is not None
- with gdaltest.config_options({'GDAL_HTTP_MAX_RETRY': '2',
- 'GDAL_HTTP_RETRY_DELAY': '0.01'}):
+ with gdaltest.config_options(
+ {"GDAL_HTTP_MAX_RETRY": "2", "GDAL_HTTP_RETRY_DELAY": "0.01"}
+ ):
handler = webserver.SequentialHandler()
def method(request):
- request.protocol_version = 'HTTP/1.1'
- request.wfile.write('HTTP/1.1 100 Continue\r\n\r\n'.encode('ascii'))
- content = request.rfile.read(3).decode('ascii')
+ request.protocol_version = "HTTP/1.1"
+ request.wfile.write("HTTP/1.1 100 Continue\r\n\r\n".encode("ascii"))
+ content = request.rfile.read(3).decode("ascii")
if len(content) != 3:
- sys.stderr.write('Bad headers: %s\n' % str(request.headers))
+ sys.stderr.write("Bad headers: %s\n" % str(request.headers))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin', 502)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin', custom_method=method)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin", 502)
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin", custom_method=method
+ )
with gdaltest.error_handler():
with webserver.install_http_handler(handler):
- assert gdal.VSIFWriteL('foo', 1, 3, f) == 3
+ assert gdal.VSIFWriteL("foo", 1, 3, f) == 3
gdal.VSIFCloseL(f)
+
###############################################################################
# Test write with retry
@@ -649,26 +793,39 @@ def test_vsiaz_write_appendblob_retry():
gdal.VSICurlClearCache()
- with gdaltest.config_options({'GDAL_HTTP_MAX_RETRY': '2',
- 'GDAL_HTTP_RETRY_DELAY': '0.01',
- 'VSIAZ_CHUNK_SIZE_BYTES': '10'}):
+ with gdaltest.config_options(
+ {
+ "GDAL_HTTP_MAX_RETRY": "2",
+ "GDAL_HTTP_RETRY_DELAY": "0.01",
+ "VSIAZ_CHUNK_SIZE_BYTES": "10",
+ }
+ ):
- f = gdal.VSIFOpenL('/vsiaz/test_copy/file.bin', 'wb')
+ f = gdal.VSIFOpenL("/vsiaz/test_copy/file.bin", "wb")
assert f is not None
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin', 502)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin', 201)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?comp=appendblock', 502)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?comp=appendblock', 201)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?comp=appendblock', 502)
- handler.add('PUT', '/azure/blob/myaccount/test_copy/file.bin?comp=appendblock', 201)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin", 502)
+ handler.add("PUT", "/azure/blob/myaccount/test_copy/file.bin", 201)
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?comp=appendblock", 502
+ )
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?comp=appendblock", 201
+ )
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?comp=appendblock", 502
+ )
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_copy/file.bin?comp=appendblock", 201
+ )
with gdaltest.error_handler():
with webserver.install_http_handler(handler):
- assert gdal.VSIFWriteL('0123456789abcdef', 1, 16, f) == 16
+ assert gdal.VSIFWriteL("0123456789abcdef", 1, 16, f) == 16
gdal.VSIFCloseL(f)
+
###############################################################################
# Test Unlink()
@@ -680,21 +837,42 @@ def test_vsiaz_fake_unlink():
# Success
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 200, {'Content-Length': '1'})
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 202, {'Connection': 'close'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 200,
+ {"Content-Length": "1"},
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 202,
+ {"Connection": "close"},
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Unlink('/vsiaz/az_bucket_test_unlink/myfile')
+ ret = gdal.Unlink("/vsiaz/az_bucket_test_unlink/myfile")
assert ret == 0
# Failure
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 200, {'Content-Length': '1'})
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_unlink/myfile', 400, {'Connection': 'close'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 200,
+ {"Content-Length": "1"},
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_unlink/myfile",
+ 400,
+ {"Connection": "close"},
+ )
with webserver.install_http_handler(handler):
with gdaltest.error_handler():
- ret = gdal.Unlink('/vsiaz/az_bucket_test_unlink/myfile')
+ ret = gdal.Unlink("/vsiaz/az_bucket_test_unlink/myfile")
assert ret == -1
+
###############################################################################
# Test Mkdir() / Rmdir()
@@ -705,24 +883,40 @@ def test_vsiaz_fake_mkdir_rmdir():
pytest.skip()
# Invalid name
- ret = gdal.Mkdir('/vsiaz', 0)
+ ret = gdal.Mkdir("/vsiaz", 0)
assert ret != 0
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir/', 404, {'Connection': 'close'})
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container', 200, {'Connection': 'close'})
- handler.add('PUT', '/azure/blob/myaccount/az_bucket_test_mkdir/dir/.gdal_marker_for_dir', 201)
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir/",
+ 404,
+ {"Connection": "close"},
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container",
+ 200,
+ {"Connection": "close"},
+ )
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir/.gdal_marker_for_dir",
+ 201,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Mkdir('/vsiaz/az_bucket_test_mkdir/dir', 0)
+ ret = gdal.Mkdir("/vsiaz/az_bucket_test_mkdir/dir", 0)
assert ret == 0
# Try creating already existing directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir/', 404)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container',
- 200,
- {'Connection': 'close', 'Content-type': 'application/xml'},
- """
+ handler.add("HEAD", "/azure/blob/myaccount/az_bucket_test_mkdir/dir/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container",
+ 200,
+ {"Connection": "close", "Content-type": "application/xml"},
+ """
dir/
@@ -731,22 +925,25 @@ def test_vsiaz_fake_mkdir_rmdir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Mkdir('/vsiaz/az_bucket_test_mkdir/dir', 0)
+ ret = gdal.Mkdir("/vsiaz/az_bucket_test_mkdir/dir", 0)
assert ret != 0
# Invalid name
- ret = gdal.Rmdir('/vsiaz')
+ ret = gdal.Rmdir("/vsiaz")
assert ret != 0
# Not a directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/it_is_a_file/', 404)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=it_is_a_file%2F&restype=container',
- 200,
- {'Connection': 'close', 'Content-type': 'application/xml'},
- """
+ handler.add("HEAD", "/azure/blob/myaccount/az_bucket_test_mkdir/it_is_a_file/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=it_is_a_file%2F&restype=container",
+ 200,
+ {"Connection": "close", "Content-type": "application/xml"},
+ """
az_bucket_test_mkdir/
@@ -755,18 +952,25 @@ def test_vsiaz_fake_mkdir_rmdir():
- """)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=it_is_a_file%2F&restype=container', 200)
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=it_is_a_file%2F&restype=container",
+ 200,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiaz/az_bucket_test_mkdir/it_is_a_file')
+ ret = gdal.Rmdir("/vsiaz/az_bucket_test_mkdir/it_is_a_file")
assert ret != 0
# Valid
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container',
- 200,
- {'Connection': 'close', 'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container",
+ 200,
+ {"Connection": "close", "Content-type": "application/xml"},
+ """
dir/
@@ -775,10 +979,15 @@ def test_vsiaz_fake_mkdir_rmdir():
- """)
- handler.add('DELETE', '/azure/blob/myaccount/az_bucket_test_mkdir/dir/.gdal_marker_for_dir', 202)
+ """,
+ )
+ handler.add(
+ "DELETE",
+ "/azure/blob/myaccount/az_bucket_test_mkdir/dir/.gdal_marker_for_dir",
+ 202,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiaz/az_bucket_test_mkdir/dir')
+ ret = gdal.Rmdir("/vsiaz/az_bucket_test_mkdir/dir")
assert ret == 0
# Try deleting already deleted directory
@@ -786,19 +995,25 @@ def test_vsiaz_fake_mkdir_rmdir():
# as soon as the last object in it is removed. So when directories are created
# without .gdal_marker_for_dir they will disappear without explicit removal
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir/', 404)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container', 200)
+ handler.add("HEAD", "/azure/blob/myaccount/az_bucket_test_mkdir/dir/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir%2F&restype=container",
+ 200,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiaz/az_bucket_test_mkdir/dir')
+ ret = gdal.Rmdir("/vsiaz/az_bucket_test_mkdir/dir")
assert ret == 0
# Try deleting non-empty directory
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/az_bucket_test_mkdir/dir_nonempty/', 404)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir_nonempty%2F&restype=container',
- 200,
- {'Connection': 'close', 'Content-type': 'application/xml'},
- """
+ handler.add("HEAD", "/azure/blob/myaccount/az_bucket_test_mkdir/dir_nonempty/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir_nonempty%2F&restype=container",
+ 200,
+ {"Connection": "close", "Content-type": "application/xml"},
+ """
dir_nonempty/
@@ -807,11 +1022,14 @@ def test_vsiaz_fake_mkdir_rmdir():
- """)
- handler.add('GET', '/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir_nonempty%2F&restype=container',
- 200,
- {'Connection': 'close', 'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_bucket_test_mkdir?comp=list&delimiter=%2F&maxresults=1&prefix=dir_nonempty%2F&restype=container",
+ 200,
+ {"Connection": "close", "Content-type": "application/xml"},
+ """
dir_nonempty/
@@ -820,11 +1038,13 @@ def test_vsiaz_fake_mkdir_rmdir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiaz/az_bucket_test_mkdir/dir_nonempty')
+ ret = gdal.Rmdir("/vsiaz/az_bucket_test_mkdir/dir_nonempty")
assert ret != 0
+
###############################################################################
# Test Mkdir() / Rmdir() on a container
@@ -837,38 +1057,54 @@ def test_vsiaz_fake_mkdir_rmdir_container():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
- """)
- handler.add('HEAD', "/azure/blob/myaccount/new_container", 400)
- handler.add('PUT', "/azure/blob/myaccount/new_container?restype=container", 201)
+ """,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/new_container", 400)
+ handler.add("PUT", "/azure/blob/myaccount/new_container?restype=container", 201)
with webserver.install_http_handler(handler):
- ret = gdal.Mkdir('/vsiaz/new_container', 0o755)
+ ret = gdal.Mkdir("/vsiaz/new_container", 0o755)
assert ret == 0
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
new_container
- """)
- handler.add('GET', '/azure/blob/myaccount/new_container?comp=list&delimiter=%2F&maxresults=1&restype=container', 200, {'Content-type': 'application/xml'},
- """"
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/new_container?comp=list&delimiter=%2F&maxresults=1&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """"
- """)
- handler.add('DELETE', "/azure/blob/myaccount/new_container?restype=container", 202)
+ """,
+ )
+ handler.add("DELETE", "/azure/blob/myaccount/new_container?restype=container", 202)
with webserver.install_http_handler(handler):
- ret = gdal.Rmdir('/vsiaz/new_container')
+ ret = gdal.Rmdir("/vsiaz/new_container")
assert ret == 0
+
###############################################################################
@@ -877,15 +1113,24 @@ def test_vsiaz_fake_test_BlobEndpointInConnectionString():
if gdaltest.webserver_port == 0:
pytest.skip()
- with gdaltest.config_option('AZURE_STORAGE_CONNECTION_STRING',
- 'DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/myaccount' % gdaltest.webserver_port):
+ with gdaltest.config_option(
+ "AZURE_STORAGE_CONNECTION_STRING",
+ "DefaultEndpointsProtocol=http;AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/myaccount"
+ % gdaltest.webserver_port,
+ ):
+
+ signed_url = gdal.GetSignedURL("/vsiaz/az_fake_bucket/resource")
+ assert (
+ "http://127.0.0.1:%d/myaccount/az_fake_bucket/resource"
+ % gdaltest.webserver_port
+ in signed_url
+ )
- signed_url = gdal.GetSignedURL('/vsiaz/az_fake_bucket/resource')
- assert 'http://127.0.0.1:%d/myaccount/az_fake_bucket/resource' % gdaltest.webserver_port in signed_url
###############################################################################
# Test rename
+
def test_vsiaz_fake_rename():
if gdaltest.webserver_port == 0:
@@ -893,31 +1138,43 @@ def test_vsiaz_fake_rename():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/source.txt', 200,
- {'Content-Length': '3'})
- handler.add('HEAD', '/azure/blob/myaccount/test/target.txt', 404)
- handler.add('GET', '/azure/blob/myaccount/test?comp=list&delimiter=%2F&maxresults=1&prefix=target.txt%2F&restype=container', 200)
+ handler.add(
+ "HEAD", "/azure/blob/myaccount/test/source.txt", 200, {"Content-Length": "3"}
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test/target.txt", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test?comp=list&delimiter=%2F&maxresults=1&prefix=target.txt%2F&restype=container",
+ 200,
+ )
def method(request):
- if request.headers['Content-Length'] != '0':
- sys.stderr.write('Did not get expected headers: %s\n' % str(request.headers))
+ if request.headers["Content-Length"] != "0":
+ sys.stderr.write(
+ "Did not get expected headers: %s\n" % str(request.headers)
+ )
request.send_response(400)
return
- expected = 'http://127.0.0.1:%d/azure/blob/myaccount/test/source.txt' % gdaltest.webserver_port
- if request.headers['x-ms-copy-source'] != expected:
- sys.stderr.write('Did not get expected headers: %s\n' % str(request.headers))
+ expected = (
+ "http://127.0.0.1:%d/azure/blob/myaccount/test/source.txt"
+ % gdaltest.webserver_port
+ )
+ if request.headers["x-ms-copy-source"] != expected:
+ sys.stderr.write(
+ "Did not get expected headers: %s\n" % str(request.headers)
+ )
request.send_response(400)
return
request.send_response(202)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test/target.txt', custom_method=method)
- handler.add('DELETE', '/azure/blob/myaccount/test/source.txt', 202)
+ handler.add("PUT", "/azure/blob/myaccount/test/target.txt", custom_method=method)
+ handler.add("DELETE", "/azure/blob/myaccount/test/source.txt", 202)
with webserver.install_http_handler(handler):
- assert gdal.Rename( '/vsiaz/test/source.txt', '/vsiaz/test/target.txt') == 0
+ assert gdal.Rename("/vsiaz/test/source.txt", "/vsiaz/test/target.txt") == 0
###############################################################################
@@ -931,8 +1188,12 @@ def test_vsiaz_opendir():
# Unlimited depth
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/opendir?comp=list&restype=container', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/opendir?comp=list&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -954,23 +1215,24 @@ def test_vsiaz_opendir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- d = gdal.OpenDir('/vsiaz/opendir')
+ d = gdal.OpenDir("/vsiaz/opendir")
assert d is not None
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'test.txt'
+ assert entry.name == "test.txt"
assert entry.size == 40
assert entry.mode == 32768
assert entry.mtime == 1
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'subdir/'
+ assert entry.name == "subdir/"
assert entry.mode == 16384
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'subdir/test.txt'
+ assert entry.name == "subdir/test.txt"
assert entry.size == 4
assert entry.mode == 32768
@@ -981,8 +1243,12 @@ def test_vsiaz_opendir():
# Prefix filtering on root of bucket
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/opendir?comp=list&prefix=my_prefix&restype=container', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/opendir?comp=list&prefix=my_prefix&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
my_prefix
@@ -994,13 +1260,14 @@ def test_vsiaz_opendir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- d = gdal.OpenDir('/vsiaz/opendir', -1, ['PREFIX=my_prefix'])
+ d = gdal.OpenDir("/vsiaz/opendir", -1, ["PREFIX=my_prefix"])
assert d is not None
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'my_prefix_test.txt'
+ assert entry.name == "my_prefix_test.txt"
assert entry.size == 40
assert entry.mode == 32768
assert entry.mtime == 1
@@ -1012,8 +1279,12 @@ def test_vsiaz_opendir():
# Prefix filtering on root of subdir
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/opendir?comp=list&prefix=some_dir%2Fmy_prefix&restype=container', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/opendir?comp=list&prefix=some_dir%2Fmy_prefix&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
some_dir/my_prefix
@@ -1025,13 +1296,14 @@ def test_vsiaz_opendir():
- """)
+ """,
+ )
with webserver.install_http_handler(handler):
- d = gdal.OpenDir('/vsiaz/opendir/some_dir', -1, ['PREFIX=my_prefix'])
+ d = gdal.OpenDir("/vsiaz/opendir/some_dir", -1, ["PREFIX=my_prefix"])
assert d is not None
entry = gdal.GetNextDirEntry(d)
- assert entry.name == 'my_prefix_test.txt'
+ assert entry.name == "my_prefix_test.txt"
assert entry.size == 40
assert entry.mode == 32768
assert entry.mtime == 1
@@ -1042,16 +1314,29 @@ def test_vsiaz_opendir():
gdal.CloseDir(d)
# No network access done
- s = gdal.VSIStatL('/vsiaz/opendir/some_dir/my_prefix_test.txt',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG |gdal.VSI_STAT_CACHE_ONLY)
+ s = gdal.VSIStatL(
+ "/vsiaz/opendir/some_dir/my_prefix_test.txt",
+ gdal.VSI_STAT_EXISTS_FLAG
+ | gdal.VSI_STAT_NATURE_FLAG
+ | gdal.VSI_STAT_SIZE_FLAG
+ | gdal.VSI_STAT_CACHE_ONLY,
+ )
assert s
assert (s.mode & 32768) != 0
assert s.size == 40
assert s.mtime == 1
# No network access done
- assert gdal.VSIStatL('/vsiaz/opendir/some_dir/i_do_not_exist.txt',
- gdal.VSI_STAT_EXISTS_FLAG | gdal.VSI_STAT_NATURE_FLAG | gdal.VSI_STAT_SIZE_FLAG | gdal.VSI_STAT_CACHE_ONLY) is None
+ assert (
+ gdal.VSIStatL(
+ "/vsiaz/opendir/some_dir/i_do_not_exist.txt",
+ gdal.VSI_STAT_EXISTS_FLAG
+ | gdal.VSI_STAT_NATURE_FLAG
+ | gdal.VSI_STAT_SIZE_FLAG
+ | gdal.VSI_STAT_CACHE_ONLY,
+ )
+ is None
+ )
###############################################################################
@@ -1064,8 +1349,12 @@ def test_vsiaz_rmdirrecursive():
pytest.skip()
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/rmdirrec?comp=list&prefix=subdir%2F&restype=container', 200, {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/rmdirrec?comp=list&prefix=subdir%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
subdir/
@@ -1087,15 +1376,24 @@ def test_vsiaz_rmdirrecursive():
- """)
- handler.add('DELETE', '/azure/blob/myaccount/rmdirrec/subdir/test.txt', 202)
- handler.add('DELETE', '/azure/blob/myaccount/rmdirrec/subdir/subdir2/test.txt', 202)
- handler.add('HEAD', '/azure/blob/myaccount/rmdirrec/subdir/subdir2/', 404)
- handler.add('GET', '/azure/blob/myaccount/rmdirrec?comp=list&delimiter=%2F&maxresults=1&prefix=subdir%2Fsubdir2%2F&restype=container', 200)
- handler.add('HEAD', '/azure/blob/myaccount/rmdirrec/subdir/', 404)
- handler.add('GET', '/azure/blob/myaccount/rmdirrec?comp=list&delimiter=%2F&maxresults=1&prefix=subdir%2F&restype=container', 200)
+ """,
+ )
+ handler.add("DELETE", "/azure/blob/myaccount/rmdirrec/subdir/test.txt", 202)
+ handler.add("DELETE", "/azure/blob/myaccount/rmdirrec/subdir/subdir2/test.txt", 202)
+ handler.add("HEAD", "/azure/blob/myaccount/rmdirrec/subdir/subdir2/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/rmdirrec?comp=list&delimiter=%2F&maxresults=1&prefix=subdir%2Fsubdir2%2F&restype=container",
+ 200,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/rmdirrec/subdir/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/rmdirrec?comp=list&delimiter=%2F&maxresults=1&prefix=subdir%2F&restype=container",
+ 200,
+ )
with webserver.install_http_handler(handler):
- assert gdal.RmdirRecursive('/vsiaz/rmdirrec/subdir') == 0
+ assert gdal.RmdirRecursive("/vsiaz/rmdirrec/subdir") == 0
###############################################################################
@@ -1105,47 +1403,64 @@ def test_vsiaz_rmdirrecursive():
def test_vsiaz_fake_sync_multithreaded_upload_chunk_size():
if gdaltest.is_github_workflow_mac():
- pytest.xfail('Failure. See https://github.com/rouault/gdal/runs/1329425333?check_suite_focus=true')
+ pytest.xfail(
+ "Failure. See https://github.com/rouault/gdal/runs/1329425333?check_suite_focus=true"
+ )
if gdaltest.webserver_port == 0:
pytest.skip()
gdal.VSICurlClearCache()
- gdal.Mkdir('/vsimem/test', 0)
- gdal.FileFromMemBuffer('/vsimem/test/foo', 'foo\n')
+ gdal.Mkdir("/vsimem/test", 0)
+ gdal.FileFromMemBuffer("/vsimem/test/foo", "foo\n")
- tab = [ -1 ]
+ tab = [-1]
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/test_bucket?comp=list&prefix=test%2F&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test_bucket?comp=list&prefix=test%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
test/
- """)
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/test', 404)
- handler.add('GET', '/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=test%2F&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/test", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=test%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
test/
- """)
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200,
- {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
- """)
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket', 404)
- handler.add('GET', '/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -1154,75 +1469,100 @@ def test_vsiaz_fake_sync_multithreaded_upload_chunk_size():
- """)
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/test/', 404)
- handler.add('GET', '/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=test%2F&restype=container', 200,
- {'Content-type': 'application/xml'},
- """
+ """,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/test/", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=test%2F&restype=container",
+ 200,
+ {"Content-type": "application/xml"},
+ """
test/
- """)
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/test/.gdal_marker_for_dir', 201)
+ """,
+ )
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test_bucket/test/.gdal_marker_for_dir", 201
+ )
# Simulate an existing blob of another type
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000001&comp=block',
- 409,
- expected_headers={'Content-Length': '3'})
-
- handler.add('DELETE', '/azure/blob/myaccount/test_bucket/test/foo', 202)
-
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000001&comp=block',
- 201,
- expected_headers={'Content-Length': '3'})
-
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000002&comp=block',
- 201,
- expected_headers={'Content-Length': '1'})
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000001&comp=block",
+ 409,
+ expected_headers={"Content-Length": "3"},
+ )
+
+ handler.add("DELETE", "/azure/blob/myaccount/test_bucket/test/foo", 202)
+
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000001&comp=block",
+ 201,
+ expected_headers={"Content-Length": "3"},
+ )
+
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/test/foo?blockid=000000000002&comp=block",
+ 201,
+ expected_headers={"Content-Length": "1"},
+ )
def method(request):
h = request.headers
- if 'Content-Length' not in h or h['Content-Length'] != '124':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if "Content-Length" not in h or h["Content-Length"] != "124":
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
- request.wfile.write('HTTP/1.1 100 Continue\r\n\r\n'.encode('ascii'))
- content = request.rfile.read(124).decode('ascii')
- if content != """
+ request.protocol_version = "HTTP/1.1"
+ request.wfile.write("HTTP/1.1 100 Continue\r\n\r\n".encode("ascii"))
+ content = request.rfile.read(124).decode("ascii")
+ if (
+ content
+ != """
000000000001
000000000002
-""":
- sys.stderr.write('Bad content: %s\n' % str(content))
+"""
+ ):
+ sys.stderr.write("Bad content: %s\n" % str(content))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/test/foo?comp=blocklist',
- custom_method = method)
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/test/foo?comp=blocklist",
+ custom_method=method,
+ )
def cbk(pct, _, tab):
assert pct >= tab[0]
tab[0] = pct
return True
- with gdaltest.config_option('VSIS3_SIMULATE_THREADING', 'YES'):
+ with gdaltest.config_option("VSIS3_SIMULATE_THREADING", "YES"):
with webserver.install_http_handler(handler):
- assert gdal.Sync('/vsimem/test',
- '/vsiaz/test_bucket',
- options=['NUM_THREADS=1', 'CHUNK_SIZE=3'],
- callback=cbk, callback_data=tab)
+ assert gdal.Sync(
+ "/vsimem/test",
+ "/vsiaz/test_bucket",
+ options=["NUM_THREADS=1", "CHUNK_SIZE=3"],
+ callback=cbk,
+ callback_data=tab,
+ )
assert tab[0] == 1.0
- gdal.RmdirRecursive('/vsimem/test')
+ gdal.RmdirRecursive("/vsimem/test")
###############################################################################
@@ -1236,13 +1576,16 @@ def test_vsiaz_fake_sync_multithreaded_upload_single_file():
gdal.VSICurlClearCache()
- gdal.Mkdir('/vsimem/test', 0)
- gdal.FileFromMemBuffer('/vsimem/test/foo', 'foo\n')
+ gdal.Mkdir("/vsimem/test", 0)
+ gdal.FileFromMemBuffer("/vsimem/test/foo", "foo\n")
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/?comp=list', 200,
- {'Content-type': 'application/xml'},
- """
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/?comp=list",
+ 200,
+ {"Content-type": "application/xml"},
+ """
@@ -1251,53 +1594,73 @@ def test_vsiaz_fake_sync_multithreaded_upload_single_file():
- """)
- handler.add('HEAD', '/azure/blob/myaccount/test_bucket/foo', 404)
- handler.add('GET', '/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=foo%2F&restype=container', 200)
-
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/foo?blockid=000000000001&comp=block',
- 201,
- expected_headers={'Content-Length': '3'})
-
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/foo?blockid=000000000002&comp=block',
- 201,
- expected_headers={'Content-Length': '1'})
+ """,
+ )
+ handler.add("HEAD", "/azure/blob/myaccount/test_bucket/foo", 404)
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test_bucket?comp=list&delimiter=%2F&maxresults=1&prefix=foo%2F&restype=container",
+ 200,
+ )
+
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/foo?blockid=000000000001&comp=block",
+ 201,
+ expected_headers={"Content-Length": "3"},
+ )
+
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/foo?blockid=000000000002&comp=block",
+ 201,
+ expected_headers={"Content-Length": "1"},
+ )
def method(request):
h = request.headers
- if 'Content-Length' not in h or h['Content-Length'] != '124':
- sys.stderr.write('Bad headers: %s\n' % str(h))
+ if "Content-Length" not in h or h["Content-Length"] != "124":
+ sys.stderr.write("Bad headers: %s\n" % str(h))
request.send_response(403)
return
- request.protocol_version = 'HTTP/1.1'
- request.wfile.write('HTTP/1.1 100 Continue\r\n\r\n'.encode('ascii'))
- content = request.rfile.read(124).decode('ascii')
- if content != """
+ request.protocol_version = "HTTP/1.1"
+ request.wfile.write("HTTP/1.1 100 Continue\r\n\r\n".encode("ascii"))
+ content = request.rfile.read(124).decode("ascii")
+ if (
+ content
+ != """
000000000001
000000000002
-""":
- sys.stderr.write('Bad content: %s\n' % str(content))
+"""
+ ):
+ sys.stderr.write("Bad content: %s\n" % str(content))
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
return
request.send_response(201)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
- handler.add('PUT', '/azure/blob/myaccount/test_bucket/foo?comp=blocklist',
- custom_method = method)
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test_bucket/foo?comp=blocklist",
+ custom_method=method,
+ )
- with gdaltest.config_option('VSIS3_SIMULATE_THREADING', 'YES'):
+ with gdaltest.config_option("VSIS3_SIMULATE_THREADING", "YES"):
with webserver.install_http_handler(handler):
- assert gdal.Sync('/vsimem/test/foo',
- '/vsiaz/test_bucket',
- options=['NUM_THREADS=1', 'CHUNK_SIZE=3'])
+ assert gdal.Sync(
+ "/vsimem/test/foo",
+ "/vsiaz/test_bucket",
+ options=["NUM_THREADS=1", "CHUNK_SIZE=3"],
+ )
+
+ gdal.RmdirRecursive("/vsimem/test")
- gdal.RmdirRecursive('/vsimem/test')
###############################################################################
# Read credentials from simulated Azure VM
@@ -1310,51 +1673,82 @@ def test_vsiaz_read_credentials_simulated_azure_vm():
gdal.VSICurlClearCache()
- with gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING' : '',
- 'AZURE_STORAGE_ACCOUNT': 'myaccount',
- 'CPL_AZURE_ENDPOINT' : 'http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'CPL_AZURE_VM_API_ROOT_URL': 'http://localhost:%d' % gdaltest.webserver_port}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": "",
+ "AZURE_STORAGE_ACCOUNT": "myaccount",
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "CPL_AZURE_VM_API_ROOT_URL": "http://localhost:%d"
+ % gdaltest.webserver_port,
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F', 200, {},
- """{
+ handler.add(
+ "GET",
+ "/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F",
+ 200,
+ {},
+ """{
"access_token": "my_bearer",
"expires_on": "99999999999",
}""",
- expected_headers={'Metadata': 'true'})
-
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', 200,
- {'Content-Length': 3},
- 'foo',
- expected_headers={'Authorization': 'Bearer my_bearer', 'x-ms-version': '2019-12-12'})
+ expected_headers={"Metadata": "true"},
+ )
+
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket/resource",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ expected_headers={
+ "Authorization": "Bearer my_bearer",
+ "x-ms-version": "2019-12-12",
+ },
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
# Set a fake URL to check that credentials re-use works
- with gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING' : '',
- 'AZURE_STORAGE_ACCOUNT': 'myaccount',
- 'CPL_AZURE_ENDPOINT' : 'http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'CPL_AZURE_VM_API_ROOT_URL': 'invalid'}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": "",
+ "AZURE_STORAGE_ACCOUNT": "myaccount",
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "CPL_AZURE_VM_API_ROOT_URL": "invalid",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/bar', 200,
- {'Content-Length': 3},
- 'bar',
- expected_headers={'Authorization': 'Bearer my_bearer', 'x-ms-version': '2019-12-12'})
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket/bar",
+ 200,
+ {"Content-Length": 3},
+ "bar",
+ expected_headers={
+ "Authorization": "Bearer my_bearer",
+ "x-ms-version": "2019-12-12",
+ },
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/bar')
+ f = open_for_read("/vsiaz/az_fake_bucket/bar")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'bar'
+ assert data == "bar"
+
###############################################################################
# Read credentials from simulated Azure VM with expiration
@@ -1367,37 +1761,60 @@ def test_vsiaz_read_credentials_simulated_azure_vm_expiration():
gdal.VSICurlClearCache()
- with gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING' : '',
- 'AZURE_STORAGE_ACCOUNT': 'myaccount',
- 'CPL_AZURE_ENDPOINT' : 'http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'CPL_AZURE_VM_API_ROOT_URL': 'http://localhost:%d' % gdaltest.webserver_port}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": "",
+ "AZURE_STORAGE_ACCOUNT": "myaccount",
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "CPL_AZURE_VM_API_ROOT_URL": "http://localhost:%d"
+ % gdaltest.webserver_port,
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F', 200, {},
- """{
+ handler.add(
+ "GET",
+ "/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F",
+ 200,
+ {},
+ """{
"access_token": "my_bearer",
"expires_on": "1000",
}""",
- expected_headers={'Metadata': 'true'})
+ expected_headers={"Metadata": "true"},
+ )
# Credentials requested again since they are expired
- handler.add('GET', '/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F', 200, {},
- """{
+ handler.add(
+ "GET",
+ "/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F",
+ 200,
+ {},
+ """{
"access_token": "my_bearer",
"expires_on": "1000",
}""",
- expected_headers={'Metadata': 'true'})
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', 200,
- {'Content-Length': 3},
- 'foo',
- expected_headers={'Authorization': 'Bearer my_bearer', 'x-ms-version': '2019-12-12'})
+ expected_headers={"Metadata": "true"},
+ )
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket/resource",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ expected_headers={
+ "Authorization": "Bearer my_bearer",
+ "x-ms-version": "2019-12-12",
+ },
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
###############################################################################
@@ -1412,54 +1829,87 @@ def test_vsiaz_fake_metadata():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/azure/blob/myaccount/test/foo.bin', 200, {'Content-Length': '3', 'x-ms-foo': 'bar'})
+ handler.add(
+ "HEAD",
+ "/azure/blob/myaccount/test/foo.bin",
+ 200,
+ {"Content-Length": "3", "x-ms-foo": "bar"},
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiaz/test/foo.bin', 'HEADERS')
- assert 'x-ms-foo' in md
- assert md['x-ms-foo'] == 'bar'
+ md = gdal.GetFileMetadata("/vsiaz/test/foo.bin", "HEADERS")
+ assert "x-ms-foo" in md
+ assert md["x-ms-foo"] == "bar"
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/test/foo.bin?comp=metadata', 200, {'x-ms-meta-foo': 'bar'})
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test/foo.bin?comp=metadata",
+ 200,
+ {"x-ms-meta-foo": "bar"},
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiaz/test/foo.bin', 'METADATA')
- assert 'x-ms-meta-foo' in md
- assert md['x-ms-meta-foo'] == 'bar'
+ md = gdal.GetFileMetadata("/vsiaz/test/foo.bin", "METADATA")
+ assert "x-ms-meta-foo" in md
+ assert md["x-ms-meta-foo"] == "bar"
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/test/foo.bin?comp=tags', 200, {},
- """foobar""")
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/test/foo.bin?comp=tags",
+ 200,
+ {},
+ """foobar""",
+ )
with webserver.install_http_handler(handler):
- md = gdal.GetFileMetadata('/vsiaz/test/foo.bin', 'TAGS')
- assert 'foo' in md
- assert md['foo'] == 'bar'
+ md = gdal.GetFileMetadata("/vsiaz/test/foo.bin", "TAGS")
+ assert "foo" in md
+ assert md["foo"] == "bar"
# Error case
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/test/foo.bin?comp=metadata', 404)
+ handler.add("GET", "/azure/blob/myaccount/test/foo.bin?comp=metadata", 404)
with webserver.install_http_handler(handler):
- assert gdal.GetFileMetadata('/vsiaz/test/foo.bin', 'METADATA') == {}
+ assert gdal.GetFileMetadata("/vsiaz/test/foo.bin", "METADATA") == {}
# SetMetadata()
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test/foo.bin?comp=properties', 200, expected_headers={'x-ms-foo': 'bar'})
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test/foo.bin?comp=properties",
+ 200,
+ expected_headers={"x-ms-foo": "bar"},
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiaz/test/foo.bin', {'x-ms-foo': 'bar'}, 'PROPERTIES')
+ assert gdal.SetFileMetadata(
+ "/vsiaz/test/foo.bin", {"x-ms-foo": "bar"}, "PROPERTIES"
+ )
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test/foo.bin?comp=metadata', 200, expected_headers={'x-ms-meta-foo': 'bar'})
+ handler.add(
+ "PUT",
+ "/azure/blob/myaccount/test/foo.bin?comp=metadata",
+ 200,
+ expected_headers={"x-ms-meta-foo": "bar"},
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiaz/test/foo.bin', {'x-ms-meta-foo': 'bar'}, 'METADATA')
+ assert gdal.SetFileMetadata(
+ "/vsiaz/test/foo.bin", {"x-ms-meta-foo": "bar"}, "METADATA"
+ )
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test/foo.bin?comp=tags', 204, expected_body=b'')
+ handler.add(
+ "PUT", "/azure/blob/myaccount/test/foo.bin?comp=tags", 204, expected_body=b""
+ )
with webserver.install_http_handler(handler):
- assert gdal.SetFileMetadata('/vsiaz/test/foo.bin', {'FOO': 'BAR'}, 'TAGS')
+ assert gdal.SetFileMetadata("/vsiaz/test/foo.bin", {"FOO": "BAR"}, "TAGS")
# Error case
handler = webserver.SequentialHandler()
- handler.add('PUT', '/azure/blob/myaccount/test/foo.bin?comp=metadata', 404)
+ handler.add("PUT", "/azure/blob/myaccount/test/foo.bin?comp=metadata", 404)
with webserver.install_http_handler(handler):
- assert not gdal.SetFileMetadata('/vsiaz/test/foo.bin', {'x-ms-meta-foo': 'bar'}, 'METADATA')
+ assert not gdal.SetFileMetadata(
+ "/vsiaz/test/foo.bin", {"x-ms-meta-foo": "bar"}, "METADATA"
+ )
###############################################################################
@@ -1473,28 +1923,42 @@ def test_vsiaz_read_credentials_config_file_connection_string():
gdal.VSICurlClearCache()
- config_content = """
+ config_content = (
+ """
[unrelated]
account=foo
[storage]
connection_string = DefaultEndpointsProtocol=http;AccountName=myaccount2;AccountKey=MY_ACCOUNT_KEY;BlobEndpoint=http://127.0.0.1:%d/azure/blob/myaccount2
-""" % gdaltest.webserver_port
-
- with gdaltest.tempfile('/vsimem/azure_config_dir/config', config_content), \
- gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING': None,
- 'AZURE_CONFIG_DIR': '/vsimem/azure_config_dir'}):
+"""
+ % gdaltest.webserver_port
+ )
+
+ with gdaltest.tempfile(
+ "/vsimem/azure_config_dir/config", config_content
+ ), gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": None,
+ "AZURE_CONFIG_DIR": "/vsimem/azure_config_dir",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount2/az_fake_bucket/resource', 200,
- {'Content-Length': 3},
- 'foo',
- expected_headers={'Authorization': 'SharedKey myaccount2:Cm8BtA8Wkst7zAdGmcoKoR0tWuj2rzO+WpfBwWQ4RrY='})
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount2/az_fake_bucket/resource",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ expected_headers={
+ "Authorization": "SharedKey myaccount2:Cm8BtA8Wkst7zAdGmcoKoR0tWuj2rzO+WpfBwWQ4RrY="
+ },
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
###############################################################################
@@ -1516,23 +1980,35 @@ def test_vsiaz_read_credentials_config_file_account_and_key():
key = MY_ACCOUNT_KEY
"""
- with gdaltest.tempfile('/vsimem/azure_config_dir/config', config_content), \
- gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING': None,
- 'CPL_AZURE_ENDPOINT': 'http://127.0.0.1:%d/azure/blob/myaccount2' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'AZURE_CONFIG_DIR': '/vsimem/azure_config_dir'}):
+ with gdaltest.tempfile(
+ "/vsimem/azure_config_dir/config", config_content
+ ), gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": None,
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount2"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "AZURE_CONFIG_DIR": "/vsimem/azure_config_dir",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount2/az_fake_bucket/resource', 200,
- {'Content-Length': 3},
- 'foo',
- expected_headers={'Authorization': 'SharedKey myaccount2:Cm8BtA8Wkst7zAdGmcoKoR0tWuj2rzO+WpfBwWQ4RrY='})
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount2/az_fake_bucket/resource",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ expected_headers={
+ "Authorization": "SharedKey myaccount2:Cm8BtA8Wkst7zAdGmcoKoR0tWuj2rzO+WpfBwWQ4RrY="
+ },
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
###############################################################################
@@ -1554,22 +2030,32 @@ def test_vsiaz_read_credentials_config_file_account_and_sas_token():
sas_token = sig=sas
"""
- with gdaltest.tempfile('/vsimem/azure_config_dir/config', config_content), \
- gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING': None,
- 'CPL_AZURE_ENDPOINT': 'http://127.0.0.1:%d/azure/blob/myaccount2' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'AZURE_CONFIG_DIR': '/vsimem/azure_config_dir'}):
+ with gdaltest.tempfile(
+ "/vsimem/azure_config_dir/config", config_content
+ ), gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": None,
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount2"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "AZURE_CONFIG_DIR": "/vsimem/azure_config_dir",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount2/az_fake_bucket/resource?sig=sas', 200,
- {'Content-Length': 3},
- 'foo')
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount2/az_fake_bucket/resource?sig=sas",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
###############################################################################
@@ -1589,14 +2075,20 @@ def test_vsiaz_read_credentials_config_file_missing_account():
[storage]
"""
- with gdaltest.tempfile('/vsimem/azure_config_dir/config', config_content), \
- gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING': None,
- 'CPL_AZURE_ENDPOINT': 'http://127.0.0.1:%d/azure/blob/foo' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'AZURE_CONFIG_DIR': '/vsimem/azure_config_dir'}):
+ with gdaltest.tempfile(
+ "/vsimem/azure_config_dir/config", config_content
+ ), gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": None,
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/foo"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "AZURE_CONFIG_DIR": "/vsimem/azure_config_dir",
+ }
+ ):
handler = webserver.SequentialHandler()
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is None
@@ -1611,20 +2103,29 @@ def test_vsiaz_access_token():
gdal.VSICurlClearCache()
- with gdaltest.config_options({'AZURE_STORAGE_CONNECTION_STRING': None,
- 'AZURE_STORAGE_ACCOUNT': 'myaccount',
- 'CPL_AZURE_ENDPOINT': 'http://127.0.0.1:%d/azure/blob/myaccount' % gdaltest.webserver_port,
- 'CPL_AZURE_USE_HTTPS': 'NO',
- 'AZURE_STORAGE_ACCESS_TOKEN': 'my_token'}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_CONNECTION_STRING": None,
+ "AZURE_STORAGE_ACCOUNT": "myaccount",
+ "CPL_AZURE_ENDPOINT": "http://127.0.0.1:%d/azure/blob/myaccount"
+ % gdaltest.webserver_port,
+ "CPL_AZURE_USE_HTTPS": "NO",
+ "AZURE_STORAGE_ACCESS_TOKEN": "my_token",
+ }
+ ):
handler = webserver.SequentialHandler()
- handler.add('GET', '/azure/blob/myaccount/az_fake_bucket/resource', 200,
- {'Content-Length': 3},
- 'foo',
- expected_headers={'Authorization': 'Bearer my_token'})
+ handler.add(
+ "GET",
+ "/azure/blob/myaccount/az_fake_bucket/resource",
+ 200,
+ {"Content-Length": 3},
+ "foo",
+ expected_headers={"Authorization": "Bearer my_token"},
+ )
with webserver.install_http_handler(handler):
- f = open_for_read('/vsiaz/az_fake_bucket/resource')
+ f = open_for_read("/vsiaz/az_fake_bucket/resource")
assert f is not None
- data = gdal.VSIFReadL(1, 4, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 4, f).decode("ascii")
gdal.VSIFCloseL(f)
- assert data == 'foo'
+ assert data == "foo"
diff --git a/autotest/gcore/vsiaz_real_instance_auto.py b/autotest/gcore/vsiaz_real_instance_auto.py
index d76c380f0384..881a3df3a527 100644
--- a/autotest/gcore/vsiaz_real_instance_auto.py
+++ b/autotest/gcore/vsiaz_real_instance_auto.py
@@ -28,46 +28,52 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
-from osgeo import gdal
-
-import gdaltest
import os
-import pytest
import stat
import sys
-pytestmark = pytest.mark.skipif(not gdaltest.built_against_curl(), reason="GDAL not built against curl")
+import gdaltest
+import pytest
+
+from osgeo import gdal
+
+pytestmark = pytest.mark.skipif(
+ not gdaltest.built_against_curl(), reason="GDAL not built against curl"
+)
def open_for_read(uri):
"""
Opens a test file for reading.
"""
- return gdal.VSIFOpenExL(uri, 'rb', 1)
+ return gdal.VSIFOpenExL(uri, "rb", 1)
+
###############################################################################
-@pytest.fixture(autouse=True, scope='module')
+@pytest.fixture(autouse=True, scope="module")
def startup_and_cleanup():
az_vars = {}
for var, reset_val in (
- ('AZURE_STORAGE_CONNECTION_STRING', None),
- ('AZURE_STORAGE_ACCOUNT', None),
- ('AZURE_STORAGE_ACCESS_KEY', None),
- ('AZURE_STORAGE_SAS_TOKEN', None),
- ('AZURE_NO_SIGN_REQUEST', None),
- ('AZURE_CONFIG_DIR', ''),
- ('AZURE_STORAGE_ACCESS_TOKEN', '')):
+ ("AZURE_STORAGE_CONNECTION_STRING", None),
+ ("AZURE_STORAGE_ACCOUNT", None),
+ ("AZURE_STORAGE_ACCESS_KEY", None),
+ ("AZURE_STORAGE_SAS_TOKEN", None),
+ ("AZURE_NO_SIGN_REQUEST", None),
+ ("AZURE_CONFIG_DIR", ""),
+ ("AZURE_STORAGE_ACCESS_TOKEN", ""),
+ ):
az_vars[var] = gdal.GetConfigOption(var)
gdal.SetConfigOption(var, reset_val)
- assert gdal.GetSignedURL('/vsiaz/foo/bar') is None
+ assert gdal.GetSignedURL("/vsiaz/foo/bar") is None
yield
for var in az_vars:
gdal.SetConfigOption(var, az_vars[var])
+
###############################################################################
# Error cases
@@ -80,45 +86,56 @@ def test_vsiaz_real_server_errors():
# Missing AZURE_STORAGE_ACCOUNT
gdal.ErrorReset()
with gdaltest.error_handler():
- f = open_for_read('/vsiaz/foo/bar')
- assert f is None and gdal.VSIGetLastErrorMsg().find('AZURE_STORAGE_ACCOUNT') >= 0
+ f = open_for_read("/vsiaz/foo/bar")
+ assert f is None and gdal.VSIGetLastErrorMsg().find("AZURE_STORAGE_ACCOUNT") >= 0
gdal.ErrorReset()
with gdaltest.error_handler():
- f = open_for_read('/vsiaz_streaming/foo/bar')
- assert f is None and gdal.VSIGetLastErrorMsg().find('AZURE_STORAGE_ACCOUNT') >= 0
+ f = open_for_read("/vsiaz_streaming/foo/bar")
+ assert f is None and gdal.VSIGetLastErrorMsg().find("AZURE_STORAGE_ACCOUNT") >= 0
# Invalid AZURE_STORAGE_CONNECTION_STRING
- with gdaltest.config_option('AZURE_STORAGE_CONNECTION_STRING', 'invalid'):
+ with gdaltest.config_option("AZURE_STORAGE_CONNECTION_STRING", "invalid"):
gdal.ErrorReset()
with gdaltest.error_handler():
- f = open_for_read('/vsiaz/foo/bar')
+ f = open_for_read("/vsiaz/foo/bar")
assert f is None
# Missing AZURE_STORAGE_ACCESS_KEY
gdal.ErrorReset()
- with gdaltest.config_options({'AZURE_STORAGE_ACCOUNT': 'AZURE_STORAGE_ACCOUNT',
- 'CPL_AZURE_VM_API_ROOT_URL': 'disabled'}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_ACCOUNT": "AZURE_STORAGE_ACCOUNT",
+ "CPL_AZURE_VM_API_ROOT_URL": "disabled",
+ }
+ ):
with gdaltest.error_handler():
- f = open_for_read('/vsiaz/foo/bar')
- assert f is None and gdal.VSIGetLastErrorMsg().find('AZURE_STORAGE_ACCESS_KEY') >= 0
+ f = open_for_read("/vsiaz/foo/bar")
+ assert (
+ f is None
+ and gdal.VSIGetLastErrorMsg().find("AZURE_STORAGE_ACCESS_KEY") >= 0
+ )
# AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY but invalid
gdal.ErrorReset()
- with gdaltest.config_options({'AZURE_STORAGE_ACCOUNT': 'AZURE_STORAGE_ACCOUNT',
- 'AZURE_STORAGE_ACCESS_KEY': 'AZURE_STORAGE_ACCESS_KEY'}):
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_ACCOUNT": "AZURE_STORAGE_ACCOUNT",
+ "AZURE_STORAGE_ACCESS_KEY": "AZURE_STORAGE_ACCESS_KEY",
+ }
+ ):
with gdaltest.error_handler():
- f = open_for_read('/vsiaz/foo/bar.baz')
+ f = open_for_read("/vsiaz/foo/bar.baz")
if f is not None:
if f is not None:
gdal.VSIFCloseL(f)
- if gdal.GetConfigOption('APPVEYOR') is not None:
+ if gdal.GetConfigOption("APPVEYOR") is not None:
return
pytest.fail(gdal.VSIGetLastErrorMsg())
gdal.ErrorReset()
with gdaltest.error_handler():
- f = open_for_read('/vsiaz_streaming/foo/bar.baz')
+ f = open_for_read("/vsiaz_streaming/foo/bar.baz")
assert f is None, gdal.VSIGetLastErrorMsg()
@@ -127,6 +144,7 @@ def test_vsiaz_real_server_errors():
# FIXME: this resource is no longer accessible through no sign request...
# Find another one.
+
def test_vsiaz_no_sign_request():
if not gdaltest.built_against_curl():
@@ -134,42 +152,64 @@ def test_vsiaz_no_sign_request():
gdal.VSICurlClearCache()
- with gdaltest.config_options({ 'AZURE_STORAGE_ACCOUNT': 'naipblobs', 'AZURE_NO_SIGN_REQUEST': 'YES'}):
- actual_url = gdal.GetActualURL('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif')
- assert actual_url == 'https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif'
- assert actual_url == gdal.GetSignedURL('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif')
-
- f = open_for_read('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif')
+ with gdaltest.config_options(
+ {"AZURE_STORAGE_ACCOUNT": "naipblobs", "AZURE_NO_SIGN_REQUEST": "YES"}
+ ):
+ actual_url = gdal.GetActualURL(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ assert (
+ actual_url
+ == "https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ assert actual_url == gdal.GetSignedURL(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+
+ f = open_for_read(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
if f is None:
- if gdaltest.gdalurlopen('https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif') is None:
- pytest.skip('cannot open URL')
+ if (
+ gdaltest.gdalurlopen(
+ "https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ is None
+ ):
+ pytest.skip("cannot open URL")
pytest.fail()
gdal.VSIFCloseL(f)
- assert 'm_3008601_ne_16_1_20150804.tif' in gdal.ReadDir('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/')
+ assert "m_3008601_ne_16_1_20150804.tif" in gdal.ReadDir(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/"
+ )
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip").mode)
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip/').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip/").mode)
gdal.VSICurlClearCache()
- assert gdal.VSIStatL('/vsiaz/naip_i_dont_exist') is None
+ assert gdal.VSIStatL("/vsiaz/naip_i_dont_exist") is None
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip/v002').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip/v002").mode)
###############################################################################
# Test AZURE_SAS option
-@pytest.mark.skipif(sys.platform == 'darwin' and 'CI' in os.environ, reason='Randomly fails on MacOSX. Not sure why.')
+
+@pytest.mark.skipif(
+ sys.platform == "darwin" and "CI" in os.environ,
+ reason="Randomly fails on MacOSX. Not sure why.",
+)
def test_vsiaz_sas():
if not gdaltest.built_against_curl():
@@ -178,33 +218,57 @@ def test_vsiaz_sas():
gdal.VSICurlClearCache()
# See https://azure.microsoft.com/en-us/services/open-datasets/catalog/naip/ for the value of AZURE_SAS
- with gdaltest.config_options({ 'AZURE_STORAGE_ACCOUNT': 'naipblobs', 'AZURE_SAS': 'st=2019-07-18T03%3A53%3A22Z&se=2035-07-19T03%3A53%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=2RIXmLbLbiagYnUd49rgx2kOXKyILrJOgafmkODhRAQ%3D'}):
- actual_url = gdal.GetActualURL('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif')
- assert actual_url == 'https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif'
- assert gdal.GetSignedURL('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif') == 'https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif?st=2019-07-18T03%3A53%3A22Z&se=2035-07-19T03%3A53%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=2RIXmLbLbiagYnUd49rgx2kOXKyILrJOgafmkODhRAQ%3D'
-
- f = open_for_read('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif')
+ with gdaltest.config_options(
+ {
+ "AZURE_STORAGE_ACCOUNT": "naipblobs",
+ "AZURE_SAS": "st=2019-07-18T03%3A53%3A22Z&se=2035-07-19T03%3A53%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=2RIXmLbLbiagYnUd49rgx2kOXKyILrJOgafmkODhRAQ%3D",
+ }
+ ):
+ actual_url = gdal.GetActualURL(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ assert (
+ actual_url
+ == "https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ assert (
+ gdal.GetSignedURL(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ == "https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif?st=2019-07-18T03%3A53%3A22Z&se=2035-07-19T03%3A53%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=2RIXmLbLbiagYnUd49rgx2kOXKyILrJOgafmkODhRAQ%3D"
+ )
+
+ f = open_for_read(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
if f is None:
- if gdaltest.gdalurlopen('https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif') is None:
- pytest.skip('cannot open URL')
+ if (
+ gdaltest.gdalurlopen(
+ "https://naipblobs.blob.core.windows.net/naip/v002/al/2015/al_100cm_2015/30086/m_3008601_ne_16_1_20150804.tif"
+ )
+ is None
+ ):
+ pytest.skip("cannot open URL")
pytest.fail()
gdal.VSIFCloseL(f)
- assert 'm_3008601_ne_16_1_20150804.tif' in gdal.ReadDir('/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/')
+ assert "m_3008601_ne_16_1_20150804.tif" in gdal.ReadDir(
+ "/vsiaz/naip/v002/al/2015/al_100cm_2015/30086/"
+ )
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip").mode)
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip/').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip/").mode)
gdal.VSICurlClearCache()
- assert gdal.VSIStatL('/vsiaz/naip_i_dont_exist') is None
+ assert gdal.VSIStatL("/vsiaz/naip_i_dont_exist") is None
gdal.VSICurlClearCache()
- assert stat.S_ISDIR(gdal.VSIStatL('/vsiaz/naip/v002').mode)
+ assert stat.S_ISDIR(gdal.VSIStatL("/vsiaz/naip/v002").mode)
diff --git a/autotest/gcore/vsiaz_real_instance_manual.py b/autotest/gcore/vsiaz_real_instance_manual.py
index 8cf395ccfd14..abb190377b81 100644
--- a/autotest/gcore/vsiaz_real_instance_manual.py
+++ b/autotest/gcore/vsiaz_real_instance_manual.py
@@ -29,20 +29,23 @@
###############################################################################
import stat
-from osgeo import gdal
-
import gdaltest
import pytest
-pytestmark = pytest.mark.skipif(not gdaltest.built_against_curl(), reason="GDAL not built against curl")
+from osgeo import gdal
+
+pytestmark = pytest.mark.skipif(
+ not gdaltest.built_against_curl(), reason="GDAL not built against curl"
+)
def open_for_read(uri):
"""
Opens a test file for reading.
"""
- return gdal.VSIFOpenExL(uri, 'rb', 1)
+ return gdal.VSIFOpenExL(uri, "rb", 1)
+
###############################################################################
# Nominal cases (require valid credentials)
@@ -53,105 +56,118 @@ def test_vsiaz_extra_1():
if not gdaltest.built_against_curl():
pytest.skip()
- az_resource = gdal.GetConfigOption('AZ_RESOURCE')
+ az_resource = gdal.GetConfigOption("AZ_RESOURCE")
if az_resource is None:
- pytest.skip('Missing AZ_RESOURCE')
+ pytest.skip("Missing AZ_RESOURCE")
- if '/' not in az_resource:
- path = '/vsiaz/' + az_resource
+ if "/" not in az_resource:
+ path = "/vsiaz/" + az_resource
statres = gdal.VSIStatL(path)
- assert statres is not None and stat.S_ISDIR(statres.mode), \
- ('%s is not a valid bucket' % path)
+ assert statres is not None and stat.S_ISDIR(statres.mode), (
+ "%s is not a valid bucket" % path
+ )
readdir = gdal.ReadDir(path)
- assert readdir is not None, 'ReadDir() should not return empty list'
+ assert readdir is not None, "ReadDir() should not return empty list"
for filename in readdir:
- if filename != '.':
- subpath = path + '/' + filename
- assert gdal.VSIStatL(subpath) is not None, \
- ('Stat(%s) should not return an error' % subpath)
-
- unique_id = 'vsiaz_test'
- subpath = path + '/' + unique_id
+ if filename != ".":
+ subpath = path + "/" + filename
+ assert gdal.VSIStatL(subpath) is not None, (
+ "Stat(%s) should not return an error" % subpath
+ )
+
+ unique_id = "vsiaz_test"
+ subpath = path + "/" + unique_id
ret = gdal.Mkdir(subpath, 0)
- assert ret >= 0, ('Mkdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Mkdir(%s) should not return an error" % subpath
readdir = gdal.ReadDir(path)
- assert unique_id in readdir, \
- ('ReadDir(%s) should contain %s' % (path, unique_id))
+ assert unique_id in readdir, "ReadDir(%s) should contain %s" % (path, unique_id)
ret = gdal.Mkdir(subpath, 0)
- assert ret != 0, ('Mkdir(%s) repeated should return an error' % subpath)
+ assert ret != 0, "Mkdir(%s) repeated should return an error" % subpath
ret = gdal.Rmdir(subpath)
- assert ret >= 0, ('Rmdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Rmdir(%s) should not return an error" % subpath
readdir = gdal.ReadDir(path)
- assert unique_id not in readdir, \
- ('ReadDir(%s) should not contain %s' % (path, unique_id))
+ assert unique_id not in readdir, "ReadDir(%s) should not contain %s" % (
+ path,
+ unique_id,
+ )
ret = gdal.Mkdir(subpath, 0)
- assert ret >= 0, ('Mkdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Mkdir(%s) should not return an error" % subpath
- f = gdal.VSIFOpenL(subpath + '/test.txt', 'wb')
+ f = gdal.VSIFOpenL(subpath + "/test.txt", "wb")
assert f is not None
- gdal.VSIFWriteL('hello', 1, 5, f)
+ gdal.VSIFWriteL("hello", 1, 5, f)
gdal.VSIFCloseL(f)
ret = gdal.Rmdir(subpath)
- assert ret != 0, \
- ('Rmdir(%s) on non empty directory should return an error' % subpath)
+ assert ret != 0, (
+ "Rmdir(%s) on non empty directory should return an error" % subpath
+ )
- f = gdal.VSIFOpenL(subpath + '/test.txt', 'rb')
+ f = gdal.VSIFOpenL(subpath + "/test.txt", "rb")
assert f is not None
- data = gdal.VSIFReadL(1, 5, f).decode('utf-8')
- assert data == 'hello'
+ data = gdal.VSIFReadL(1, 5, f).decode("utf-8")
+ assert data == "hello"
gdal.VSIFCloseL(f)
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'HEADERS')
- assert 'x-ms-blob-type' in md
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "HEADERS")
+ assert "x-ms-blob-type" in md
- metadata_md = gdal.GetFileMetadata(subpath + '/test.txt', 'METADATA')
- assert 'ETag' in metadata_md or 'etag' in metadata_md
+ metadata_md = gdal.GetFileMetadata(subpath + "/test.txt", "METADATA")
+ assert "ETag" in metadata_md or "etag" in metadata_md
assert metadata_md != md
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'TAGS')
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "TAGS")
assert md == {}
# Change properties
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'x-ms-blob-content-type' : 'foo'}, 'PROPERTIES')
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'HEADERS')
- assert md.get('Content-Type', '') == 'foo' or md.get('content-type', '') == 'foo', md
+ assert gdal.SetFileMetadata(
+ subpath + "/test.txt", {"x-ms-blob-content-type": "foo"}, "PROPERTIES"
+ )
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "HEADERS")
+ assert (
+ md.get("Content-Type", "") == "foo" or md.get("content-type", "") == "foo"
+ ), md
# Change metadata
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'x-ms-meta-FOO' : 'BAR'}, 'METADATA')
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'METADATA')
- assert md['x-ms-meta-FOO'] == 'BAR'
+ assert gdal.SetFileMetadata(
+ subpath + "/test.txt", {"x-ms-meta-FOO": "BAR"}, "METADATA"
+ )
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "METADATA")
+ assert md["x-ms-meta-FOO"] == "BAR"
# Change tags (doesn't seem to work with Azurite)
- if ':10000/devstoreaccount1' not in gdal.GetConfigOption('AZURE_STORAGE_CONNECTION_STRING', ''):
- assert gdal.SetFileMetadata(subpath + '/test.txt', {'BAR' : 'BAZ'}, 'TAGS')
- md = gdal.GetFileMetadata(subpath + '/test.txt', 'TAGS')
- assert md['BAR'] == 'BAZ'
+ if ":10000/devstoreaccount1" not in gdal.GetConfigOption(
+ "AZURE_STORAGE_CONNECTION_STRING", ""
+ ):
+ assert gdal.SetFileMetadata(subpath + "/test.txt", {"BAR": "BAZ"}, "TAGS")
+ md = gdal.GetFileMetadata(subpath + "/test.txt", "TAGS")
+ assert md["BAR"] == "BAZ"
- assert gdal.Rename(subpath + '/test.txt', subpath + '/test2.txt') == 0
+ assert gdal.Rename(subpath + "/test.txt", subpath + "/test2.txt") == 0
- f = gdal.VSIFOpenL(subpath + '/test2.txt', 'rb')
+ f = gdal.VSIFOpenL(subpath + "/test2.txt", "rb")
assert f is not None
- data = gdal.VSIFReadL(1, 5, f).decode('utf-8')
- assert data == 'hello'
+ data = gdal.VSIFReadL(1, 5, f).decode("utf-8")
+ assert data == "hello"
gdal.VSIFCloseL(f)
- ret = gdal.Unlink(subpath + '/test2.txt')
- assert ret >= 0, \
- ('Unlink(%s) should not return an error' % (subpath + '/test2.txt'))
+ ret = gdal.Unlink(subpath + "/test2.txt")
+ assert ret >= 0, "Unlink(%s) should not return an error" % (
+ subpath + "/test2.txt"
+ )
ret = gdal.Rmdir(subpath)
- assert ret >= 0, ('Rmdir(%s) should not return an error' % subpath)
+ assert ret >= 0, "Rmdir(%s) should not return an error" % subpath
return
- f = open_for_read('/vsiaz/' + az_resource)
+ f = open_for_read("/vsiaz/" + az_resource)
assert f is not None
ret = gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
@@ -159,7 +175,7 @@ def test_vsiaz_extra_1():
assert len(ret) == 1
# Same with /vsiaz_streaming/
- f = open_for_read('/vsiaz_streaming/' + az_resource)
+ f = open_for_read("/vsiaz_streaming/" + az_resource)
assert f is not None
ret = gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
@@ -170,20 +186,20 @@ def test_vsiaz_extra_1():
# we actually try to read at read() time and bSetError = false
# Invalid bucket : "The specified bucket does not exist"
gdal.ErrorReset()
- f = open_for_read('/vsiaz/not_existing_bucket/foo')
+ f = open_for_read("/vsiaz/not_existing_bucket/foo")
with gdaltest.error_handler():
gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
- assert gdal.VSIGetLastErrorMsg() != ''
+ assert gdal.VSIGetLastErrorMsg() != ""
# Invalid resource
gdal.ErrorReset()
- f = open_for_read('/vsiaz_streaming/' + az_resource + '/invalid_resource.baz')
+ f = open_for_read("/vsiaz_streaming/" + az_resource + "/invalid_resource.baz")
assert f is None, gdal.VSIGetLastErrorMsg()
# Test GetSignedURL()
- signed_url = gdal.GetSignedURL('/vsiaz/' + az_resource)
- f = open_for_read('/vsicurl_streaming/' + signed_url)
+ signed_url = gdal.GetSignedURL("/vsiaz/" + az_resource)
+ f = open_for_read("/vsicurl_streaming/" + signed_url)
assert f is not None
ret = gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
diff --git a/autotest/gcore/vsicredential.py b/autotest/gcore/vsicredential.py
index 2ce27ed60248..be9940a01d52 100755
--- a/autotest/gcore/vsicredential.py
+++ b/autotest/gcore/vsicredential.py
@@ -28,43 +28,44 @@
# DEALINGS IN THE SOFTWARE.
###############################################################################
+import pytest
+
from osgeo import gdal
-import pytest
def test_vsicredential():
with pytest.raises(Exception):
- assert gdal.GetCredential(None, 'key')
+ assert gdal.GetCredential(None, "key")
with pytest.raises(Exception):
- assert gdal.GetCredential('prefix', None)
+ assert gdal.GetCredential("prefix", None)
- assert gdal.GetCredential('prefix', 'key') is None
+ assert gdal.GetCredential("prefix", "key") is None
- assert gdal.GetCredential('prefix', 'key', 'default') == 'default'
+ assert gdal.GetCredential("prefix", "key", "default") == "default"
with pytest.raises(Exception):
- gdal.SetCredential(None, 'key', 'value')
+ gdal.SetCredential(None, "key", "value")
with pytest.raises(Exception):
- gdal.SetCredential('prefix', None, 'value')
+ gdal.SetCredential("prefix", None, "value")
- gdal.SetCredential('prefix', 'key', 'value')
- assert gdal.GetCredential('prefix', 'key') == 'value'
- assert gdal.GetCredential('prefix/object', 'key') == 'value'
- assert gdal.GetCredential('prefix', 'key', 'default') == 'value'
- assert gdal.GetCredential('another_prefix', 'key') is None
+ gdal.SetCredential("prefix", "key", "value")
+ assert gdal.GetCredential("prefix", "key") == "value"
+ assert gdal.GetCredential("prefix/object", "key") == "value"
+ assert gdal.GetCredential("prefix", "key", "default") == "value"
+ assert gdal.GetCredential("another_prefix", "key") is None
- gdal.SetCredential('prefix', 'key', None)
- assert gdal.GetCredential('prefix', 'key') is None
+ gdal.SetCredential("prefix", "key", None)
+ assert gdal.GetCredential("prefix", "key") is None
- gdal.SetCredential('prefix', 'key', 'value')
- gdal.ClearCredentials('prefix')
- assert gdal.GetCredential('prefix', 'key') is None
+ gdal.SetCredential("prefix", "key", "value")
+ gdal.ClearCredentials("prefix")
+ assert gdal.GetCredential("prefix", "key") is None
- gdal.SetCredential('prefix', 'key', 'value')
- gdal.ClearCredentials('another_prefix')
- assert gdal.GetCredential('prefix', 'key') == 'value'
+ gdal.SetCredential("prefix", "key", "value")
+ gdal.ClearCredentials("another_prefix")
+ assert gdal.GetCredential("prefix", "key") == "value"
gdal.ClearCredentials()
- assert gdal.GetCredential('prefix', 'key') is None
+ assert gdal.GetCredential("prefix", "key") is None
diff --git a/autotest/gcore/vsicrypt.py b/autotest/gcore/vsicrypt.py
index 362f5bbcb42f..d00fd12ae413 100755
--- a/autotest/gcore/vsicrypt.py
+++ b/autotest/gcore/vsicrypt.py
@@ -33,13 +33,14 @@
import os
import struct
-from osgeo import gdal
-
import gdaltest
import pytest
-
from gcore.testnonboundtoswig import setup as testnonboundtoswig_setup # noqa
-testnonboundtoswig_setup; # to please pyflakes
+
+from osgeo import gdal
+
+testnonboundtoswig_setup
+# to please pyflakes
###############################################################################
# Use common test for /vsicrypt
@@ -48,15 +49,19 @@
def test_vsicrypt_1():
gdaltest.has_vsicrypt = False
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "wb+")
if fp is None:
pytest.skip()
gdal.VSIFCloseL(fp)
- gdal.Unlink('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin')
+ gdal.Unlink("/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin")
gdaltest.has_vsicrypt = True
import vsifile
- return vsifile.vsifile_generic('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin')
+
+ return vsifile.vsifile_generic(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin"
+ )
+
###############################################################################
# Test various error cases
@@ -69,49 +74,59 @@ def test_vsicrypt_2():
# Missing key
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "wb+")
assert fp is None
# Invalid file
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing", "wb"
+ )
assert fp is None
# Invalid file
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing", "rb"
+ )
assert fp is None
# Invalid file
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'ab')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing", "ab"
+ )
assert fp is None
# Invalid access
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing', 'foo')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/not_existing/not_existing", "foo"
+ )
assert fp is None
# Key to short
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=a,file=/vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=a,file=/vsimem/file.bin", "wb+")
assert fp is None
# Invalid signature
- gdal.FileFromMemBuffer('/vsimem/file.bin', 'foo')
+ gdal.FileFromMemBuffer("/vsimem/file.bin", "foo")
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb"
+ )
assert fp is None
# Generate empty file
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "wb")
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb")
assert fp is not None
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL("/vsimem/file.bin", "rb")
header = gdal.VSIFReadL(1, 1000, fp)
gdal.VSIFCloseL(fp)
@@ -119,233 +134,353 @@ def test_vsicrypt_2():
# Test shortening header
for i in range(46):
- fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL("/vsimem/file.bin", "wb")
gdal.VSIFWriteL(header, 1, 46 - 1 - i, fp)
gdal.VSIFCloseL(fp)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb"
+ )
assert fp is None
# Test corrupting all bytes of header
for i in range(46):
for val in (0, 127, 255):
- fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL("/vsimem/file.bin", "wb")
try:
- new_byte = chr(val).encode('latin1')
+ new_byte = chr(val).encode("latin1")
except (UnicodeDecodeError, UnicodeEncodeError):
new_byte = chr(val)
- header_new = header[0:i] + new_byte + header[i + 1:]
+ header_new = header[0:i] + new_byte + header[i + 1 :]
gdal.VSIFWriteL(header_new, 1, 46, fp)
gdal.VSIFCloseL(fp)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file='
- '/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=" "/vsimem/file.bin", "rb"
+ )
if fp is not None:
gdal.VSIFCloseL(fp)
- gdal.SetConfigOption('VSICRYPT_IV', 'TOO_SHORT')
+ gdal.SetConfigOption("VSICRYPT_IV", "TOO_SHORT")
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file='
- '/vsimem/file.bin', 'wb')
- gdal.SetConfigOption('VSICRYPT_IV', None)
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=" "/vsimem/file.bin", "wb"
+ )
+ gdal.SetConfigOption("VSICRYPT_IV", None)
if fp is not None:
gdal.VSIFCloseL(fp)
# Inconsistent initial vector.
- header = struct.pack('B' * 38,
- 86, 83, 73, 67, 82, 89, 80, 84, # signature
- 38, 0, # header size
- 1, # major
- 0, # minor
- 0, 2, # sector size
- 0, # alg
- 0, # mode
- 8, # size of IV (should be 16)
- 32, 13, 169, 71, 154, 208, 22, 32, # IV
- 0, 0, # size of free text
- 0, # size of key check
- 0, 0, 0, 0, 0, 0, 0, 0, # size of unencrypted file
- 0, 0 # size of extra content
- )
- fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb')
+ header = struct.pack(
+ "B" * 38,
+ 86,
+ 83,
+ 73,
+ 67,
+ 82,
+ 89,
+ 80,
+ 84, # signature
+ 38,
+ 0, # header size
+ 1, # major
+ 0, # minor
+ 0,
+ 2, # sector size
+ 0, # alg
+ 0, # mode
+ 8, # size of IV (should be 16)
+ 32,
+ 13,
+ 169,
+ 71,
+ 154,
+ 208,
+ 22,
+ 32, # IV
+ 0,
+ 0, # size of free text
+ 0, # size of key check
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, # size of unencrypted file
+ 0,
+ 0, # size of extra content
+ )
+ fp = gdal.VSIFOpenL("/vsimem/file.bin", "wb")
gdal.VSIFWriteL(header, 1, len(header), fp)
gdal.VSIFCloseL(fp)
with gdaltest.error_handler():
fp = gdal.VSIFOpenL(
- '/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb"
+ )
assert fp is None
# Inconsistent initial vector with key check.
- header = struct.pack('B' * 39,
- 86, 83, 73, 67, 82, 89, 80, 84, # signature
- 39, 0, # header size
- 1, # major
- 0, # minor
- 0, 2, # sector size
- 0, # alg
- 0, # mode
- 8, # size of IV (should be 16)
- 32, 13, 169, 71, 154, 208, 22, 32, # IV
- 0, 0, # size of free text
- 1, # size of key check
- 0, # key check
- 0, 0, 0, 0, 0, 0, 0, 0, # size of unencrypted file
- 0, 0 # size of extra content
- )
- fp = gdal.VSIFOpenL('/vsimem/file.bin', 'wb')
+ header = struct.pack(
+ "B" * 39,
+ 86,
+ 83,
+ 73,
+ 67,
+ 82,
+ 89,
+ 80,
+ 84, # signature
+ 39,
+ 0, # header size
+ 1, # major
+ 0, # minor
+ 0,
+ 2, # sector size
+ 0, # alg
+ 0, # mode
+ 8, # size of IV (should be 16)
+ 32,
+ 13,
+ 169,
+ 71,
+ 154,
+ 208,
+ 22,
+ 32, # IV
+ 0,
+ 0, # size of free text
+ 1, # size of key check
+ 0, # key check
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, # size of unencrypted file
+ 0,
+ 0, # size of extra content
+ )
+ fp = gdal.VSIFOpenL("/vsimem/file.bin", "wb")
gdal.VSIFWriteL(header, 1, len(header), fp)
gdal.VSIFCloseL(fp)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb"
+ )
assert fp is None
# Test reading with wrong key
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb')
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ fp = gdal.VSIFOpenL("/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "wb")
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin", "rb")
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content != 'hello'
+ assert content != "hello"
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=short_key,file=/vsimem/file.bin', 'ab')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=short_key,file=/vsimem/file.bin", "ab")
assert fp is None
# Test reading with wrong key with add_key_check
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,add_key_check=yes,file=/vsimem/file.bin', 'wb')
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,add_key_check=yes,file=/vsimem/file.bin", "wb"
+ )
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin", "rb"
+ )
assert fp is None
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=short_key,file=/vsimem/file.bin', 'ab')
+ fp = gdal.VSIFOpenL("/vsicrypt/key=short_key,file=/vsimem/file.bin", "ab")
assert fp is None
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin', 'ab')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=dont_use_in_prod,file=/vsimem/file.bin", "ab"
+ )
assert fp is None
# Test creating with potentially not built-in alg:
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/alg=blowfish,key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/alg=blowfish,key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "wb"
+ )
if fp is not None:
gdal.VSIFCloseL(fp)
# Invalid sector_size
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,sector_size=1,file=/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,sector_size=1,file=/vsimem/file.bin", "wb"
+ )
assert fp is None
# Sector size (16) should be at least twice larger than the block size (16) in CBC_CTS
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,sector_size=16,mode=CBC_CTS,file=/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,sector_size=16,mode=CBC_CTS,file=/vsimem/file.bin",
+ "wb",
+ )
assert fp is None
- gdal.Unlink('/vsimem/file.bin')
+ gdal.Unlink("/vsimem/file.bin")
+
###############################################################################
# Test various options
+
@pytest.mark.skipif(
- os.environ.get('BUILD_NAME', '') == 's390x',
- reason='Fails randomly on that platform'
+ os.environ.get("BUILD_NAME", "") == "s390x",
+ reason="Fails randomly on that platform",
)
def test_vsicrypt_3():
if not gdaltest.has_vsicrypt:
pytest.skip()
- for options in ['sector_size=16', 'alg=AES', 'alg=DES_EDE2', 'alg=DES_EDE3', 'alg=SKIPJACK', 'alg=invalid',
- 'mode=CBC', 'mode=CFB', 'mode=OFB', 'mode=CTR', 'mode=CBC_CTS', 'mode=invalid',
- 'freetext=my_free_text',
- 'add_key_check=yes']:
-
- gdal.Unlink('/vsimem/file.bin')
-
- if options == 'alg=invalid' or options == 'mode=invalid':
+ for options in [
+ "sector_size=16",
+ "alg=AES",
+ "alg=DES_EDE2",
+ "alg=DES_EDE3",
+ "alg=SKIPJACK",
+ "alg=invalid",
+ "mode=CBC",
+ "mode=CFB",
+ "mode=OFB",
+ "mode=CTR",
+ "mode=CBC_CTS",
+ "mode=invalid",
+ "freetext=my_free_text",
+ "add_key_check=yes",
+ ]:
+
+ gdal.Unlink("/vsimem/file.bin")
+
+ if options == "alg=invalid" or options == "mode=invalid":
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin"
+ % options,
+ "wb",
+ )
else:
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,%s,file=/vsimem/file.bin"
+ % options,
+ "wb",
+ )
assert fp is not None, options
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,file=/vsimem/file.bin', 'r')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PRODDONT_USE_IN_PROD,file=/vsimem/file.bin", "r"
+ )
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello', options
+ assert content == "hello", options
# Some of those algs might be missing
- for options in ['alg=Blowfish', 'alg=Camellia', 'alg=CAST256', 'alg=MARS', 'alg=IDEA', 'alg=RC5', 'alg=RC6', 'alg=Serpent', 'alg=SHACAL2', 'alg=Twofish', 'alg=XTEA']:
-
- gdal.Unlink('/vsimem/file.bin')
+ for options in [
+ "alg=Blowfish",
+ "alg=Camellia",
+ "alg=CAST256",
+ "alg=MARS",
+ "alg=IDEA",
+ "alg=RC5",
+ "alg=RC6",
+ "alg=Serpent",
+ "alg=SHACAL2",
+ "alg=Twofish",
+ "alg=XTEA",
+ ]:
+
+ gdal.Unlink("/vsimem/file.bin")
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,%s,file=/vsimem/file.bin' % options, 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,%s,file=/vsimem/file.bin" % options,
+ "wb",
+ )
if fp is not None:
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin', 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file.bin", "rb"
+ )
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello', options
+ assert content == "hello", options
# Test key generation
# Do NOT set VSICRYPT_CRYPTO_RANDOM=NO in production. This is just to speed up tests !
gdal.SetConfigOption("VSICRYPT_CRYPTO_RANDOM", "NO")
- fp = gdal.VSIFOpenL('/vsicrypt/key=GENERATE_IT,add_key_check=yes,file=/vsimem/file.bin', 'wb')
+ fp = gdal.VSIFOpenL(
+ "/vsicrypt/key=GENERATE_IT,add_key_check=yes,file=/vsimem/file.bin", "wb"
+ )
gdal.SetConfigOption("VSICRYPT_CRYPTO_RANDOM", None)
# Get the generated random key
- key_b64 = gdal.GetConfigOption('VSICRYPT_KEY_B64')
+ key_b64 = gdal.GetConfigOption("VSICRYPT_KEY_B64")
assert key_b64 is not None
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "rb")
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello', options
+ assert content == "hello", options
- gdal.SetConfigOption('VSICRYPT_KEY_B64', None)
+ gdal.SetConfigOption("VSICRYPT_KEY_B64", None)
- fp = gdal.VSIFOpenL('/vsicrypt/key_b64=%s,file=/vsimem/file.bin' % key_b64, 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsicrypt/key_b64=%s,file=/vsimem/file.bin" % key_b64, "rb")
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello', options
+ assert content == "hello", options
with gdaltest.error_handler():
- statRes = gdal.VSIStatL('/vsicrypt//vsimem/file.bin')
+ statRes = gdal.VSIStatL("/vsicrypt//vsimem/file.bin")
assert statRes is None
- ret = gdal.Rename('/vsicrypt//vsimem/file.bin', '/vsicrypt//vsimem/subdir_crypt/file.bin')
+ ret = gdal.Rename(
+ "/vsicrypt//vsimem/file.bin", "/vsicrypt//vsimem/subdir_crypt/file.bin"
+ )
assert ret == 0
- ret = gdal.Rename('/vsicrypt//vsimem/subdir_crypt/file.bin', '/vsimem/subdir_crypt/file2.bin')
+ ret = gdal.Rename(
+ "/vsicrypt//vsimem/subdir_crypt/file.bin", "/vsimem/subdir_crypt/file2.bin"
+ )
assert ret == 0
- dir_content = gdal.ReadDir('/vsicrypt//vsimem/subdir_crypt')
- assert dir_content == ['file2.bin']
+ dir_content = gdal.ReadDir("/vsicrypt//vsimem/subdir_crypt")
+ assert dir_content == ["file2.bin"]
+
+ gdal.Unlink("/vsimem/subdir_crypt/file2.bin")
- gdal.Unlink('/vsimem/subdir_crypt/file2.bin')
###############################################################################
# Test "random" operations against reference filesystem
@@ -356,18 +491,21 @@ def test_vsicrypt_4():
if not gdaltest.has_vsicrypt:
pytest.skip()
- test_file = '/vsicrypt/key=DONT_USE_IN_PROD,sector_size=32,file=/vsimem/file_enc.bin'
- ref_file = '/vsimem/file.bin'
+ test_file = (
+ "/vsicrypt/key=DONT_USE_IN_PROD,sector_size=32,file=/vsimem/file_enc.bin"
+ )
+ ref_file = "/vsimem/file.bin"
for seed in range(1000):
gdal.Unlink(test_file)
gdal.Unlink(ref_file)
- test_f = gdal.VSIFOpenL(test_file, 'wb+')
- ref_f = gdal.VSIFOpenL(ref_file, 'wb+')
+ test_f = gdal.VSIFOpenL(test_file, "wb+")
+ ref_f = gdal.VSIFOpenL(ref_file, "wb+")
import random
+
random.seed(seed)
for _ in range(20):
@@ -376,7 +514,9 @@ def test_vsicrypt_4():
gdal.VSIFSeekL(ref_f, random_offset, 0)
random_size = random.randint(1, 80)
- random_content = ''.join([chr(40 + int(10 * random.random())) for _ in range(random_size)])
+ random_content = "".join(
+ [chr(40 + int(10 * random.random())) for _ in range(random_size)]
+ )
gdal.VSIFWriteL(random_content, 1, random_size, test_f)
gdal.VSIFWriteL(random_content, 1, random_size, ref_f)
@@ -390,9 +530,9 @@ def test_vsicrypt_4():
ref_content = gdal.VSIFReadL(1, random_size, ref_f)
if test_content != ref_content:
print(seed)
- print('Test content (%d):' % len(test_content))
- print('')
- pytest.fail('Ref content (%d):' % len(ref_content))
+ print("Test content (%d):" % len(test_content))
+ print("")
+ pytest.fail("Ref content (%d):" % len(ref_content))
gdal.VSIFSeekL(test_f, 0, 0)
gdal.VSIFSeekL(ref_f, 0, 0)
@@ -404,13 +544,14 @@ def test_vsicrypt_4():
if test_content != ref_content:
print(seed)
- print('Test content (%d):' % len(test_content))
- print('')
- pytest.fail('Ref content (%d):' % len(ref_content))
+ print("Test content (%d):" % len(test_content))
+ print("")
+ pytest.fail("Ref content (%d):" % len(ref_content))
gdal.Unlink(test_file)
gdal.Unlink(ref_file)
+
###############################################################################
# Test random filling of last sector
@@ -420,51 +561,52 @@ def test_vsicrypt_5():
if not gdaltest.has_vsicrypt:
pytest.skip()
- test_file = '/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file_enc.bin'
+ test_file = "/vsicrypt/key=DONT_USE_IN_PROD,file=/vsimem/file_enc.bin"
- f = gdal.VSIFOpenL(test_file, 'wb+')
- gdal.VSIFWriteL('ab', 1, 2, f)
+ f = gdal.VSIFOpenL(test_file, "wb+")
+ gdal.VSIFWriteL("ab", 1, 2, f)
gdal.VSIFCloseL(f)
- f = gdal.VSIFOpenL(test_file, 'rb+')
+ f = gdal.VSIFOpenL(test_file, "rb+")
gdal.VSIFSeekL(f, 3, 0)
- gdal.VSIFWriteL('d', 1, 1, f)
+ gdal.VSIFWriteL("d", 1, 1, f)
gdal.VSIFCloseL(f)
- f = gdal.VSIFOpenL(test_file, 'rb')
+ f = gdal.VSIFOpenL(test_file, "rb")
content = gdal.VSIFReadL(1, 4, f)
- content = struct.unpack('B' * len(content), content)
+ content = struct.unpack("B" * len(content), content)
gdal.VSIFCloseL(f)
assert content == (97, 98, 0, 100)
- f = gdal.VSIFOpenL(test_file, 'rb+')
+ f = gdal.VSIFOpenL(test_file, "rb+")
gdal.VSIFReadL(1, 1, f)
gdal.VSIFSeekL(f, 5, 0)
- gdal.VSIFWriteL('f', 1, 1, f)
+ gdal.VSIFWriteL("f", 1, 1, f)
gdal.VSIFCloseL(f)
- f = gdal.VSIFOpenL(test_file, 'rb')
+ f = gdal.VSIFOpenL(test_file, "rb")
content = gdal.VSIFReadL(1, 6, f)
- content = struct.unpack('B' * len(content), content)
+ content = struct.unpack("B" * len(content), content)
gdal.VSIFCloseL(f)
assert content == (97, 98, 0, 100, 0, 102)
- f = gdal.VSIFOpenL(test_file, 'rb+')
+ f = gdal.VSIFOpenL(test_file, "rb+")
gdal.VSIFReadL(1, 1, f)
gdal.VSIFSeekL(f, 512, 0)
- gdal.VSIFWriteL('Z', 1, 1, f)
+ gdal.VSIFWriteL("Z", 1, 1, f)
gdal.VSIFSeekL(f, 7, 0)
- gdal.VSIFWriteL('h', 1, 1, f)
+ gdal.VSIFWriteL("h", 1, 1, f)
gdal.VSIFCloseL(f)
- f = gdal.VSIFOpenL(test_file, 'rb')
+ f = gdal.VSIFOpenL(test_file, "rb")
content = gdal.VSIFReadL(1, 8, f)
- content = struct.unpack('B' * len(content), content)
+ content = struct.unpack("B" * len(content), content)
gdal.VSIFCloseL(f)
assert content == (97, 98, 0, 100, 0, 102, 0, 104)
gdal.Unlink(test_file)
+
###############################################################################
# Test VSISetCryptKey
@@ -475,50 +617,47 @@ def test_vsicrypt_6(testnonboundtoswig_setup): # noqa
testnonboundtoswig_setup.VSISetCryptKey.restype = None
# Set a valid key
- testnonboundtoswig_setup.VSISetCryptKey('DONT_USE_IN_PROD'.encode('ASCII'), 16)
+ testnonboundtoswig_setup.VSISetCryptKey("DONT_USE_IN_PROD".encode("ASCII"), 16)
if not gdaltest.has_vsicrypt:
pytest.skip()
- fp = gdal.VSIFOpenL('/vsicrypt/add_key_check=yes,file=/vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt/add_key_check=yes,file=/vsimem/file.bin", "wb+")
assert fp is not None
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "rb")
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello'
+ assert content == "hello"
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "wb+")
assert fp is not None
- gdal.VSIFWriteL('hello', 1, 5, fp)
+ gdal.VSIFWriteL("hello", 1, 5, fp)
gdal.VSIFCloseL(fp)
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb')
- content = gdal.VSIFReadL(1, 5, fp).decode('latin1')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "rb")
+ content = gdal.VSIFReadL(1, 5, fp).decode("latin1")
gdal.VSIFCloseL(fp)
- assert content == 'hello'
+ assert content == "hello"
# Set a too short key
- testnonboundtoswig_setup.VSISetCryptKey('bbc'.encode('ASCII'), 3)
+ testnonboundtoswig_setup.VSISetCryptKey("bbc".encode("ASCII"), 3)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'rb')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "rb")
assert fp is None
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "wb+")
assert fp is None
# Erase key
testnonboundtoswig_setup.VSISetCryptKey(None, 0)
with gdaltest.error_handler():
- fp = gdal.VSIFOpenL('/vsicrypt//vsimem/file.bin', 'wb+')
+ fp = gdal.VSIFOpenL("/vsicrypt//vsimem/file.bin", "wb+")
assert fp is None
- gdal.Unlink('/vsimem/file.bin')
-
-
-
+ gdal.Unlink("/vsimem/file.bin")
diff --git a/autotest/gcore/vsicurl.py b/autotest/gcore/vsicurl.py
index 9c37aa13f19f..6884992a0387 100755
--- a/autotest/gcore/vsicurl.py
+++ b/autotest/gcore/vsicurl.py
@@ -29,18 +29,17 @@
###############################################################################
import time
-from osgeo import gdal
-from osgeo import ogr
-
import gdaltest
-import webserver
import pytest
+import webserver
+from osgeo import gdal, ogr
###############################################################################
#
+
def test_vsicurl_1():
if not gdaltest.run_slow_tests():
pytest.skip()
@@ -48,9 +47,12 @@ def test_vsicurl_1():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = ogr.Open('/vsizip/vsicurl/http://publicfiles.dep.state.fl.us/dear/BWR_GIS/2007NWFLULC/NWFWMD2007LULC.zip')
+ ds = ogr.Open(
+ "/vsizip/vsicurl/http://publicfiles.dep.state.fl.us/dear/BWR_GIS/2007NWFLULC/NWFWMD2007LULC.zip"
+ )
assert ds is not None
+
###############################################################################
#
@@ -62,9 +64,12 @@ def vsicurl_2():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = gdal.Open('/vsizip//vsicurl/http://eros.usgs.gov/archive/nslrsda/GeoTowns/HongKong/srtm/n22e113.zip/n22e113.bil')
+ ds = gdal.Open(
+ "/vsizip//vsicurl/http://eros.usgs.gov/archive/nslrsda/GeoTowns/HongKong/srtm/n22e113.zip/n22e113.bil"
+ )
assert ds is not None
+
###############################################################################
# This server doesn't support range downloading
@@ -76,9 +81,12 @@ def vsicurl_3():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = ogr.Open('/vsizip/vsicurl/http://www.iucnredlist.org/spatial-data/MAMMALS_TERRESTRIAL.zip')
+ ds = ogr.Open(
+ "/vsizip/vsicurl/http://www.iucnredlist.org/spatial-data/MAMMALS_TERRESTRIAL.zip"
+ )
assert ds is None
+
###############################################################################
# This server doesn't support range downloading
@@ -90,9 +98,12 @@ def test_vsicurl_4():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = ogr.Open('/vsizip/vsicurl/http://lelserver.env.duke.edu:8080/LandscapeTools/export/49/Downloads/1_Habitats.zip')
+ ds = ogr.Open(
+ "/vsizip/vsicurl/http://lelserver.env.duke.edu:8080/LandscapeTools/export/49/Downloads/1_Habitats.zip"
+ )
assert ds is None
+
###############################################################################
# Test URL unescaping when reading HTTP file list
@@ -104,9 +115,12 @@ def test_vsicurl_5():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = gdal.Open('/vsicurl/http://dds.cr.usgs.gov/srtm/SRTM_image_sample/picture%20examples/N34W119_DEM.tif')
+ ds = gdal.Open(
+ "/vsicurl/http://dds.cr.usgs.gov/srtm/SRTM_image_sample/picture%20examples/N34W119_DEM.tif"
+ )
assert ds is not None
+
###############################################################################
# Test with FTP server that doesn't support EPSV command
@@ -118,13 +132,14 @@ def vsicurl_6_disabled():
if not gdaltest.built_against_curl():
pytest.skip()
- fl = gdal.ReadDir('/vsicurl/ftp://ftp2.cits.rncan.gc.ca/pub/cantopo/250k_tif')
+ fl = gdal.ReadDir("/vsicurl/ftp://ftp2.cits.rncan.gc.ca/pub/cantopo/250k_tif")
assert fl
###############################################################################
# Test Microsoft-IIS/6.0 listing
+
def test_vsicurl_7():
if not gdaltest.run_slow_tests():
pytest.skip()
@@ -132,9 +147,10 @@ def test_vsicurl_7():
if not gdaltest.built_against_curl():
pytest.skip()
- fl = gdal.ReadDir('/vsicurl/http://ortho.linz.govt.nz/tifs/2005_06')
+ fl = gdal.ReadDir("/vsicurl/http://ortho.linz.govt.nz/tifs/2005_06")
assert fl
+
###############################################################################
# Test interleaved reading between 2 datasets
@@ -146,11 +162,16 @@ def vsicurl_8():
if not gdaltest.built_against_curl():
pytest.skip()
- ds1 = gdal.Open('/vsigzip//vsicurl/http://dds.cr.usgs.gov/pub/data/DEM/250/notavail/C/chipicoten-w.gz')
- gdal.Open('/vsizip//vsicurl/http://edcftp.cr.usgs.gov/pub/data/landcover/files/2009/biso/gokn09b_dnbr.zip/nps-serotnbsp-9001-20090321_rd.tif')
+ ds1 = gdal.Open(
+ "/vsigzip//vsicurl/http://dds.cr.usgs.gov/pub/data/DEM/250/notavail/C/chipicoten-w.gz"
+ )
+ gdal.Open(
+ "/vsizip//vsicurl/http://edcftp.cr.usgs.gov/pub/data/landcover/files/2009/biso/gokn09b_dnbr.zip/nps-serotnbsp-9001-20090321_rd.tif"
+ )
cs = ds1.GetRasterBand(1).Checksum()
assert cs == 61342
+
###############################################################################
# Test reading a file with Chinese characters, but the HTTP file listing
# returns escaped sequences instead of the Chinese characters.
@@ -163,10 +184,13 @@ def test_vsicurl_9():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = gdal.Open('/vsicurl/http://download.osgeo.org/gdal/data/gtiff/'
- 'xx\u4E2D\u6587.\u4E2D\u6587')
+ ds = gdal.Open(
+ "/vsicurl/http://download.osgeo.org/gdal/data/gtiff/"
+ "xx\u4E2D\u6587.\u4E2D\u6587"
+ )
assert ds is not None
+
###############################################################################
# Test reading a file with escaped Chinese characters.
@@ -178,9 +202,12 @@ def test_vsicurl_10():
if not gdaltest.built_against_curl():
pytest.skip()
- ds = gdal.Open('/vsicurl/http://download.osgeo.org/gdal/data/gtiff/xx%E4%B8%AD%E6%96%87.%E4%B8%AD%E6%96%87')
+ ds = gdal.Open(
+ "/vsicurl/http://download.osgeo.org/gdal/data/gtiff/xx%E4%B8%AD%E6%96%87.%E4%B8%AD%E6%96%87"
+ )
assert ds is not None
+
###############################################################################
# Test ReadDir() after reading a file on the same server
@@ -192,16 +219,19 @@ def test_vsicurl_11():
if not gdaltest.built_against_curl():
pytest.skip()
- f = gdal.VSIFOpenL('/vsicurl/http://download.osgeo.org/gdal/data/bmp/Bug2236.bmp', 'rb')
+ f = gdal.VSIFOpenL(
+ "/vsicurl/http://download.osgeo.org/gdal/data/bmp/Bug2236.bmp", "rb"
+ )
if f is None:
pytest.skip()
gdal.VSIFSeekL(f, 1000000, 0)
gdal.VSIFReadL(1, 1, f)
gdal.VSIFCloseL(f)
- filelist = gdal.ReadDir('/vsicurl/http://download.osgeo.org/gdal/data/gtiff')
+ filelist = gdal.ReadDir("/vsicurl/http://download.osgeo.org/gdal/data/gtiff")
assert filelist is not None and filelist
+
###############################################################################
@@ -213,7 +243,9 @@ def test_vsicurl_start_webserver():
if not gdaltest.built_against_curl():
pytest.skip()
- (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(handler=webserver.DispatcherHttpHandler)
+ (gdaltest.webserver_process, gdaltest.webserver_port) = webserver.launch(
+ handler=webserver.DispatcherHttpHandler
+ )
if gdaltest.webserver_port == 0:
pytest.skip()
@@ -230,58 +262,84 @@ def test_vsicurl_test_redirect():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('GET', '/test_redirect/', 404)
+ handler.add("GET", "/test_redirect/", 404)
# Simulate a big time difference between server and local machine
current_time = 1500
def method(request):
- response = 'HTTP/1.1 302\r\n'
- response += 'Server: foo\r\n'
- response += 'Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time)) + '\r\n'
- response += 'Location: %s\r\n' % ('http://localhost:%d/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d' % (gdaltest.webserver_port, current_time + 30))
- response += '\r\n'
- request.wfile.write(response.encode('ascii'))
-
- handler.add('HEAD', '/test_redirect/test.bin', custom_method=method)
- handler.add('HEAD', '/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d' % (current_time + 30), 403,
- {'Server': 'foo'}, '')
+ response = "HTTP/1.1 302\r\n"
+ response += "Server: foo\r\n"
+ response += (
+ "Date: "
+ + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time))
+ + "\r\n"
+ )
+ response += "Location: %s\r\n" % (
+ "http://localhost:%d/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d"
+ % (gdaltest.webserver_port, current_time + 30)
+ )
+ response += "\r\n"
+ request.wfile.write(response.encode("ascii"))
+
+ handler.add("HEAD", "/test_redirect/test.bin", custom_method=method)
+ handler.add(
+ "HEAD",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d"
+ % (current_time + 30),
+ 403,
+ {"Server": "foo"},
+ "",
+ )
def method(request):
- if 'Range' in request.headers:
- if request.headers['Range'] == 'bytes=0-16383':
- request.protocol_version = 'HTTP/1.1'
+ if "Range" in request.headers:
+ if request.headers["Range"] == "bytes=0-16383":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 0-16383/1000000')
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 0-16383/1000000")
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write(('x' * 16384).encode('ascii'))
- elif request.headers['Range'] == 'bytes=16384-49151':
+ request.wfile.write(("x" * 16384).encode("ascii"))
+ elif request.headers["Range"] == "bytes=16384-49151":
# Test expiration of the signed URL
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
else:
# After a failed attempt on a HEAD, the client should go there
- response = 'HTTP/1.1 200\r\n'
- response += 'Server: foo\r\n'
- response += 'Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time)) + '\r\n'
- response += 'Content-type: text/plain\r\n'
- response += 'Content-Length: 1000000\r\n'
- response += 'Connection: close\r\n'
- response += '\r\n'
- request.wfile.write(response.encode('ascii'))
-
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d' % (current_time + 30), custom_method=method)
+ response = "HTTP/1.1 200\r\n"
+ response += "Server: foo\r\n"
+ response += (
+ "Date: "
+ + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time))
+ + "\r\n"
+ )
+ response += "Content-type: text/plain\r\n"
+ response += "Content-Length: 1000000\r\n"
+ response += "Connection: close\r\n"
+ response += "\r\n"
+ request.wfile.write(response.encode("ascii"))
+
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d"
+ % (current_time + 30),
+ custom_method=method,
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsicurl/http://localhost:%d/test_redirect/test.bin' % gdaltest.webserver_port, 'rb')
+ f = gdal.VSIFOpenL(
+ "/vsicurl/http://localhost:%d/test_redirect/test.bin"
+ % gdaltest.webserver_port,
+ "rb",
+ )
assert f is not None
gdal.VSIFSeekL(f, 0, 2)
@@ -293,51 +351,75 @@ def method(request):
gdal.VSIFSeekL(f, 0, 0)
handler = webserver.SequentialHandler()
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d' % (current_time + 30), custom_method=method)
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d' % (current_time + 30), custom_method=method)
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d"
+ % (current_time + 30),
+ custom_method=method,
+ )
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?Signature=foo&Expires=%d"
+ % (current_time + 30),
+ custom_method=method,
+ )
current_time = int(time.time())
def method(request):
# We should go there after expiration of the first signed URL
- if 'Range' in request.headers and \
- request.headers['Range'] == 'bytes=16384-49151':
- request.protocol_version = 'HTTP/1.1'
+ if (
+ "Range" in request.headers
+ and request.headers["Range"] == "bytes=16384-49151"
+ ):
+ request.protocol_version = "HTTP/1.1"
request.send_response(302)
# Return a new signed URL
- request.send_header('Location', 'http://localhost:%d/foo.s3.amazonaws.com/test_redirected2/test.bin?Signature=foo&Expires=%d' % (request.server.port, current_time + 30))
- request.send_header('Content-Length', 16384)
+ request.send_header(
+ "Location",
+ "http://localhost:%d/foo.s3.amazonaws.com/test_redirected2/test.bin?Signature=foo&Expires=%d"
+ % (request.server.port, current_time + 30),
+ )
+ request.send_header("Content-Length", 16384)
request.end_headers()
- request.wfile.write(('x' * 16384).encode('ascii'))
+ request.wfile.write(("x" * 16384).encode("ascii"))
- handler.add('GET', '/test_redirect/test.bin', custom_method=method)
+ handler.add("GET", "/test_redirect/test.bin", custom_method=method)
def method(request):
# Second signed URL
- if 'Range' in request.headers and \
- request.headers['Range'] == 'bytes=16384-49151':
- request.protocol_version = 'HTTP/1.1'
+ if (
+ "Range" in request.headers
+ and request.headers["Range"] == "bytes=16384-49151"
+ ):
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 16384-16384/1000000')
- request.send_header('Content-Length', 1)
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 16384-16384/1000000")
+ request.send_header("Content-Length", 1)
request.end_headers()
- request.wfile.write('y'.encode('ascii'))
+ request.wfile.write("y".encode("ascii"))
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected2/test.bin?Signature=foo&Expires=%d' % (current_time + 30), custom_method=method)
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected2/test.bin?Signature=foo&Expires=%d"
+ % (current_time + 30),
+ custom_method=method,
+ )
with webserver.install_http_handler(handler):
- content = gdal.VSIFReadL(1, 16383, f).decode('ascii')
- if len(content) != 16383 or content[0] != 'x':
+ content = gdal.VSIFReadL(1, 16383, f).decode("ascii")
+ if len(content) != 16383 or content[0] != "x":
gdal.VSIFCloseL(f)
pytest.fail(content)
- content = gdal.VSIFReadL(1, 2, f).decode('ascii')
- if content != 'xy':
+ content = gdal.VSIFReadL(1, 2, f).decode("ascii")
+ if content != "xy":
gdal.VSIFCloseL(f)
pytest.fail(content)
gdal.VSIFCloseL(f)
+
###############################################################################
# Test redirection with X-Amz-Expires= + X-Amz-Date= type of signed URLs
@@ -350,58 +432,87 @@ def test_vsicurl_test_redirect_x_amz():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('GET', '/test_redirect/', 404)
+ handler.add("GET", "/test_redirect/", 404)
# Simulate a big time difference between server and local machine
current_time = 1500
def method(request):
- response = 'HTTP/1.1 302\r\n'
- response += 'Server: foo\r\n'
- response += 'Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time)) + '\r\n'
- response += 'Location: %s\r\n' % ('http://localhost:%d/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % (gdaltest.webserver_port, time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time))))
- response += '\r\n'
- request.wfile.write(response.encode('ascii'))
-
- handler.add('HEAD', '/test_redirect/test.bin', custom_method=method)
- handler.add('HEAD', '/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)), 403,
- {'Server': 'foo'}, '')
+ response = "HTTP/1.1 302\r\n"
+ response += "Server: foo\r\n"
+ response += (
+ "Date: "
+ + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time))
+ + "\r\n"
+ )
+ response += "Location: %s\r\n" % (
+ "http://localhost:%d/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % (
+ gdaltest.webserver_port,
+ time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ )
+ )
+ response += "\r\n"
+ request.wfile.write(response.encode("ascii"))
+
+ handler.add("HEAD", "/test_redirect/test.bin", custom_method=method)
+ handler.add(
+ "HEAD",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ 403,
+ {"Server": "foo"},
+ "",
+ )
def method(request):
- if 'Range' in request.headers:
- if request.headers['Range'] == 'bytes=0-16383':
- request.protocol_version = 'HTTP/1.1'
+ if "Range" in request.headers:
+ if request.headers["Range"] == "bytes=0-16383":
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 0-16383/1000000')
- request.send_header('Content-Length', 16384)
- request.send_header('Connection', 'close')
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 0-16383/1000000")
+ request.send_header("Content-Length", 16384)
+ request.send_header("Connection", "close")
request.end_headers()
- request.wfile.write(('x' * 16384).encode('ascii'))
- elif request.headers['Range'] == 'bytes=16384-49151':
+ request.wfile.write(("x" * 16384).encode("ascii"))
+ elif request.headers["Range"] == "bytes=16384-49151":
# Test expiration of the signed URL
- request.protocol_version = 'HTTP/1.1'
+ request.protocol_version = "HTTP/1.1"
request.send_response(403)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
else:
request.send_response(404)
- request.send_header('Content-Length', 0)
+ request.send_header("Content-Length", 0)
request.end_headers()
else:
# After a failed attempt on a HEAD, the client should go there
- response = 'HTTP/1.1 200\r\n'
- response += 'Server: foo\r\n'
- response += 'Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time)) + '\r\n'
- response += 'Content-type: text/plain\r\n'
- response += 'Content-Length: 1000000\r\n'
- response += 'Connection: close\r\n'
- response += '\r\n'
- request.wfile.write(response.encode('ascii'))
-
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)), custom_method=method)
+ response = "HTTP/1.1 200\r\n"
+ response += "Server: foo\r\n"
+ response += (
+ "Date: "
+ + time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(current_time))
+ + "\r\n"
+ )
+ response += "Content-type: text/plain\r\n"
+ response += "Content-Length: 1000000\r\n"
+ response += "Connection: close\r\n"
+ response += "\r\n"
+ request.wfile.write(response.encode("ascii"))
+
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ custom_method=method,
+ )
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsicurl/http://localhost:%d/test_redirect/test.bin' % gdaltest.webserver_port, 'rb')
+ f = gdal.VSIFOpenL(
+ "/vsicurl/http://localhost:%d/test_redirect/test.bin"
+ % gdaltest.webserver_port,
+ "rb",
+ )
assert f is not None
gdal.VSIFSeekL(f, 0, 2)
@@ -413,51 +524,78 @@ def method(request):
gdal.VSIFSeekL(f, 0, 0)
handler = webserver.SequentialHandler()
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)), custom_method=method)
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)), custom_method=method)
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ custom_method=method,
+ )
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ custom_method=method,
+ )
current_time = int(time.time())
def method(request):
# We should go there after expiration of the first signed URL
- if 'Range' in request.headers and \
- request.headers['Range'] == 'bytes=16384-49151':
- request.protocol_version = 'HTTP/1.1'
+ if (
+ "Range" in request.headers
+ and request.headers["Range"] == "bytes=16384-49151"
+ ):
+ request.protocol_version = "HTTP/1.1"
request.send_response(302)
# Return a new signed URL
- request.send_header('Location', 'http://localhost:%d/foo.s3.amazonaws.com/test_redirected2/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % (request.server.port, time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time))))
- request.send_header('Content-Length', 16384)
+ request.send_header(
+ "Location",
+ "http://localhost:%d/foo.s3.amazonaws.com/test_redirected2/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % (
+ request.server.port,
+ time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ ),
+ )
+ request.send_header("Content-Length", 16384)
request.end_headers()
- request.wfile.write(('x' * 16384).encode('ascii'))
+ request.wfile.write(("x" * 16384).encode("ascii"))
- handler.add('GET', '/test_redirect/test.bin', custom_method=method)
+ handler.add("GET", "/test_redirect/test.bin", custom_method=method)
def method(request):
# Second signed URL
- if 'Range' in request.headers and \
- request.headers['Range'] == 'bytes=16384-49151':
- request.protocol_version = 'HTTP/1.1'
+ if (
+ "Range" in request.headers
+ and request.headers["Range"] == "bytes=16384-49151"
+ ):
+ request.protocol_version = "HTTP/1.1"
request.send_response(200)
- request.send_header('Content-type', 'text/plain')
- request.send_header('Content-Range', 'bytes 16384-16384/1000000')
- request.send_header('Content-Length', 1)
+ request.send_header("Content-type", "text/plain")
+ request.send_header("Content-Range", "bytes 16384-16384/1000000")
+ request.send_header("Content-Length", 1)
request.end_headers()
- request.wfile.write('y'.encode('ascii'))
+ request.wfile.write("y".encode("ascii"))
- handler.add('GET', '/foo.s3.amazonaws.com/test_redirected2/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s' % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)), custom_method=method)
+ handler.add(
+ "GET",
+ "/foo.s3.amazonaws.com/test_redirected2/test.bin?X-Amz-Signature=foo&X-Amz-Expires=30&X-Amz-Date=%s"
+ % time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(current_time)),
+ custom_method=method,
+ )
with webserver.install_http_handler(handler):
- content = gdal.VSIFReadL(1, 16383, f).decode('ascii')
- if len(content) != 16383 or content[0] != 'x':
+ content = gdal.VSIFReadL(1, 16383, f).decode("ascii")
+ if len(content) != 16383 or content[0] != "x":
gdal.VSIFCloseL(f)
pytest.fail(content)
- content = gdal.VSIFReadL(1, 2, f).decode('ascii')
- if content != 'xy':
+ content = gdal.VSIFReadL(1, 2, f).decode("ascii")
+ if content != "xy":
gdal.VSIFCloseL(f)
pytest.fail(content)
gdal.VSIFCloseL(f)
+
###############################################################################
# TODO: better testing
@@ -467,6 +605,7 @@ def test_vsicurl_test_clear_cache():
gdal.VSICurlClearCache()
gdal.VSICurlClearCache()
+
###############################################################################
@@ -476,11 +615,15 @@ def test_vsicurl_test_retry():
pytest.skip()
handler = webserver.SequentialHandler()
- handler.add('GET', '/test_retry/', 404)
- handler.add('HEAD', '/test_retry/test.txt', 200, {'Content-Length': '3'})
- handler.add('GET', '/test_retry/test.txt', 502)
+ handler.add("GET", "/test_retry/", 404)
+ handler.add("HEAD", "/test_retry/test.txt", 200, {"Content-Length": "3"})
+ handler.add("GET", "/test_retry/test.txt", 502)
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsicurl/http://localhost:%d/test_retry/test.txt' % gdaltest.webserver_port, 'rb')
+ f = gdal.VSIFOpenL(
+ "/vsicurl/http://localhost:%d/test_retry/test.txt"
+ % gdaltest.webserver_port,
+ "rb",
+ )
data_len = 0
if f:
data_len = len(gdal.VSIFReadL(1, 1, f))
@@ -490,21 +633,25 @@ def test_vsicurl_test_retry():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('GET', '/test_retry/', 404)
- handler.add('HEAD', '/test_retry/test.txt', 200, {'Content-Length': '3'})
- handler.add('GET', '/test_retry/test.txt', 502)
- handler.add('GET', '/test_retry/test.txt', 429)
- handler.add('GET', '/test_retry/test.txt', 200, {}, 'foo')
+ handler.add("GET", "/test_retry/", 404)
+ handler.add("HEAD", "/test_retry/test.txt", 200, {"Content-Length": "3"})
+ handler.add("GET", "/test_retry/test.txt", 502)
+ handler.add("GET", "/test_retry/test.txt", 429)
+ handler.add("GET", "/test_retry/test.txt", 200, {}, "foo")
with webserver.install_http_handler(handler):
- f = gdal.VSIFOpenL('/vsicurl?max_retry=2&retry_delay=0.01&url=http://localhost:%d/test_retry/test.txt' % gdaltest.webserver_port, 'rb')
+ f = gdal.VSIFOpenL(
+ "/vsicurl?max_retry=2&retry_delay=0.01&url=http://localhost:%d/test_retry/test.txt"
+ % gdaltest.webserver_port,
+ "rb",
+ )
assert f is not None
gdal.ErrorReset()
with gdaltest.error_handler():
- data = gdal.VSIFReadL(1, 3, f).decode('ascii')
+ data = gdal.VSIFReadL(1, 3, f).decode("ascii")
error_msg = gdal.GetLastErrorMsg()
gdal.VSIFCloseL(f)
- assert data == 'foo'
- assert '429' in error_msg
+ assert data == "foo"
+ assert "429" in error_msg
###############################################################################
@@ -518,14 +665,18 @@ def test_vsicurl_test_fallback_from_head_to_get():
gdal.VSICurlClearCache()
handler = webserver.SequentialHandler()
- handler.add('HEAD', '/test_fallback_from_head_to_get', 405)
- handler.add('GET', '/test_fallback_from_head_to_get', 200, {}, 'foo')
+ handler.add("HEAD", "/test_fallback_from_head_to_get", 405)
+ handler.add("GET", "/test_fallback_from_head_to_get", 200, {}, "foo")
with webserver.install_http_handler(handler):
- statres = gdal.VSIStatL('/vsicurl/http://localhost:%d/test_fallback_from_head_to_get' % gdaltest.webserver_port)
+ statres = gdal.VSIStatL(
+ "/vsicurl/http://localhost:%d/test_fallback_from_head_to_get"
+ % gdaltest.webserver_port
+ )
assert statres.size == 3
gdal.VSICurlClearCache()
+
###############################################################################
@@ -535,7 +686,12 @@ def test_vsicurl_test_parse_html_filelist_apache():
pytest.skip()
handler = webserver.SequentialHandler()
- handler.add('GET', '/mydir/', 200, {}, """
+ handler.add(
+ "GET",
+ "/mydir/",
+ 200,
+ {},
+ """
Index of /mydir
@@ -548,17 +704,34 @@ def test_vsicurl_test_parse_html_filelist_apache():
![[IMG]](/icons/image2.gif) | foo with space.tif | 15-Jan-2007 11:02 | 736 | |
|
-""")
+