[Git][debian-gis-team/python-mapnik][upstream] 2 commits: New upstream version 0.0~20240816-e25ea400e
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Fri Nov 1 13:35:19 GMT 2024
Bas Couwenberg pushed to branch upstream at Debian GIS Project / python-mapnik
Commits:
099250ee by Bas Couwenberg at 2024-08-30T20:12:43+02:00
New upstream version 0.0~20240816-e25ea400e
- - - - -
e52fa506 by Bas Couwenberg at 2024-10-16T13:12:47+02:00
New upstream version 0.0~20240911-7addcf9ab
- - - - -
10 changed files:
- pyproject.toml
- setup.py
- src/mapnik_placement_finder.cpp
- src/mapnik_projection.cpp
- src/mapnik_text_symbolizer.cpp
- src/python_to_value.hpp
- test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64 Cl--1-box1.png
- test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64--0-box1.png
- test/python_tests/images/support/raster_warping.png
- test/python_tests/pgraster_test.py
Changes:
=====================================
pyproject.toml
=====================================
@@ -1,7 +1,7 @@
[build-system]
requires = [
- "setuptools >= 69.0",
- "pybind11 >= 2.10.0",
+ "setuptools >= 74.1.2",
+ "pybind11 >= 2.13.5",
]
build-backend = "setuptools.build_meta"
@@ -29,3 +29,9 @@ Documentation = "https://github.com/mapnik/python-mapnik/wiki"
Repository = "https://github.com/mapnik/python-mapnik"
"Bug Tracker" = "https://github.com/mapnik/python-mapnik/issues"
Changelog = "https://github.com/mapnik/python-mapnik/blob/master/CHANGELOG.md"
+
+[tool.pytest.ini_options]
+minversion = "8.0"
+testpaths = [
+ "test/python_tests",
+]
\ No newline at end of file
=====================================
setup.py
=====================================
@@ -125,8 +125,6 @@ setup(
'mapnik': ['lib/*.*', 'lib/*/*/*', 'share/*/*'],
},
ext_modules=ext_modules,
- #extras_require={"test": "pytest"},
cmdclass={"build_ext": build_ext},
- #zip_safe=False,
python_requires=">=3.7",
)
=====================================
src/mapnik_placement_finder.cpp
=====================================
@@ -28,6 +28,7 @@
#include <mapnik/symbolizer_keys.hpp>
#include <mapnik/symbolizer_enumerations.hpp>
#include <mapnik/text/placements/dummy.hpp>
+#include <mapnik/text/placements/simple.hpp>
#include <mapnik/text/text_properties.hpp>
#include <mapnik/text/formatting/text.hpp>
#include "mapnik_symbolizer.hpp"
@@ -39,67 +40,79 @@ namespace py = pybind11;
namespace
{
-void set_face_name(mapnik::text_placements_dummy & finder, std::string const& face_name)
+template <typename PlacementFinder>
+void set_face_name(PlacementFinder & finder, std::string const& face_name)
{
finder.defaults.format_defaults.face_name = face_name;
}
-std::string get_face_name(mapnik::text_placements_dummy & finder)
+template <typename PlacementFinder>
+std::string get_face_name(PlacementFinder const& finder)
{
return finder.defaults.format_defaults.face_name;
}
-void set_text_size(mapnik::text_placements_dummy & finder, double text_size)
+template <typename PlacementFinder>
+void set_text_size(PlacementFinder & finder, double text_size)
{
finder.defaults.format_defaults.text_size = text_size;
}
-py::object get_text_size(mapnik::text_placements_dummy const& finder)
+template <typename PlacementFinder>
+py::object get_text_size(PlacementFinder const& finder)
{
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
finder.defaults.format_defaults.text_size);
}
-void set_fill(mapnik::text_placements_dummy & finder, mapnik::color const& fill)
+template <typename PlacementFinder>
+void set_fill(PlacementFinder & finder, mapnik::color const& fill)
{
finder.defaults.format_defaults.fill = fill;
}
-py::object get_fill(mapnik::text_placements_dummy & finder)
+template <typename PlacementFinder>
+py::object get_fill(PlacementFinder const& finder)
{
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
finder.defaults.format_defaults.fill);
}
-void set_halo_fill(mapnik::text_placements_dummy & finder, mapnik::color const& halo_fill )
+
+template <typename PlacementFinder>
+void set_halo_fill(PlacementFinder & finder, mapnik::color const& halo_fill )
{
finder.defaults.format_defaults.halo_fill = halo_fill;
}
-py::object get_halo_fill(mapnik::text_placements_dummy & finder)
+template <typename PlacementFinder>
+py::object get_halo_fill(PlacementFinder const& finder)
{
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
finder.defaults.format_defaults.halo_fill);
}
-
-void set_halo_radius(mapnik::text_placements_dummy & finder, double halo_radius)
+template <typename PlacementFinder>
+void set_halo_radius(PlacementFinder & finder, double halo_radius)
{
finder.defaults.format_defaults.halo_radius = halo_radius;
}
-py::object get_halo_radius(mapnik::text_placements_dummy & finder)
+template <typename PlacementFinder>
+py::object get_halo_radius(PlacementFinder const& finder)
{
return mapnik::util::apply_visitor(python_mapnik::extract_python_object<>(mapnik::keys::MAX_SYMBOLIZER_KEY),
finder.defaults.format_defaults.halo_radius);
}
-void set_format_expr(mapnik::text_placements_dummy & finder, std::string const& expr)
+template <typename PlacementFinder>
+void set_format_expr(PlacementFinder & finder, std::string const& expr)
{
finder.defaults.set_format_tree(
std::make_shared<mapnik::formatting::text_node>(mapnik::parse_expression(expr)));
}
-std::string get_format_expr(mapnik::text_placements_dummy & finder)
+template <typename PlacementFinder>
+std::string get_format_expr(PlacementFinder const& finder)
{
mapnik::expression_set exprs;
finder.defaults.add_expressions(exprs);
@@ -118,11 +131,59 @@ void export_placement_finder(py::module const& m)
{
py::class_<mapnik::text_placements_dummy, std::shared_ptr<mapnik::text_placements_dummy>>(m, "PlacementFinder")
.def(py::init<>(), "Default ctor")
- .def_property("face_name", &get_face_name, &set_face_name, "Font face name")
- .def_property("text_size", &get_text_size, &set_text_size, "Size of text")
- .def_property("fill", &get_fill, &set_fill, "Fill")
- .def_property("halo_fill", &get_halo_fill, &set_halo_fill, "Halo fill")
- .def_property("halo_radius", &get_halo_radius, &set_halo_radius, "Halo radius")
- .def_property("format_expression", &get_format_expr, &set_format_expr, "Format expression")
+ .def_property("face_name",
+ &get_face_name<mapnik::text_placements_dummy>,
+ &set_face_name<mapnik::text_placements_dummy>,
+ "Font face name")
+ .def_property("text_size",
+ &get_text_size<mapnik::text_placements_dummy>,
+ &set_text_size<mapnik::text_placements_dummy>,
+ "Size of text")
+ .def_property("fill",
+ &get_fill<mapnik::text_placements_dummy>,
+ &set_fill<mapnik::text_placements_dummy>,
+ "Fill")
+ .def_property("halo_fill",
+ &get_halo_fill<mapnik::text_placements_dummy>,
+ &set_halo_fill<mapnik::text_placements_dummy>,
+ "Halo fill")
+ .def_property("halo_radius",
+ &get_halo_radius<mapnik::text_placements_dummy>,
+ &set_halo_radius<mapnik::text_placements_dummy>,
+ "Halo radius")
+ .def_property("format_expression",
+ &get_format_expr<mapnik::text_placements_dummy>,
+ &set_format_expr<mapnik::text_placements_dummy>,
+ "Format expression")
+ ;
+
+/*
+ py::class_<mapnik::text_placements_simple, std::shared_ptr<mapnik::text_placements_simple>>(m, "PlacementFinderSimple")
+ .def(py::init<>(), "Default ctor")
+ .def_property("face_name",
+ &get_face_name<mapnik::text_placements_simple>,
+ &set_face_name<mapnik::text_placements_simple>,
+ "Font face name")
+ .def_property("text_size",
+ &get_text_size<mapnik::text_placements_simple>,
+ &set_text_size<mapnik::text_placements_simple>,
+ "Size of text")
+ .def_property("fill",
+ &get_fill<mapnik::text_placements_simple>,
+ &set_fill<mapnik::text_placements_simple>,
+ "Fill")
+ .def_property("halo_fill",
+ &get_halo_fill<mapnik::text_placements_simple>,
+ &set_halo_fill<mapnik::text_placements_simple>,
+ "Halo fill")
+ .def_property("halo_radius",
+ &get_halo_radius<mapnik::text_placements_simple>,
+ &set_halo_radius<mapnik::text_placements_simple>,
+ "Halo radius")
+ .def_property("format_expression",
+ &get_format_expr<mapnik::text_placements_simple>,
+ &set_format_expr<mapnik::text_placements_simple>,
+ "Format expression")
;
+*/
}
=====================================
src/mapnik_projection.cpp
=====================================
@@ -27,6 +27,7 @@
#include <mapnik/projection.hpp>
//pybind11
#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
using mapnik::projection;
@@ -107,11 +108,13 @@ void export_projection (py::module& m)
.def_property_readonly("geographic", &projection::is_geographic,
"This property is True if the projection is a geographic projection\n"
"(i.e. it uses lon/lat coordinates)\n")
+ .def_property_readonly("area_of_use", &projection::area_of_use,
+ "This property returns projection area of use in lonlat WGS84\n")
;
- m.def("forward_",&forward_pt);
- m.def("inverse_",&inverse_pt);
- m.def("forward_",&forward_env);
- m.def("inverse_",&inverse_env);
+ m.def("forward_", &forward_pt);
+ m.def("inverse_", &inverse_pt);
+ m.def("forward_", &forward_env);
+ m.def("inverse_", &inverse_env);
}
=====================================
src/mapnik_text_symbolizer.cpp
=====================================
@@ -59,12 +59,12 @@ void export_text_symbolizer(py::module const& m)
using namespace python_mapnik;
using mapnik::text_symbolizer;
-// using namespace boost::python;
-// mapnik::enumeration_<mapnik::label_placement_e>("label_placement")
-// .value("LINE_PLACEMENT", mapnik::label_placement_enum::LINE_PLACEMENT)
-// .value("POINT_PLACEMENT", mapnik::label_placement_enum::POINT_PLACEMENT)
-// .value("VERTEX_PLACEMENT", mapnik::label_placement_enum::VERTEX_PLACEMENT)
-// .value("INTERIOR_PLACEMENT", mapnik::label_placement_enum::INTERIOR_PLACEMENT);
+ py::enum_<mapnik::label_placement_enum>(m, "LabelPlacement")
+ .value("LINE_PLACEMENT", mapnik::label_placement_enum::LINE_PLACEMENT)
+ .value("POINT_PLACEMENT", mapnik::label_placement_enum::POINT_PLACEMENT)
+ .value("VERTEX_PLACEMENT", mapnik::label_placement_enum::VERTEX_PLACEMENT)
+ .value("INTERIOR_PLACEMENT", mapnik::label_placement_enum::INTERIOR_PLACEMENT)
+ ;
// mapnik::enumeration_<mapnik::vertical_alignment_e>("vertical_alignment")
// .value("TOP", mapnik::vertical_alignment_enum::V_TOP)
@@ -90,14 +90,24 @@ void export_text_symbolizer(py::module const& m)
// .value("LOWERCASE", mapnik::text_transform_enum::LOWERCASE)
// .value("CAPITALIZE", mapnik::text_transform_enum::CAPITALIZE);
-// mapnik::enumeration_<mapnik::halo_rasterizer_e>("halo_rasterizer")
-// .value("FULL", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FULL)
-// .value("FAST", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FAST);
+ py::enum_<mapnik::halo_rasterizer_enum>(m, "halo_rasterizer")
+ .value("FULL", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FULL)
+ .value("FAST", mapnik::halo_rasterizer_enum::HALO_RASTERIZER_FAST);
+
+
+ // set_symbolizer_property<symbolizer_base, composite_mode_e>(sym, keys::halo_comp_op, node);
+ // set_symbolizer_property<symbolizer_base, halo_rasterizer_enum>(sym, keys::halo_rasterizer, node);
+ // set_symbolizer_property<symbolizer_base, transform_type>(sym, keys::halo_transform, node);
+ // set_symbolizer_property<symbolizer_base, value_double>(sym, keys::offset, node);
py::class_<text_symbolizer, symbolizer_base>(m, "TextSymbolizer")
.def(py::init<>(), "Default ctor")
.def("__hash__",hash_impl_2<text_symbolizer>)
.def_property("placement_finder", &get_placement_finder, &set_placement_finder, "Placement finder")
+ .def_property("halo_comp_op",
+ &get<mapnik::composite_mode_e, mapnik::keys::halo_comp_op>,
+ &set_enum_property<symbolizer_base, mapnik::composite_mode_e, mapnik::keys::halo_comp_op>,
+ "Composite mode (comp-op)")
;
}
=====================================
src/python_to_value.hpp
=====================================
@@ -48,15 +48,15 @@ namespace mapnik {
}
else if (py::isinstance<py::bool_>(handle))
{
- vars[key] = handle.cast<bool>();
+ vars[key] = handle.cast<mapnik::value_bool>();
}
else if (py::isinstance<py::float_>(handle))
{
- vars[key] = handle.cast<double>();
+ vars[key] = handle.cast<mapnik::value_double>();
}
else if (py::isinstance<py::int_>(handle))
{
- vars[key] = handle.cast<long long>();
+ vars[key] = handle.cast<mapnik::value_integer>();
}
else
{
=====================================
test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64 Cl--1-box1.png
=====================================
Binary files a/test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64 Cl--1-box1.png and b/test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64 Cl--1-box1.png differ
=====================================
test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64--0-box1.png
=====================================
Binary files a/test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64--0-box1.png and b/test/python_tests/images/support/pgraster/rgba_8bui-nodataedge-rgb_8bui C T_64x64--0-box1.png differ
=====================================
test/python_tests/images/support/raster_warping.png
=====================================
Binary files a/test/python_tests/images/support/raster_warping.png and b/test/python_tests/images/support/raster_warping.png differ
=====================================
test/python_tests/pgraster_test.py
=====================================
@@ -24,7 +24,6 @@ def setup():
# from another directory we need to chdir()
os.chdir(execution_path('.'))
-
def call(cmd, silent=False):
stdin, stderr = Popen(cmd, shell=True, stdout=PIPE,
stderr=PIPE).communicate()
@@ -129,11 +128,13 @@ def drop_imported(tabname, overview):
def compare_images(expected, im):
+ cur_dir = os.path.dirname(os.path.realpath(__file__))
expected = os.path.join(
os.path.dirname(expected),
os.path.basename(expected).replace(
':',
'_'))
+ expected = os.path.join(cur_dir, expected)
if not os.path.exists(expected) or os.environ.get('UPDATE'):
print('generating expected image %s' % expected)
im.save(expected, 'png32')
@@ -243,7 +244,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
def _test_dataraster_16bsi(lbl, tilesize, constraint, overview):
import_raster(
- './test/data/raster/dataraster-small.tif',
+ os.path.join(os.path.dirname(os.path.realpath(__file__)),'../../test/data/raster/dataraster-small.tif'),
'dataRaster',
tilesize,
constraint,
@@ -268,13 +269,13 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
_test_dataraster_16bsi(
'data_16bsi', tilesize, constraint, overview)
- # river.tiff, RGBA 8BUI
+ # # river.tiff, RGBA 8BUI
def _test_rgba_8bui_rendering(lbl, overview, rescale, clip):
if rescale:
lbl += ' Sc'
if clip:
lbl += ' Cl'
- ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table='(select * from "River") foo',
+ ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table='(select * from "River" order by rid) foo',
use_overviews=1 if overview else 0,
prescale_rasters=rescale, clip_rasters=clip)
fs = iter(ds)
@@ -312,7 +313,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s-box1.png' % (
+ expected = './images/support/pgraster/%s-%s-%s-%s-box1.png' % (
lyr.name, lbl, overview, clip)
compare_images(expected, im)
# no data
@@ -337,7 +338,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:1/10')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s-box2.png' % (
+ expected = './images/support/pgraster/%s-%s-%s-%s-box2.png' % (
lyr.name, lbl, overview, clip)
compare_images(expected, im)
# no data
@@ -356,7 +357,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
def _test_rgba_8bui(lbl, tilesize, constraint, overview):
import_raster(
- './test/data/raster/river.tiff',
+ os.path.join(os.path.dirname(os.path.realpath(__file__)),'../../test/data/raster/river.tiff'),
'River',
tilesize,
constraint,
@@ -379,13 +380,13 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
_test_rgba_8bui(
'rgba_8bui', tilesize, constraint, overview)
- # nodata-edge.tif, RGB 8BUI
+ # # nodata-edge.tif, RGB 8BUI
def _test_rgb_8bui_rendering(lbl, tnam, overview, rescale, clip):
if rescale:
lbl += ' Sc'
if clip:
lbl += ' Cl'
- ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table=tnam,
+ ds = mapnik.PgRaster(dbname=MAPNIK_TEST_DBNAME, table=f'(select * from "{tnam}" order by rid) foo',
use_overviews=1 if overview else 0,
prescale_rasters=rescale, clip_rasters=clip)
fs = iter(ds)
@@ -393,8 +394,8 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
assert feature['rid'] == 1
lyr = mapnik.Layer('rgba_8bui')
lyr.datasource = ds
- expenv = mapnik.Box2d(-12329035.7652168, 4508650.39854396,
- -12328653.0279471, 4508957.34625536)
+ expenv = mapnik.Box2d(-12329035.765216826, 4508650.398543958,
+ -12328653.027947055, 4508957.346255356)
env = lyr.envelope()
# As the input size is a prime number both horizontally
# and vertically, we expect the extent of the overview
@@ -424,7 +425,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s-%s-box1.png' % (
+ expected = './images/support/pgraster/%s-%s-%s-%s-%s-box1.png' % (
lyr.name, tnam, lbl, overview, clip)
compare_images(expected, im)
# no data
@@ -447,7 +448,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:1/10')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s-%s-box2.png' % (
+ expected = 'images/support/pgraster/%s-%s-%s-%s-%s-box2.png' % (
lyr.name, tnam, lbl, overview, clip)
compare_images(expected, im)
# no data
@@ -466,7 +467,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
def _test_rgb_8bui(lbl, tilesize, constraint, overview):
tnam = 'nodataedge'
import_raster(
- './test/data/raster/nodata-edge.tif',
+ os.path.join(os.path.dirname(os.path.realpath(__file__)),'../../test/data/raster/nodata-edge.tif'),
tnam,
tilesize,
constraint,
@@ -480,7 +481,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
for prescale in [0, 1]:
for clip in [0, 1]:
_test_rgb_8bui_rendering(lbl, tnam, overview, prescale, clip)
- #drop_imported(tnam, overview)
+ drop_imported(tnam, overview)
def test_rgb_8bui():
for tilesize in ['64x64']:
@@ -529,10 +530,10 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
lyr.datasource = ds
expenv = mapnik.Box2d(0, 0, 14, 14)
env = lyr.envelope()
- assert env.minx == expenv.minx#, places=0)
- assert env.miny == expenv.miny#, places=0)
- assert env.maxx == expenv.maxx#, places=0)
- assert env.maxy == expenv.maxy#, places=0)
+ assert env.minx == expenv.minx
+ assert env.miny == expenv.miny
+ assert env.maxx == expenv.maxx
+ assert env.maxy == expenv.maxy
mm = mapnik.Map(15, 15)
style = mapnik.Style()
sym = mapnik.RasterSymbolizer()
@@ -548,7 +549,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s.png' % (
+ expected = 'images/support/pgraster/%s-%s-%s-%s.png' % (
lyr.name, lbl, pixtype, value)
compare_images(expected, im)
h = format(value, '02x')
@@ -667,7 +668,7 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s.png' % (
+ expected = 'images/support/pgraster/%s-%s-%s-%s.png' % (
lyr.name, lbl, pixtype, value)
compare_images(expected, im)
@@ -785,11 +786,11 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
mapnik.render(mm, im)
lap = time.time() - t0
log('T ' + str(lap) + ' -- ' + lbl + ' E:full')
- expected = './test/python_tests/images/support/pgraster/%s-%s-%s-%s-%s-%s-%s-%s-%s.png' % (
+ expected = 'images/support/pgraster/%s-%s-%s-%s-%s-%s-%s-%s-%s.png' % (
lyr.name, lbl, pixtype, r, g, b, a, g1, b1)
compare_images(expected, im)
- hex_v = format(r << 24 | g << 16 | b << 8 | a, '08x').encode()
- hex_a = format(r << 24 | g1 << 16 | b << 8 | a, '08x').encode()
+ hex_v = format(r << 24 | g << 16 | b << 8 | a, '08x').encode()
+ hex_a = format(r << 24 | g1<< 16 | b << 8 | a, '08x').encode()
hex_b = format(r << 24 | g << 16 | b1 << 8 | a, '08x').encode()
assert hexlify(im.view(3, 3, 1, 1).to_string()) == hex_v
assert hexlify(im.view(8, 3, 1, 1).to_string()) == hex_v
@@ -812,11 +813,11 @@ if 'pgraster' in mapnik.DatasourceCache.plugin_names() \
255,
255)
- # def test_rgba_16bui_subquery():
- # _test_rgba_subquery('rgba_16bui_subquery', '16BUI', 65535, 0, 0, 65535, 65535, 65535)
+ #def test_rgba_16bui_subquery():
+ # _test_rgba_subquery('rgba_16bui_subquery', '16BUI', 65535, 0, 0, 65535, 65535, 65535)
- # def test_rgba_32bui_subquery():
- # _test_rgba_subquery('rgba_32bui_subquery', '32BUI')
+ #def test_rgba_32bui_subquery():
+ # _test_rgba_subquery('rgba_32bui_subquery', '32BUI')
atexit.register(postgis_takedown)
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-mapnik/-/compare/8d2936d19b2967fe32aa52440db39ec0c6efffac...e52fa50643782ec68232184f70b06cf7d4ffc054
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-mapnik/-/compare/8d2936d19b2967fe32aa52440db39ec0c6efffac...e52fa50643782ec68232184f70b06cf7d4ffc054
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20241101/c4918294/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list