imposm-2.5.0/0000755000076500000240000000000012060141076012740 5ustar oltstaff00000000000000imposm-2.5.0/CHANGES0000644000076500000240000000472412060136625013746 0ustar oltstaff00000000000000Changelog --------- 2.5.0 2012-12-06 ~~~~~~~~~~~~~~~~ - PostGIS 2 support - new --limit-to option to limit imports to polygons - added --quiet option that only logs progress once per minute - add StringIndex and Index mappings for PostgreSQL - always drop tables _and_ views with same name before creating new table/view. allows to change mappings from views to tables and vice versa. - internal refactoring to make support for non SQL databases easier 2.4.0 2012-03-30 ~~~~~~~~~~~~~~~~ - new Class and Type field types - add support to disable automatic ``type`` column - new --connection option - support for PostGIS Trigram indices - do not try to simplify empty geometries - limit progress logging to 5 times per second - use SERIAL as primary key to support multiple features with the same OSM ID - new optional splitting of long line strings - use BIGINT for OSM ID in Postgres to support 64bit OSM IDs 2.3.2 2011-09-05 ~~~~~~~~~~~~~~~~ - fixed --table-prefix - add --debug option for more verbose output - fixed way merging - fixed default_name_fields for UnionViews - improved (contains) relation builder 2.3.1 2011-07-05 ~~~~~~~~~~~~~~~~ - DROP views instead of REPLACE to prevent errors when columns changed 2.3.0 2011-07-05 ~~~~~~~~~~~~~~~~ - new PseudoArea field type - new Name and LocalizedName field type - update SRS in GeneralizedTables and UnionTables - new waterareas_gen0|1 in default style - new area field in landusages table - new meter_to_mapunit function to use same mapping for EPSG:4326 and projected SRS 2.2.0 2011-06-01 ~~~~~~~~~~~~~~~~ - support for Shapely speedups (>=1.2.10) - new --port option for PostgreSQL port - reduced size of nodes cache by ~40% - store inserted ways in extra cache - support for relations type=boundary - new faster relation builder that supports relations with >1000 rings - set import options in mapping file - import_partial_relations=True/False - relation_builder=contains(new)/union(old) - imposm_multipolygon_report=60(seconds) - imposm_multipolygon_max_ring=0 2.1.3 2011-04-19 ~~~~~~~~~~~~~~~~ - support for colons and other special chars in field and table names (e.g. de:name) 2.1.2 2011-04-13 ~~~~~~~~~~~~~~~~ - make it work on 32bit systems 2.1.1 2011-04-12 ~~~~~~~~~~~~~~~~ - new ``--proj`` option to change DB projection from EPSG:900913 - abort if there are existing cache files - new ``--merge-cache`` and ``--overwrite-cache`` options 2.1.0 2011-03-29 ~~~~~~~~~~~~~~~~ - first open source release imposm-2.5.0/imposm/0000755000076500000240000000000012060141076014244 5ustar oltstaff00000000000000imposm-2.5.0/imposm/900913.sql0000644000076500000240000000132611766043214015543 0ustar oltstaff00000000000000INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text)VALUES (900913,'EPSG',900913,'PROJCS["WGS84 / Simple Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS_1984", 6378137.0, 298.257223563]],PRIMEM["Greenwich", 0.0],UNIT["degree", 0.017453292519943295],AXIS["Longitude", EAST],AXIS["Latitude", NORTH]],PROJECTION["Mercator_1SP_Google"],PARAMETER["latitude_of_origin", 0.0],PARAMETER["central_meridian", 0.0],PARAMETER["scale_factor", 1.0],PARAMETER["false_easting", 0.0],PARAMETER["false_northing", 0.0],UNIT["m", 1.0],AXIS["x", EAST],AXIS["y", NORTH],AUTHORITY["EPSG","900913"]]','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs'); imposm-2.5.0/imposm/__init__.py0000644000076500000240000000006711766043214016367 0ustar oltstaff00000000000000__import__('pkg_resources').declare_namespace(__name__)imposm-2.5.0/imposm/app.py0000644000076500000240000003027512060140316015401 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import with_statement import glob import sys import os import optparse import logging import multiprocessing from imposm.util import setproctitle try: import shapely.speedups if shapely.speedups.available: print 'Enabling Shapely speedups.' shapely.speedups.enable() except ImportError: try: import shapely_speedups print 'Patching Shapely.' shapely_speedups.patch_shapely() except ImportError: pass import imposm.config import imposm.mapping import imposm.util import imposm.version from imposm.writer import ImposmWriter from imposm.db.config import DB from imposm.cache import OSMCache from imposm.reader import ImposmReader from imposm.mapping import TagMapper from imposm.geom import load_geom try: n_cpu = multiprocessing.cpu_count() except NotImplementedError: n_cpu = 2 def setup_logging(debug=False): imposm_log = logging.getLogger('imposm') imposm_log.setLevel(logging.DEBUG if debug else logging.INFO) ch = logging.StreamHandler(sys.stdout) ch.setLevel(logging.DEBUG) formatter = logging.Formatter( "[%(asctime)s] %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) imposm_log.addHandler(ch) __version__ = imposm.version.__version__ def main(argv=None): setproctitle('imposm: main') usage = '%prog [options] [input]...' parser = optparse.OptionParser(usage=usage, add_help_option=False, version="%prog " + __version__) parser.add_option('--help', dest='help', action='store_true', default=False, help='show this help message and exit') parser.add_option('--debug', action='store_true', default=False, help='show debug information') parser.add_option('--quiet', action='store_true', default=False, help='only print progress every 60 seconds') parser.add_option('-m', '--mapping-file', dest='mapping_file', metavar='') parser.add_option('-h', '--host', dest='host', metavar='') parser.add_option('-p', '--port', dest='port', metavar='') parser.add_option('-d', '--database', dest='db', metavar='') parser.add_option('-U', '--user', dest='user', metavar='') parser.add_option('--proj', dest='proj', metavar='EPSG:900913') parser.add_option('--connection', dest='connection', help="connection string like postgis://user:pass@host:port/database," " this overwrites the -h/-p/-d/-U options") parser.add_option('-c', '--concurrency', dest='concurrency', metavar='N', type='int', default=n_cpu) parser.add_option('--merge-cache', dest='merge_cache', default=False, action='store_true') parser.add_option('--overwrite-cache', dest='overwrite_cache', default=False, action='store_true') parser.add_option('--cache-dir', dest='cache_dir', default='.', help="path where node/ways/relations should be cached [current working dir]") parser.add_option('--table-prefix', dest='table_prefix', default=None, metavar='osm_new_', help='prefix for imported tables') parser.add_option('--table-prefix-production', dest='table_prefix_production', default='osm_', metavar='osm_', help='prefix for production tables') parser.add_option('--table-prefix-backup', dest='table_prefix_backup', default='osm_old_', metavar='osm_old_', help='prefix for backup tables') parser.add_option('--read', dest='read', default=False, action='store_true') parser.add_option('--write', dest='write', default=False, action='store_true') parser.add_option('--optimize', dest='optimize', default=False, action='store_true') parser.add_option('--deploy-production-tables', dest='deploy_tables', default=False, action='store_true', help='remove backup tables, move production tables ' 'to backup tables and move import tables to production tables') parser.add_option('--recover-production-tables', dest='recover_tables', default=False, action='store_true', help='move production tables to import tables and' 'move backup tables to production tables') parser.add_option('--remove-backup-tables', dest='remove_backup_tables', default=False, action='store_true') parser.add_option('-n', '--dry-run', dest='dry_run', default=False, action='store_true') parser.add_option('--limit-to', dest='limit_to', metavar='file', help='limit imported geometries to (multi)polygons in EPSG:4326') (options, args) = parser.parse_args(argv) setup_logging(debug=options.debug) if (argv and len(argv) == 0) or (not argv and len(sys.argv) == 1): options.help = True if not any([options.read, options.write, options.optimize, options.deploy_tables, options.recover_tables, options.remove_backup_tables]): options.help = True if options.help: parser.print_help() sys.exit(1) if options.quiet: logger = imposm.util.QuietProgressLog logger_parser = imposm.util.QuietParserProgress else: logger = imposm.util.ProgressLog logger_parser = imposm.util.ParserProgress if options.proj: if ':' not in options.proj: print 'ERROR: --proj should be in EPSG:00000 format' sys.exit(1) # check proj if meter_to_mapunit needs to do anything if options.proj.lower() == 'epsg:4326': imposm.mapping.import_srs_is_geographic = True mapping_file = os.path.join(os.path.dirname(__file__), 'defaultmapping.py') if options.mapping_file: print 'loading %s as mapping' % options.mapping_file mapping_file = options.mapping_file polygon = None if options.limit_to: logger.message('## reading --limit-to %s' % options.limit_to) polygon_timer = imposm.util.Timer('reading', logger) polygon = load_geom(options.limit_to) polygon_timer.stop() if polygon is None: print 'ERROR: No valid polygon/multipolygon found' sys.exit(1) mappings = {} execfile(mapping_file, mappings) tag_mapping = TagMapper([m for n, m in mappings.iteritems() if isinstance(m, imposm.mapping.Mapping)], limit_to=polygon) if 'IMPOSM_MULTIPOLYGON_REPORT' in os.environ: imposm.config.imposm_multipolygon_report = float(os.environ['IMPOSM_MULTIPOLYGON_REPORT']) if 'IMPOSM_MULTIPOLYGON_MAX_RING' in os.environ: imposm.config.imposm_multipolygon_max_ring = int(os.environ['IMPOSM_MULTIPOLYGON_MAX_RING']) if options.table_prefix: options.table_prefix = options.table_prefix.rstrip('_') + '_' if options.table_prefix_production: options.table_prefix_production = options.table_prefix_production.rstrip('_') + '_' if options.table_prefix_backup: options.table_prefix_backup = options.table_prefix_backup.rstrip('_') + '_' if (options.write or options.optimize or options.deploy_tables or options.remove_backup_tables or options.recover_tables): db_conf = mappings['db_conf'] if options.table_prefix: db_conf.prefix = options.table_prefix else: options.table_prefix = db_conf.prefix.rstrip('_') + '_' if options.connection: from imposm.db.config import db_conf_from_string db_conf = db_conf_from_string(options.connection, db_conf) else: db_conf.host = options.host or db_conf.host db_conf.port = options.port or getattr(db_conf, 'port', None) #backw. compat if not options.db: parser.error('-d/--database is required for this mode') db_conf.db = options.db or db_conf.db db_conf.user = options.user or db_conf.user if options.user: from getpass import getpass db_conf.password = getpass('password for %(user)s at %(host)s:' % db_conf) if options.proj: db_conf.proj = options.proj imposm_timer = imposm.util.Timer('imposm', logger) if options.read: if not options.merge_cache: cache_files = glob.glob(os.path.join(options.cache_dir, 'imposm_*.cache')) if cache_files: if not options.overwrite_cache: print ( "ERROR: found existing cache files in '%s'. " 'remove files or use --overwrite-cache or --merge-cache.' % os.path.abspath(options.cache_dir) ) sys.exit(2) for cache_file in cache_files: os.unlink(cache_file) cache = OSMCache(options.cache_dir) if options.read: read_timer = imposm.util.Timer('reading', logger) if not args: print "no file(s) supplied" sys.exit(2) reader = ImposmReader(tag_mapping, cache=cache, merge=options.merge_cache, pool_size=options.concurrency, logger=logger_parser) reader.estimated_coords = imposm.util.estimate_records(args) for arg in args: logger.message('## reading %s' % arg) reader.read(arg) read_timer.stop() if options.write: db = DB(db_conf) write_timer = imposm.util.Timer('writing', logger) logger.message('## dropping/creating tables') if not options.dry_run: db.create_tables(tag_mapping.mappings) logger.message('## writing data') # create views so we can access the table during the insert, ignore # errors for missing tables (i.e. generalized tables) if not options.dry_run: db.create_views(mappings, ignore_errors=True) db.commit() writer = ImposmWriter(tag_mapping, db, cache=cache, pool_size=options.concurrency, logger=logger, dry_run=options.dry_run) writer.relations() writer.ways() writer.nodes() if not options.dry_run: db = DB(db_conf) logger.message('## creating generalized tables') generalized_timer = imposm.util.Timer('generalizing tables', logger) db.create_generalized_tables(mappings) generalized_timer.stop() logger.message('## creating union views') view_timer = imposm.util.Timer('creating views', logger) db.create_views(mappings) view_timer.stop() logger.message('## creating geometry indexes') index_timer = imposm.util.Timer('creating indexes', logger) db.post_insert(mappings); index_timer.stop() db.commit() write_timer.stop() if options.optimize: db = DB(db_conf) optimize_timer = imposm.util.Timer('optimizing', logger) logger.message('## optimizing tables') db.optimize(mappings) optimize_timer.stop() if options.recover_tables: assert not options.deploy_tables, ('cannot swap and recover production ' 'tables at the same time') options.table_prefix, options.table_prefix_backup = \ options.table_prefix_backup, options.table_prefix if options.deploy_tables or options.recover_tables: db = DB(db_conf) db.swap_tables(options.table_prefix, options.table_prefix_production, options.table_prefix_backup) db.remove_views(options.table_prefix) db.db_conf.prefix = options.table_prefix_production db.create_views(mappings) db.commit() if options.remove_backup_tables: db = DB(db_conf) db.remove_tables(options.table_prefix_backup) db.commit() imposm_timer.stop() if __name__ == '__main__': main() imposm-2.5.0/imposm/base.py0000644000076500000240000000627711766043214015553 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import with_statement import itertools from imposm.merge import multimerge __all__ = [ 'Node', 'Way', 'Relation', ] class Node(object): def __init__(self, osm_id, tags, coord): self.osm_id = osm_id self.tags = tags self.coord = coord def __repr__(self): return 'Node(%r, %r, %r)' % (self.osm_id, self.tags, self.coord) def merge(self, tags, coord): pass def to_tuple(self): return self.osm_id, self.tags, self.coord class Way(object): def __init__(self, osm_id, tags, refs, inserted=False): self.osm_id = osm_id self.tags = tags self.refs = refs self.partial_refs = None if refs and isinstance(refs[0], list): self.refs = refs[0] self.partial_refs = refs self.inserted = inserted def __repr__(self): return 'Way(%r, %r, %r, inserted=%r)' % (self.osm_id, self.tags, self.refs, self.inserted) def merge(self, tags, refs): self.tags.update(tags) if self.refs != refs: if self.partial_refs: merge_refs = [] merge_refs.extend(self.partial_refs) else: merge_refs = [self.refs] merge_refs.append(refs) result = multimerge(merge_refs) if result is None: self.partial_refs = merge_refs else: self.refs = result self.partial_refs = None def to_tuple(self): return self.osm_id, self.tags, self.refs class Relation(object): def __init__(self, osm_id, tags, members): self.osm_id = osm_id self.tags = tags self.members = members def merge(self, tags, members): self.tags.update(tags) if self.members != members: self.members = merge_relation_members(self.members, members) def to_tuple(self): return self.osm_id, self.tags, self.members def merge_relation_members(a, b): """ concatenate two lists of members, removing duplicates, retaining order """ combined = [] added_ids = set() for m in itertools.chain(a, b): if m[0] not in added_ids: combined.append(m) added_ids.add(m[0]) return combined class OSMElem(object): __slots__ = 'osm_id name coords cls type tags geom'.split() def __init__(self, osm_id, coords, type, tags): self.osm_id = osm_id self.name = tags.get('name') self.coords = coords self.cls = type[0] self.type = type[1] self.tags = tags self.geom = Noneimposm-2.5.0/imposm/cache/0000755000076500000240000000000012060141076015307 5ustar oltstaff00000000000000imposm-2.5.0/imposm/cache/__init__.py0000644000076500000240000000006211766043214017425 0ustar oltstaff00000000000000from . osm import OSMCache __all__ = ['OSMCache']imposm-2.5.0/imposm/cache/internal.cc0000644000076500000240000004446111766043214017452 0ustar oltstaff00000000000000#include #include #include "structmember.h" #include "internal.pb.h" static PyObject * fastpb_convert5(::google::protobuf::int32 value) { return PyLong_FromLong(value); } static PyObject * fastpb_convert3(::google::protobuf::int64 value) { return PyLong_FromLongLong(value); } static PyObject * fastpb_convert18(::google::protobuf::int64 value) { return PyLong_FromLongLong(value); } static PyObject * fastpb_convert17(::google::protobuf::int32 value) { return PyLong_FromLong(value); } static PyObject * fastpb_convert13(::google::protobuf::uint32 value) { return PyLong_FromUnsignedLong(value); } static PyObject * fastpb_convert4(::google::protobuf::uint64 value) { return PyLong_FromUnsignedLong(value); } static PyObject * fastpb_convert1(double value) { return PyFloat_FromDouble(value); } static PyObject * fastpb_convert2(float value) { return PyFloat_FromDouble(value); } static PyObject * fastpb_convert9(const ::std::string &value) { return PyUnicode_Decode(value.data(), value.length(), "utf-8", NULL); } static PyObject * fastpb_convert12(const ::std::string &value) { return PyString_FromStringAndSize(value.data(), value.length()); } static PyObject * fastpb_convert8(bool value) { return PyBool_FromLong(value ? 1 : 0); } static PyObject * fastpb_convert14(int value) { // TODO(robbyw): Check EnumName_IsValid(value) return PyLong_FromLong(value); } typedef struct { PyObject_HEAD imposm::cache::internal::DeltaCoords *protobuf; } DeltaCoords; static void DeltaCoords_dealloc(DeltaCoords* self) { self->ob_type->tp_free((PyObject*)self); delete self->protobuf; } static PyObject * DeltaCoords_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { DeltaCoords *self; self = (DeltaCoords *)type->tp_alloc(type, 0); self->protobuf = new imposm::cache::internal::DeltaCoords(); return (PyObject *)self; } static PyObject * DeltaCoords_SerializeToString(DeltaCoords* self) { std::string result; self->protobuf->SerializeToString(&result); return PyString_FromStringAndSize(result.data(), result.length()); } static PyObject * DeltaCoords_ParseFromString(DeltaCoords* self, PyObject *value) { std::string serialized(PyString_AsString(value), PyString_Size(value)); self->protobuf->ParseFromString(serialized); Py_RETURN_NONE; } static PyObject * DeltaCoords_getids(DeltaCoords *self, void *closure) { int len = self->protobuf->ids_size(); PyObject *tuple = PyTuple_New(len); for (int i = 0; i < len; ++i) { PyObject *value = fastpb_convert18( self->protobuf->ids(i)); PyTuple_SetItem(tuple, i, value); } return tuple; } static int DeltaCoords_setids(DeltaCoords *self, PyObject *input, void *closure) { if (input == NULL || input == Py_None) { self->protobuf->clear_ids(); return 0; } if (PyString_Check(input)) { PyErr_SetString(PyExc_TypeError, "The ids attribute value must be a sequence"); return -1; } PyObject *sequence = PySequence_Fast(input, "The ids attribute value must be a sequence"); self->protobuf->clear_ids(); for (Py_ssize_t i = 0, len = PySequence_Length(sequence); i < len; ++i) { PyObject *value = PySequence_Fast_GET_ITEM(sequence, i); ::google::protobuf::int64 protoValue; // int64 if (PyInt_Check(value)) { protoValue = PyInt_AsLong(value); } else if (PyLong_Check(value)) { protoValue = PyLong_AsLongLong(value); } else { PyErr_SetString(PyExc_TypeError, "The ids attribute value must be an integer"); return -1; } self->protobuf->add_ids(protoValue); } Py_XDECREF(sequence); return 0; } static PyObject * DeltaCoords_getlats(DeltaCoords *self, void *closure) { int len = self->protobuf->lats_size(); PyObject *tuple = PyTuple_New(len); for (int i = 0; i < len; ++i) { PyObject *value = fastpb_convert18( self->protobuf->lats(i)); PyTuple_SetItem(tuple, i, value); } return tuple; } static int DeltaCoords_setlats(DeltaCoords *self, PyObject *input, void *closure) { if (input == NULL || input == Py_None) { self->protobuf->clear_lats(); return 0; } if (PyString_Check(input)) { PyErr_SetString(PyExc_TypeError, "The lats attribute value must be a sequence"); return -1; } PyObject *sequence = PySequence_Fast(input, "The lats attribute value must be a sequence"); self->protobuf->clear_lats(); for (Py_ssize_t i = 0, len = PySequence_Length(sequence); i < len; ++i) { PyObject *value = PySequence_Fast_GET_ITEM(sequence, i); ::google::protobuf::int64 protoValue; // int64 if (PyInt_Check(value)) { protoValue = PyInt_AsLong(value); } else if (PyLong_Check(value)) { protoValue = PyLong_AsLongLong(value); } else { PyErr_SetString(PyExc_TypeError, "The lats attribute value must be an integer"); return -1; } self->protobuf->add_lats(protoValue); } Py_XDECREF(sequence); return 0; } static PyObject * DeltaCoords_getlons(DeltaCoords *self, void *closure) { int len = self->protobuf->lons_size(); PyObject *tuple = PyTuple_New(len); for (int i = 0; i < len; ++i) { PyObject *value = fastpb_convert18( self->protobuf->lons(i)); PyTuple_SetItem(tuple, i, value); } return tuple; } static int DeltaCoords_setlons(DeltaCoords *self, PyObject *input, void *closure) { if (input == NULL || input == Py_None) { self->protobuf->clear_lons(); return 0; } if (PyString_Check(input)) { PyErr_SetString(PyExc_TypeError, "The lons attribute value must be a sequence"); return -1; } PyObject *sequence = PySequence_Fast(input, "The lons attribute value must be a sequence"); self->protobuf->clear_lons(); for (Py_ssize_t i = 0, len = PySequence_Length(sequence); i < len; ++i) { PyObject *value = PySequence_Fast_GET_ITEM(sequence, i); ::google::protobuf::int64 protoValue; // int64 if (PyInt_Check(value)) { protoValue = PyInt_AsLong(value); } else if (PyLong_Check(value)) { protoValue = PyLong_AsLongLong(value); } else { PyErr_SetString(PyExc_TypeError, "The lons attribute value must be an integer"); return -1; } self->protobuf->add_lons(protoValue); } Py_XDECREF(sequence); return 0; } static int DeltaCoords_init(DeltaCoords *self, PyObject *args, PyObject *kwds) { PyObject *ids = NULL; PyObject *lats = NULL; PyObject *lons = NULL; static char *kwlist[] = { (char *) "ids", (char *) "lats", (char *) "lons", NULL }; if (! PyArg_ParseTupleAndKeywords( args, kwds, "|OOO", kwlist, &ids,&lats,&lons)) return -1; if (ids) { if (DeltaCoords_setids(self, ids, NULL) < 0) { return -1; } } if (lats) { if (DeltaCoords_setlats(self, lats, NULL) < 0) { return -1; } } if (lons) { if (DeltaCoords_setlons(self, lons, NULL) < 0) { return -1; } } return 0; } static PyMemberDef DeltaCoords_members[] = { {NULL} // Sentinel }; static PyGetSetDef DeltaCoords_getsetters[] = { {(char *)"ids", (getter)DeltaCoords_getids, (setter)DeltaCoords_setids, (char *)"", NULL}, {(char *)"lats", (getter)DeltaCoords_getlats, (setter)DeltaCoords_setlats, (char *)"", NULL}, {(char *)"lons", (getter)DeltaCoords_getlons, (setter)DeltaCoords_setlons, (char *)"", NULL}, {NULL} // Sentinel }; static PyMethodDef DeltaCoords_methods[] = { {"SerializeToString", (PyCFunction)DeltaCoords_SerializeToString, METH_NOARGS, "Serializes the protocol buffer to a string." }, {"ParseFromString", (PyCFunction)DeltaCoords_ParseFromString, METH_O, "Parses the protocol buffer from a string." }, {NULL} // Sentinel }; static PyTypeObject DeltaCoordsType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "imposm.cache.internal.DeltaCoords", /*tp_name*/ sizeof(DeltaCoords), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)DeltaCoords_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ "DeltaCoords objects", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ DeltaCoords_methods, /* tp_methods */ DeltaCoords_members, /* tp_members */ DeltaCoords_getsetters, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)DeltaCoords_init, /* tp_init */ 0, /* tp_alloc */ DeltaCoords_new, /* tp_new */ }; typedef struct { PyObject_HEAD imposm::cache::internal::DeltaList *protobuf; } DeltaList; static void DeltaList_dealloc(DeltaList* self) { self->ob_type->tp_free((PyObject*)self); delete self->protobuf; } static PyObject * DeltaList_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { DeltaList *self; self = (DeltaList *)type->tp_alloc(type, 0); self->protobuf = new imposm::cache::internal::DeltaList(); return (PyObject *)self; } static PyObject * DeltaList_SerializeToString(DeltaList* self) { std::string result; self->protobuf->SerializeToString(&result); return PyString_FromStringAndSize(result.data(), result.length()); } static PyObject * DeltaList_ParseFromString(DeltaList* self, PyObject *value) { std::string serialized(PyString_AsString(value), PyString_Size(value)); self->protobuf->ParseFromString(serialized); Py_RETURN_NONE; } static PyObject * DeltaList_getids(DeltaList *self, void *closure) { int len = self->protobuf->ids_size(); PyObject *tuple = PyTuple_New(len); for (int i = 0; i < len; ++i) { PyObject *value = fastpb_convert18( self->protobuf->ids(i)); PyTuple_SetItem(tuple, i, value); } return tuple; } static int DeltaList_setids(DeltaList *self, PyObject *input, void *closure) { if (input == NULL || input == Py_None) { self->protobuf->clear_ids(); return 0; } if (PyString_Check(input)) { PyErr_SetString(PyExc_TypeError, "The ids attribute value must be a sequence"); return -1; } PyObject *sequence = PySequence_Fast(input, "The ids attribute value must be a sequence"); self->protobuf->clear_ids(); for (Py_ssize_t i = 0, len = PySequence_Length(sequence); i < len; ++i) { PyObject *value = PySequence_Fast_GET_ITEM(sequence, i); ::google::protobuf::int64 protoValue; // int64 if (PyInt_Check(value)) { protoValue = PyInt_AsLong(value); } else if (PyLong_Check(value)) { protoValue = PyLong_AsLongLong(value); } else { PyErr_SetString(PyExc_TypeError, "The ids attribute value must be an integer"); return -1; } self->protobuf->add_ids(protoValue); } Py_XDECREF(sequence); return 0; } static int DeltaList_init(DeltaList *self, PyObject *args, PyObject *kwds) { PyObject *ids = NULL; static char *kwlist[] = { (char *) "ids", NULL }; if (! PyArg_ParseTupleAndKeywords( args, kwds, "|O", kwlist, &ids)) return -1; if (ids) { if (DeltaList_setids(self, ids, NULL) < 0) { return -1; } } return 0; } static PyMemberDef DeltaList_members[] = { {NULL} // Sentinel }; static PyGetSetDef DeltaList_getsetters[] = { {(char *)"ids", (getter)DeltaList_getids, (setter)DeltaList_setids, (char *)"", NULL}, {NULL} // Sentinel }; static PyMethodDef DeltaList_methods[] = { {"SerializeToString", (PyCFunction)DeltaList_SerializeToString, METH_NOARGS, "Serializes the protocol buffer to a string." }, {"ParseFromString", (PyCFunction)DeltaList_ParseFromString, METH_O, "Parses the protocol buffer from a string." }, {NULL} // Sentinel }; static PyTypeObject DeltaListType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "imposm.cache.internal.DeltaList", /*tp_name*/ sizeof(DeltaList), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)DeltaList_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ "DeltaList objects", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ DeltaList_methods, /* tp_methods */ DeltaList_members, /* tp_members */ DeltaList_getsetters, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)DeltaList_init, /* tp_init */ 0, /* tp_alloc */ DeltaList_new, /* tp_new */ }; static PyMethodDef module_methods[] = { {NULL} // Sentinel }; #ifndef PyMODINIT_FUNC // Declarations for DLL import/export. #define PyMODINIT_FUNC void #endif PyMODINIT_FUNC initinternal(void) { GOOGLE_PROTOBUF_VERIFY_VERSION; PyObject* m; if (PyType_Ready(&DeltaCoordsType) < 0) return; if (PyType_Ready(&DeltaListType) < 0) return; m = Py_InitModule3("internal", module_methods, ""); if (m == NULL) return; Py_INCREF(&DeltaCoordsType); PyModule_AddObject(m, "DeltaCoords", (PyObject *)&DeltaCoordsType); Py_INCREF(&DeltaListType); PyModule_AddObject(m, "DeltaList", (PyObject *)&DeltaListType); }imposm-2.5.0/imposm/cache/osm.py0000644000076500000240000000544211766043214016473 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import imposm.config from . tc import DeltaCoordsDB, CoordDB, NodeDB, WayDB, InsertedWayDB, RelationDB class OSMCache(object): def __init__(self, path, prefix='imposm_', suffix='.cache'): self.path = path self.prefix = prefix self.suffix = suffix self.coords_fname = os.path.join(path, prefix + 'coords' + suffix) self.nodes_fname = os.path.join(path, prefix + 'nodes' + suffix) self.ways_fname = os.path.join(path, prefix + 'ways' + suffix) self.inserted_ways_fname = os.path.join(path, prefix + 'inserted_ways' + suffix) self.relations_fname = os.path.join(path, prefix + 'relations' + suffix) self.caches = {} def close_all(self): for mode_, cache in self.caches.values(): cache.close() self.caches = {} def coords_cache(self, mode='r', estimated_records=None): if imposm.config.imposm_compact_coords_cache: coords_db = DeltaCoordsDB else: coords_db = CoordDB return self._x_cache(self.coords_fname, coords_db, mode, estimated_records) def nodes_cache(self, mode='r', estimated_records=None): return self._x_cache(self.nodes_fname, NodeDB, mode, estimated_records) def ways_cache(self, mode='r', estimated_records=None): return self._x_cache(self.ways_fname, WayDB, mode, estimated_records) def inserted_ways_cache(self, mode='r', estimated_records=None): return self._x_cache(self.inserted_ways_fname, InsertedWayDB, mode, estimated_records) def remove_inserted_way_cache(self): if os.path.exists(self.inserted_ways_fname): os.unlink(self.inserted_ways_fname) def relations_cache(self, mode='r', estimated_records=None): return self._x_cache(self.relations_fname, RelationDB, mode, estimated_records) def _x_cache(self, x, x_class, mode, estimated_records=None): if x in self.caches: current_mode, cache = self.caches[x] if current_mode == mode: return cache else: cache.close() cache = x_class(x, mode, estimated_records=estimated_records) self.caches[x] = mode, cache return cache imposm-2.5.0/imposm/cache/tc.c0000644000076500000240000144346511766044737016124 0ustar oltstaff00000000000000/* Generated by Cython 0.14.1 on Mon May 23 09:29:44 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #if PY_VERSION_HEX < 0x02040000 #define METH_COEXIST 0 #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) #define PyDict_Contains(d,o) PySequence_Contains(d,o) #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) PyInt_AsLong(o) #define PyNumber_Index(o) PyNumber_Int(o) #define PyIndex_Check(o) PyNumber_Check(o) #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE_API__imposm__cache__tc #include "stdint.h" #include "marshal.h" #include "tcutil.h" #include "tcbdb.h" #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif /* inline attribute */ #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif /* unused attribute */ #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || defined(__INTEL_COMPILER) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ /* Type Conversion Predeclarations */ #define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) #define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; static const char *__pyx_f[] = { "tc.pyx", }; /* Type declarations */ /* "imposm/cache/tc.pyx":75 * return ((x / COORD_FACTOR) - 180.0) * * ctypedef struct coord: # <<<<<<<<<<<<<< * uint32_t x * uint32_t y */ typedef struct { uint32_t x; uint32_t y; } __pyx_t_6imposm_5cache_2tc_coord; /* "imposm/cache/tc.pyx":90 * } * * cdef class BDB: # <<<<<<<<<<<<<< * cdef TCBDB *db * cdef object filename */ struct __pyx_obj_6imposm_5cache_2tc_BDB { PyObject_HEAD struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB *__pyx_vtab; TCBDB *db; PyObject *filename; int _opened; BDBCUR *_cur; }; /* "imposm/cache/tc.pyx":270 * return Node(osmid, data[0], data[1]) * * cdef class InsertedWayDB(BDB): # <<<<<<<<<<<<<< * def put(self, int64_t osmid): * return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); */ struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB { struct __pyx_obj_6imposm_5cache_2tc_BDB __pyx_base; }; /* "imposm/cache/tc.pyx":217 * tcbdbdel(self.db) * * cdef class CoordDB(BDB): # <<<<<<<<<<<<<< * def put(self, osmid, x, y): * return self._put(osmid, x, y) */ struct __pyx_obj_6imposm_5cache_2tc_CoordDB { struct __pyx_obj_6imposm_5cache_2tc_BDB __pyx_base; }; /* "imposm/cache/tc.pyx":294 * return osmid * * cdef class RefTagDB(BDB): # <<<<<<<<<<<<<< * """ * Database for items with references and tags (i.e. ways/relations). */ struct __pyx_obj_6imposm_5cache_2tc_RefTagDB { struct __pyx_obj_6imposm_5cache_2tc_BDB __pyx_base; }; /* "imposm/cache/tc.pyx":304 * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * * cdef class WayDB(RefTagDB): # <<<<<<<<<<<<<< * cdef object _obj(self, int64_t osmid, data): * return Way(osmid, data[0], data[1]) */ struct __pyx_obj_6imposm_5cache_2tc_WayDB { struct __pyx_obj_6imposm_5cache_2tc_RefTagDB __pyx_base; }; /* "imposm/cache/tc.pyx":308 * return Way(osmid, data[0], data[1]) * * cdef class RelationDB(RefTagDB): # <<<<<<<<<<<<<< * cdef object _obj(self, int64_t osmid, data): * return Relation(osmid, data[0], data[1]) */ struct __pyx_obj_6imposm_5cache_2tc_RelationDB { struct __pyx_obj_6imposm_5cache_2tc_RefTagDB __pyx_base; }; /* "imposm/cache/tc.pyx":260 * return osmid, data * * cdef class NodeDB(BDB): # <<<<<<<<<<<<<< * def put(self, osmid, tags, pos): * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) */ struct __pyx_obj_6imposm_5cache_2tc_NodeDB { struct __pyx_obj_6imposm_5cache_2tc_BDB __pyx_base; }; /* "imposm/cache/tc.pyx":90 * } * * cdef class BDB: # <<<<<<<<<<<<<< * cdef TCBDB *db * cdef object filename */ struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB { PyObject *(*_obj)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *); PyObject *(*_get_cur)(struct __pyx_obj_6imposm_5cache_2tc_BDB *); }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB *__pyx_vtabptr_6imposm_5cache_2tc_BDB; /* "imposm/cache/tc.pyx":217 * tcbdbdel(self.db) * * cdef class CoordDB(BDB): # <<<<<<<<<<<<<< * def put(self, osmid, x, y): * return self._put(osmid, x, y) */ struct __pyx_vtabstruct_6imposm_5cache_2tc_CoordDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB __pyx_base; int (*_put)(struct __pyx_obj_6imposm_5cache_2tc_CoordDB *, int64_t, double, double); }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_CoordDB *__pyx_vtabptr_6imposm_5cache_2tc_CoordDB; /* "imposm/cache/tc.pyx":260 * return osmid, data * * cdef class NodeDB(BDB): # <<<<<<<<<<<<<< * def put(self, osmid, tags, pos): * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) */ struct __pyx_vtabstruct_6imposm_5cache_2tc_NodeDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB __pyx_base; }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_NodeDB *__pyx_vtabptr_6imposm_5cache_2tc_NodeDB; /* "imposm/cache/tc.pyx":294 * return osmid * * cdef class RefTagDB(BDB): # <<<<<<<<<<<<<< * """ * Database for items with references and tags (i.e. ways/relations). */ struct __pyx_vtabstruct_6imposm_5cache_2tc_RefTagDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB __pyx_base; }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_RefTagDB *__pyx_vtabptr_6imposm_5cache_2tc_RefTagDB; /* "imposm/cache/tc.pyx":308 * return Way(osmid, data[0], data[1]) * * cdef class RelationDB(RefTagDB): # <<<<<<<<<<<<<< * cdef object _obj(self, int64_t osmid, data): * return Relation(osmid, data[0], data[1]) */ struct __pyx_vtabstruct_6imposm_5cache_2tc_RelationDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_RefTagDB __pyx_base; }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_RelationDB *__pyx_vtabptr_6imposm_5cache_2tc_RelationDB; /* "imposm/cache/tc.pyx":270 * return Node(osmid, data[0], data[1]) * * cdef class InsertedWayDB(BDB): # <<<<<<<<<<<<<< * def put(self, int64_t osmid): * return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); */ struct __pyx_vtabstruct_6imposm_5cache_2tc_InsertedWayDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB __pyx_base; }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_InsertedWayDB *__pyx_vtabptr_6imposm_5cache_2tc_InsertedWayDB; /* "imposm/cache/tc.pyx":304 * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * * cdef class WayDB(RefTagDB): # <<<<<<<<<<<<<< * cdef object _obj(self, int64_t osmid, data): * return Way(osmid, data[0], data[1]) */ struct __pyx_vtabstruct_6imposm_5cache_2tc_WayDB { struct __pyx_vtabstruct_6imposm_5cache_2tc_RefTagDB __pyx_base; }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_WayDB *__pyx_vtabptr_6imposm_5cache_2tc_WayDB; #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct * __Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #define __Pyx_RefNannySetupContext(name) void *__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0) #else #define __Pyx_RefNannySetupContext(name) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0) static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/ static int __Pyx_EndUnpack(PyObject *, Py_ssize_t expected); /*proto*/ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; if (!j) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; } #define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_List_Fast(o, i) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) { if (likely(o != Py_None)) { if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { PyObject *r = PyList_GET_ITEM(o, i); Py_INCREF(r); return r; } else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) { PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i); Py_INCREF(r); return r; } } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Tuple_Fast(o, i) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) { if (likely(o != Py_None)) { if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, i); Py_INCREF(r); return r; } else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) { PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i); Py_INCREF(r); return r; } } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } #define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Fast(o, i) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) { PyObject *r; if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) { r = PyList_GET_ITEM(o, i); Py_INCREF(r); } else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { r = PyTuple_GET_ITEM(o, i); Py_INCREF(r); } else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) { r = PySequence_GetItem(o, i); } else { r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } return r; } static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) { if (likely(PyList_CheckExact(L))) { if (PyList_Append(L, x) < 0) return NULL; Py_INCREF(Py_None); return Py_None; /* this is just to have an accurate signature */ } else { PyObject *r, *m; m = __Pyx_GetAttrString(L, "append"); if (!m) return NULL; r = PyObject_CallFunctionObjArgs(m, x, NULL); Py_DECREF(m); return r; } } static CYTHON_INLINE long __Pyx_NegateNonNeg(long b) { return unlikely(b < 0) ? b : !b; } static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) { return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b); } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/ static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *modname); /*proto*/ #define __pyx_binding_PyCFunctionType_USED 1 typedef struct { PyCFunctionObject func; } __pyx_binding_PyCFunctionType_object; static PyTypeObject __pyx_binding_PyCFunctionType_type; static PyTypeObject *__pyx_binding_PyCFunctionType = NULL; static PyObject *__pyx_binding_PyCFunctionType_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module); /* proto */ #define __pyx_binding_PyCFunctionType_New(ml, self) __pyx_binding_PyCFunctionType_NewEx(ml, self, NULL) static int __pyx_binding_PyCFunctionType_init(void); /* proto */ static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t); static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject *); static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint32_t(uint32_t); static CYTHON_INLINE uint32_t __Pyx_PyInt_from_py_uint32_t(PyObject *); static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ static void __Pyx_AddTraceback(const char *funcname); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from libc.stdint */ /* Module declarations from imposm.cache.tc */ static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_BDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_CoordDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_NodeDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_InsertedWayDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_RefTagDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_WayDB = 0; static PyTypeObject *__pyx_ptype_6imposm_5cache_2tc_RelationDB = 0; static uint32_t __pyx_f_6imposm_5cache_2tc__coord_to_uint32(double); /*proto*/ static double __pyx_f_6imposm_5cache_2tc__uint32_to_coord(uint32_t); /*proto*/ static CYTHON_INLINE __pyx_t_6imposm_5cache_2tc_coord __pyx_f_6imposm_5cache_2tc_coord_struct(double, double); /*proto*/ static PyObject *__pyx_f_6imposm_5cache_2tc_unzip_nodes(PyObject *); /*proto*/ static PyObject *__pyx_f_6imposm_5cache_2tc_zip_nodes(PyObject *, PyObject *, PyObject *); /*proto*/ #define __Pyx_MODULE_NAME "imposm.cache.tc" static int __pyx_module_is_main_imposm__cache__tc = 0; /* Implementation of imposm.cache.tc */ static PyObject *__pyx_builtin_object; static PyObject *__pyx_builtin_IOError; static PyObject *__pyx_builtin_StopIteration; static PyObject *__pyx_builtin_range; static char __pyx_k_1[] = "delta_nodes_cache_size"; static char __pyx_k_2[] = "imposm.base"; static char __pyx_k_3[] = "imposm.cache.internal"; static char __pyx_k_4[] = "imposm.cache.tc"; static char __pyx_k__r[] = "r"; static char __pyx_k__w[] = "w"; static char __pyx_k__x[] = "x"; static char __pyx_k__y[] = "y"; static char __pyx_k__db[] = "db"; static char __pyx_k__Way[] = "Way"; static char __pyx_k__add[] = "add"; static char __pyx_k__get[] = "get"; static char __pyx_k__ids[] = "ids"; static char __pyx_k__lat[] = "lat"; static char __pyx_k__lon[] = "lon"; static char __pyx_k__pop[] = "pop"; static char __pyx_k__pos[] = "pos"; static char __pyx_k__put[] = "put"; static char __pyx_k__Node[] = "Node"; static char __pyx_k___cur[] = "_cur"; static char __pyx_k___get[] = "_get"; static char __pyx_k___obj[] = "_obj"; static char __pyx_k___put[] = "_put"; static char __pyx_k__data[] = "data"; static char __pyx_k__lats[] = "lats"; static char __pyx_k__lons[] = "lons"; static char __pyx_k__mode[] = "mode"; static char __pyx_k__refs[] = "refs"; static char __pyx_k__self[] = "self"; static char __pyx_k__tags[] = "tags"; static char __pyx_k__close[] = "close"; static char __pyx_k__deque[] = "deque"; static char __pyx_k__nodes[] = "nodes"; static char __pyx_k__osmid[] = "osmid"; static char __pyx_k__range[] = "range"; static char __pyx_k___modes[] = "_modes"; static char __pyx_k__append[] = "append"; static char __pyx_k__bisect[] = "bisect"; static char __pyx_k__insort[] = "insort"; static char __pyx_k__object[] = "object"; static char __pyx_k__osmids[] = "osmids"; static char __pyx_k__IOError[] = "IOError"; static char __pyx_k___opened[] = "_opened"; static char __pyx_k__changed[] = "changed"; static char __pyx_k__get_raw[] = "get_raw"; static char __pyx_k__popleft[] = "popleft"; static char __pyx_k__Relation[] = "Relation"; static char __pyx_k____init__[] = "__init__"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k___get_cur[] = "_get_cur"; static char __pyx_k___tune_db[] = "_tune_db"; static char __pyx_k__delta_id[] = "delta_id"; static char __pyx_k__filename[] = "filename"; static char __pyx_k__iteritems[] = "iteritems"; static char __pyx_k__serialize[] = "serialize"; static char __pyx_k__DeltaNodes[] = "DeltaNodes"; static char __pyx_k__delta_node[] = "delta_node"; static char __pyx_k__get_coords[] = "get_coords"; static char __pyx_k__DeltaCoords[] = "DeltaCoords"; static char __pyx_k__collections[] = "collections"; static char __pyx_k__delta_nodes[] = "delta_nodes"; static char __pyx_k__deserialize[] = "deserialize"; static char __pyx_k___DeltaCoords[] = "_DeltaCoords"; static char __pyx_k__DeltaCoordsDB[] = "DeltaCoordsDB"; static char __pyx_k__StopIteration[] = "StopIteration"; static char __pyx_k__put_marshaled[] = "put_marshaled"; static char __pyx_k__delta_node_ids[] = "delta_node_ids"; static char __pyx_k__ParseFromString[] = "ParseFromString"; static char __pyx_k__delta_nodes_size[] = "delta_nodes_size"; static char __pyx_k__fetch_delta_node[] = "fetch_delta_node"; static char __pyx_k__SerializeToString[] = "SerializeToString"; static char __pyx_k__estimated_records[] = "estimated_records"; static PyObject *__pyx_n_s_1; static PyObject *__pyx_n_s_2; static PyObject *__pyx_n_s_3; static PyObject *__pyx_n_s_4; static PyObject *__pyx_n_s__DeltaCoords; static PyObject *__pyx_n_s__DeltaCoordsDB; static PyObject *__pyx_n_s__DeltaNodes; static PyObject *__pyx_n_s__IOError; static PyObject *__pyx_n_s__Node; static PyObject *__pyx_n_s__ParseFromString; static PyObject *__pyx_n_s__Relation; static PyObject *__pyx_n_s__SerializeToString; static PyObject *__pyx_n_s__StopIteration; static PyObject *__pyx_n_s__Way; static PyObject *__pyx_n_s___DeltaCoords; static PyObject *__pyx_n_s____init__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s___cur; static PyObject *__pyx_n_s___get; static PyObject *__pyx_n_s___get_cur; static PyObject *__pyx_n_s___modes; static PyObject *__pyx_n_s___obj; static PyObject *__pyx_n_s___opened; static PyObject *__pyx_n_s___put; static PyObject *__pyx_n_s___tune_db; static PyObject *__pyx_n_s__add; static PyObject *__pyx_n_s__append; static PyObject *__pyx_n_s__bisect; static PyObject *__pyx_n_s__changed; static PyObject *__pyx_n_s__close; static PyObject *__pyx_n_s__collections; static PyObject *__pyx_n_s__data; static PyObject *__pyx_n_s__db; static PyObject *__pyx_n_s__delta_id; static PyObject *__pyx_n_s__delta_node; static PyObject *__pyx_n_s__delta_node_ids; static PyObject *__pyx_n_s__delta_nodes; static PyObject *__pyx_n_s__delta_nodes_size; static PyObject *__pyx_n_s__deque; static PyObject *__pyx_n_s__deserialize; static PyObject *__pyx_n_s__estimated_records; static PyObject *__pyx_n_s__fetch_delta_node; static PyObject *__pyx_n_s__filename; static PyObject *__pyx_n_s__get; static PyObject *__pyx_n_s__get_coords; static PyObject *__pyx_n_s__get_raw; static PyObject *__pyx_n_s__ids; static PyObject *__pyx_n_s__insort; static PyObject *__pyx_n_s__iteritems; static PyObject *__pyx_n_s__lat; static PyObject *__pyx_n_s__lats; static PyObject *__pyx_n_s__lon; static PyObject *__pyx_n_s__lons; static PyObject *__pyx_n_s__mode; static PyObject *__pyx_n_s__nodes; static PyObject *__pyx_n_s__object; static PyObject *__pyx_n_s__osmid; static PyObject *__pyx_n_s__osmids; static PyObject *__pyx_n_s__pop; static PyObject *__pyx_n_s__popleft; static PyObject *__pyx_n_s__pos; static PyObject *__pyx_n_s__put; static PyObject *__pyx_n_s__put_marshaled; static PyObject *__pyx_n_s__r; static PyObject *__pyx_n_s__range; static PyObject *__pyx_n_s__refs; static PyObject *__pyx_n_s__self; static PyObject *__pyx_n_s__serialize; static PyObject *__pyx_n_s__tags; static PyObject *__pyx_n_s__w; static PyObject *__pyx_n_s__x; static PyObject *__pyx_n_s__y; static PyObject *__pyx_int_0; static PyObject *__pyx_int_3; static PyObject *__pyx_int_6; static PyObject *__pyx_int_100; static PyObject *__pyx_int_128; /* "imposm/cache/tc.pyx":69 * DEF COORD_FACTOR = 11930464.7083 # ((2<<31)-1)/360.0 * * cdef uint32_t _coord_to_uint32(double x) nogil: # <<<<<<<<<<<<<< * return ((x + 180.0) * COORD_FACTOR) * */ static uint32_t __pyx_f_6imposm_5cache_2tc__coord_to_uint32(double __pyx_v_x) { uint32_t __pyx_r; /* "imposm/cache/tc.pyx":70 * * cdef uint32_t _coord_to_uint32(double x) nogil: * return ((x + 180.0) * COORD_FACTOR) # <<<<<<<<<<<<<< * * cdef double _uint32_to_coord(uint32_t x) nogil: */ __pyx_r = ((uint32_t)((__pyx_v_x + 180.0) * 11930464.7083)); goto __pyx_L0; __pyx_r = 0; __pyx_L0:; return __pyx_r; } /* "imposm/cache/tc.pyx":72 * return ((x + 180.0) * COORD_FACTOR) * * cdef double _uint32_to_coord(uint32_t x) nogil: # <<<<<<<<<<<<<< * return ((x / COORD_FACTOR) - 180.0) * */ static double __pyx_f_6imposm_5cache_2tc__uint32_to_coord(uint32_t __pyx_v_x) { double __pyx_r; /* "imposm/cache/tc.pyx":73 * * cdef double _uint32_to_coord(uint32_t x) nogil: * return ((x / COORD_FACTOR) - 180.0) # <<<<<<<<<<<<<< * * ctypedef struct coord: */ __pyx_r = ((__pyx_v_x / 11930464.7083) - 180.0); goto __pyx_L0; __pyx_r = 0; __pyx_L0:; return __pyx_r; } /* "imposm/cache/tc.pyx":79 * uint32_t y * * cdef inline coord coord_struct(double x, double y) nogil: # <<<<<<<<<<<<<< * cdef coord p * p.x = _coord_to_uint32(x) */ static CYTHON_INLINE __pyx_t_6imposm_5cache_2tc_coord __pyx_f_6imposm_5cache_2tc_coord_struct(double __pyx_v_x, double __pyx_v_y) { __pyx_t_6imposm_5cache_2tc_coord __pyx_v_p; __pyx_t_6imposm_5cache_2tc_coord __pyx_r; /* "imposm/cache/tc.pyx":81 * cdef inline coord coord_struct(double x, double y) nogil: * cdef coord p * p.x = _coord_to_uint32(x) # <<<<<<<<<<<<<< * p.y = _coord_to_uint32(y) * return p */ __pyx_v_p.x = __pyx_f_6imposm_5cache_2tc__coord_to_uint32(__pyx_v_x); /* "imposm/cache/tc.pyx":82 * cdef coord p * p.x = _coord_to_uint32(x) * p.y = _coord_to_uint32(y) # <<<<<<<<<<<<<< * return p * */ __pyx_v_p.y = __pyx_f_6imposm_5cache_2tc__coord_to_uint32(__pyx_v_y); /* "imposm/cache/tc.pyx":83 * p.x = _coord_to_uint32(x) * p.y = _coord_to_uint32(y) * return p # <<<<<<<<<<<<<< * * _modes = { */ __pyx_r = __pyx_v_p; goto __pyx_L0; __pyx_L0:; return __pyx_r; } /* "imposm/cache/tc.pyx":95 * cdef int _opened * cdef BDBCUR *_cur * def __cinit__(self, filename, mode='w', estimated_records=0): # <<<<<<<<<<<<<< * self.db = tcbdbnew() * self._opened = 0 */ static int __pyx_pf_6imposm_5cache_2tc_3BDB___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_6imposm_5cache_2tc_3BDB___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_filename = 0; PyObject *__pyx_v_mode = 0; PyObject *__pyx_v_estimated_records = 0; int __pyx_r; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__mode,&__pyx_n_s__estimated_records,0}; __Pyx_RefNannySetupContext("__cinit__"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_n_s__w); values[2] = ((PyObject *)__pyx_int_0); switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__estimated_records); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_filename = values[0]; __pyx_v_mode = values[1]; __pyx_v_estimated_records = values[2]; } else { __pyx_v_mode = ((PyObject *)__pyx_n_s__w); __pyx_v_estimated_records = ((PyObject *)__pyx_int_0); switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: __pyx_v_estimated_records = PyTuple_GET_ITEM(__pyx_args, 2); case 2: __pyx_v_mode = PyTuple_GET_ITEM(__pyx_args, 1); case 1: __pyx_v_filename = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.__cinit__"); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":96 * cdef BDBCUR *_cur * def __cinit__(self, filename, mode='w', estimated_records=0): * self.db = tcbdbnew() # <<<<<<<<<<<<<< * self._opened = 0 * */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db = tcbdbnew(); /* "imposm/cache/tc.pyx":97 * def __cinit__(self, filename, mode='w', estimated_records=0): * self.db = tcbdbnew() * self._opened = 0 # <<<<<<<<<<<<<< * * def __init__(self, filename, mode='w', estimated_records=0): */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_opened = 0; __pyx_r = 0; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":99 * self._opened = 0 * * def __init__(self, filename, mode='w', estimated_records=0): # <<<<<<<<<<<<<< * self.filename = filename * self._tune_db(estimated_records) */ static int __pyx_pf_6imposm_5cache_2tc_3BDB_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_6imposm_5cache_2tc_3BDB_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_filename = 0; PyObject *__pyx_v_mode = 0; PyObject *__pyx_v_estimated_records = 0; int __pyx_r; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; TCBDB *__pyx_t_4; char *__pyx_t_5; int __pyx_t_6; int __pyx_t_7; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filename,&__pyx_n_s__mode,&__pyx_n_s__estimated_records,0}; __Pyx_RefNannySetupContext("__init__"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_n_s__w); values[2] = ((PyObject *)__pyx_int_0); switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__estimated_records); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_filename = values[0]; __pyx_v_mode = values[1]; __pyx_v_estimated_records = values[2]; } else { __pyx_v_mode = ((PyObject *)__pyx_n_s__w); __pyx_v_estimated_records = ((PyObject *)__pyx_int_0); switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: __pyx_v_estimated_records = PyTuple_GET_ITEM(__pyx_args, 2); case 2: __pyx_v_mode = PyTuple_GET_ITEM(__pyx_args, 1); case 1: __pyx_v_filename = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.__init__"); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":100 * * def __init__(self, filename, mode='w', estimated_records=0): * self.filename = filename # <<<<<<<<<<<<<< * self._tune_db(estimated_records) * tcbdbsetcmpfunc(self.db, tccmpint64, NULL) */ __Pyx_INCREF(__pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); __Pyx_GOTREF(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->filename); __Pyx_DECREF(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->filename); ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->filename = __pyx_v_filename; /* "imposm/cache/tc.pyx":101 * def __init__(self, filename, mode='w', estimated_records=0): * self.filename = filename * self._tune_db(estimated_records) # <<<<<<<<<<<<<< * tcbdbsetcmpfunc(self.db, tccmpint64, NULL) * if not tcbdbopen(self.db, filename, _modes[mode]): */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___tune_db); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_estimated_records); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_estimated_records); __Pyx_GIVEREF(__pyx_v_estimated_records); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":102 * self.filename = filename * self._tune_db(estimated_records) * tcbdbsetcmpfunc(self.db, tccmpint64, NULL) # <<<<<<<<<<<<<< * if not tcbdbopen(self.db, filename, _modes[mode]): * raise IOError(tcbdbecode(self.db)) */ tcbdbsetcmpfunc(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db, tccmpint64, NULL); /* "imposm/cache/tc.pyx":103 * self._tune_db(estimated_records) * tcbdbsetcmpfunc(self.db, tccmpint64, NULL) * if not tcbdbopen(self.db, filename, _modes[mode]): # <<<<<<<<<<<<<< * raise IOError(tcbdbecode(self.db)) * self._opened = 1 */ __pyx_t_4 = ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db; __pyx_t_5 = PyBytes_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___modes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_v_mode); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = (!tcbdbopen(__pyx_t_4, __pyx_t_5, __pyx_t_6)); if (__pyx_t_7) { /* "imposm/cache/tc.pyx":104 * tcbdbsetcmpfunc(self.db, tccmpint64, NULL) * if not tcbdbopen(self.db, filename, _modes[mode]): * raise IOError(tcbdbecode(self.db)) # <<<<<<<<<<<<<< * self._opened = 1 * */ __pyx_t_2 = PyInt_FromLong(tcbdbecode(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_IOError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_2, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":105 * if not tcbdbopen(self.db, filename, _modes[mode]): * raise IOError(tcbdbecode(self.db)) * self._opened = 1 # <<<<<<<<<<<<<< * * def _tune_db(self, estimated_records): */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_opened = 1; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.BDB.__init__"); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":107 * self._opened = 1 * * def _tune_db(self, estimated_records): # <<<<<<<<<<<<<< * if estimated_records: * lmemb = 128 # default */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_2_tune_db(PyObject *__pyx_v_self, PyObject *__pyx_v_estimated_records); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_2_tune_db(PyObject *__pyx_v_self, PyObject *__pyx_v_estimated_records) { PyObject *__pyx_v_lmemb; long __pyx_v_nmemb; long __pyx_v_fpow; PyObject *__pyx_v_bnum; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; TCBDB *__pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; __Pyx_RefNannySetupContext("_tune_db"); __pyx_v_lmemb = Py_None; __Pyx_INCREF(Py_None); __pyx_v_bnum = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":108 * * def _tune_db(self, estimated_records): * if estimated_records: # <<<<<<<<<<<<<< * lmemb = 128 # default * nmemb = -1 */ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_estimated_records); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { /* "imposm/cache/tc.pyx":109 * def _tune_db(self, estimated_records): * if estimated_records: * lmemb = 128 # default # <<<<<<<<<<<<<< * nmemb = -1 * fpow = 13 # 2^13 = 8196 */ __Pyx_INCREF(__pyx_int_128); __Pyx_DECREF(__pyx_v_lmemb); __pyx_v_lmemb = __pyx_int_128; /* "imposm/cache/tc.pyx":110 * if estimated_records: * lmemb = 128 # default * nmemb = -1 # <<<<<<<<<<<<<< * fpow = 13 # 2^13 = 8196 * bnum = int((estimated_records*3)/lmemb) */ __pyx_v_nmemb = -1; /* "imposm/cache/tc.pyx":111 * lmemb = 128 # default * nmemb = -1 * fpow = 13 # 2^13 = 8196 # <<<<<<<<<<<<<< * bnum = int((estimated_records*3)/lmemb) * tcbdbtune(self.db, lmemb, nmemb, bnum, 5, fpow, BDBTLARGE | BDBTDEFLATE) */ __pyx_v_fpow = 13; /* "imposm/cache/tc.pyx":112 * nmemb = -1 * fpow = 13 # 2^13 = 8196 * bnum = int((estimated_records*3)/lmemb) # <<<<<<<<<<<<<< * tcbdbtune(self.db, lmemb, nmemb, bnum, 5, fpow, BDBTLARGE | BDBTDEFLATE) * else: */ __pyx_t_2 = PyNumber_Multiply(__pyx_v_estimated_records, __pyx_int_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_lmemb); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_v_bnum); __pyx_v_bnum = __pyx_t_3; __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":113 * fpow = 13 # 2^13 = 8196 * bnum = int((estimated_records*3)/lmemb) * tcbdbtune(self.db, lmemb, nmemb, bnum, 5, fpow, BDBTLARGE | BDBTDEFLATE) # <<<<<<<<<<<<<< * else: * tcbdbtune(self.db, -1, -1, -1, 5, 13, BDBTLARGE | BDBTDEFLATE) */ __pyx_t_4 = ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db; __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_lmemb); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_bnum); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = 5; tcbdbtune(__pyx_t_4, __pyx_t_5, __pyx_v_nmemb, __pyx_t_6, __pyx_t_7, __pyx_v_fpow, (BDBTLARGE | BDBTDEFLATE)); goto __pyx_L5; } /*else*/ { /* "imposm/cache/tc.pyx":115 * tcbdbtune(self.db, lmemb, nmemb, bnum, 5, fpow, BDBTLARGE | BDBTDEFLATE) * else: * tcbdbtune(self.db, -1, -1, -1, 5, 13, BDBTLARGE | BDBTDEFLATE) # <<<<<<<<<<<<<< * * def get(self, int64_t osmid): */ tcbdbtune(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db, -1, -1, -1, 5, 13, (BDBTLARGE | BDBTDEFLATE)); } __pyx_L5:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.BDB._tune_db"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_lmemb); __Pyx_DECREF(__pyx_v_bnum); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":117 * tcbdbtune(self.db, -1, -1, -1, 5, 13, BDBTLARGE | BDBTDEFLATE) * * def get(self, int64_t osmid): # <<<<<<<<<<<<<< * """ * Return object with given id. */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_3get(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid); /*proto*/ static char __pyx_doc_6imposm_5cache_2tc_3BDB_3get[] = "\n Return object with given id.\n Returns None if id is not stored.\n "; static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_3get(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid) { int64_t __pyx_v_osmid; void *__pyx_v_ret; int __pyx_v_ret_size; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("get"); assert(__pyx_arg_osmid); { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(__pyx_arg_osmid); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.get"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":124 * cdef void *ret * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) # <<<<<<<<<<<<<< * if not ret: return None * return self._obj(osmid, PyMarshal_ReadObjectFromString(ret, ret_size)) */ __pyx_v_ret = tcbdbget3(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), (&__pyx_v_ret_size)); /* "imposm/cache/tc.pyx":125 * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not ret: return None # <<<<<<<<<<<<<< * return self._obj(osmid, PyMarshal_ReadObjectFromString(ret, ret_size)) * */ __pyx_t_1 = (!(__pyx_v_ret != 0)); if (__pyx_t_1) { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":126 * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not ret: return None * return self._obj(osmid, PyMarshal_ReadObjectFromString(ret, ret_size)) # <<<<<<<<<<<<<< * * def get_raw(self, int64_t osmid): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyMarshal_ReadObjectFromString(((char *)__pyx_v_ret), __pyx_v_ret_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = ((struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB *)((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->__pyx_vtab)->_obj(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self), __pyx_v_osmid, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.BDB.get"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":128 * return self._obj(osmid, PyMarshal_ReadObjectFromString(ret, ret_size)) * * def get_raw(self, int64_t osmid): # <<<<<<<<<<<<<< * """ * Return object with given id. */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_4get_raw(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid); /*proto*/ static char __pyx_doc_6imposm_5cache_2tc_3BDB_4get_raw[] = "\n Return object with given id.\n Returns None if id is not stored.\n "; static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_4get_raw(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid) { int64_t __pyx_v_osmid; void *__pyx_v_ret; int __pyx_v_ret_size; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("get_raw"); assert(__pyx_arg_osmid); { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(__pyx_arg_osmid); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.get_raw"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":135 * cdef void *ret * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) # <<<<<<<<<<<<<< * if not ret: return None * return PyString_FromStringAndSize(ret, ret_size) */ __pyx_v_ret = tcbdbget3(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), (&__pyx_v_ret_size)); /* "imposm/cache/tc.pyx":136 * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not ret: return None # <<<<<<<<<<<<<< * return PyString_FromStringAndSize(ret, ret_size) * */ __pyx_t_1 = (!(__pyx_v_ret != 0)); if (__pyx_t_1) { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":137 * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not ret: return None * return PyString_FromStringAndSize(ret, ret_size) # <<<<<<<<<<<<<< * * def put(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyString_FromStringAndSize(((char *)__pyx_v_ret), __pyx_v_ret_size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("imposm.cache.tc.BDB.get_raw"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":139 * return PyString_FromStringAndSize(ret, ret_size) * * def put(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString(data, 2)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_5put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_5put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int64_t __pyx_v_osmid; PyObject *__pyx_v_data = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("put"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":140 * * def put(self, int64_t osmid, data): * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString(data, 2)) # <<<<<<<<<<<<<< * * def put_marshaled(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__put_marshaled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __pyx_v_data; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyMarshal_WriteObjectToString(__pyx_t_3, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.BDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":142 * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString(data, 2)) * * def put_marshaled(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_6put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_6put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int64_t __pyx_v_osmid; PyObject *__pyx_v_data = 0; PyObject *__pyx_r = NULL; TCBDB *__pyx_t_1; char *__pyx_t_2; size_t __pyx_t_3; char *__pyx_t_4; char *__pyx_t_5; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("put_marshaled"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put_marshaled") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.put_marshaled"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":143 * * def put_marshaled(self, int64_t osmid, data): * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) # <<<<<<<<<<<<<< * * cdef object _obj(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db; __pyx_t_2 = ((char *)(&__pyx_v_osmid)); __pyx_t_3 = (sizeof(int64_t)); __pyx_t_4 = PyBytes_AsString(__pyx_v_data); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __pyx_t_4; __pyx_t_6 = __pyx_v_data; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyBool_FromLong(tcbdbput(__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_5, __pyx_t_7)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.BDB.put_marshaled"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":145 * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * * cdef object _obj(self, int64_t osmid, data): # <<<<<<<<<<<<<< * """ * Create an object from the id and unmarshaled data. */ static PyObject *__pyx_f_6imposm_5cache_2tc_3BDB__obj(struct __pyx_obj_6imposm_5cache_2tc_BDB *__pyx_v_self, int64_t __pyx_v_osmid, PyObject *__pyx_v_data) { PyObject *__pyx_r = NULL; __Pyx_RefNannySetupContext("_obj"); /* "imposm/cache/tc.pyx":150 * Should be overridden by subclasses. * """ * return data # <<<<<<<<<<<<<< * * def __iter__(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_data); __pyx_r = __pyx_v_data; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":152 * return data * * def __iter__(self): # <<<<<<<<<<<<<< * """ * Return an iterator over the database. */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_7__iter__(PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_6imposm_5cache_2tc_3BDB_7__iter__[] = "\n Return an iterator over the database.\n Resets any existing iterator.\n "; struct wrapperbase __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_7__iter__; static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_7__iter__(PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("__iter__"); /* "imposm/cache/tc.pyx":157 * Resets any existing iterator. * """ * if self._cur: # <<<<<<<<<<<<<< * tcbdbcurdel(self._cur) * self._cur = tcbdbcurnew(self.db) */ __pyx_t_1 = (((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur != 0); if (__pyx_t_1) { /* "imposm/cache/tc.pyx":158 * """ * if self._cur: * tcbdbcurdel(self._cur) # <<<<<<<<<<<<<< * self._cur = tcbdbcurnew(self.db) * if not tcbdbcurfirst(self._cur): */ tcbdbcurdel(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur); goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":159 * if self._cur: * tcbdbcurdel(self._cur) * self._cur = tcbdbcurnew(self.db) # <<<<<<<<<<<<<< * if not tcbdbcurfirst(self._cur): * return iter([]) */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur = tcbdbcurnew(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db); /* "imposm/cache/tc.pyx":160 * tcbdbcurdel(self._cur) * self._cur = tcbdbcurnew(self.db) * if not tcbdbcurfirst(self._cur): # <<<<<<<<<<<<<< * return iter([]) * return self */ __pyx_t_1 = (!tcbdbcurfirst(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur)); if (__pyx_t_1) { /* "imposm/cache/tc.pyx":161 * self._cur = tcbdbcurnew(self.db) * if not tcbdbcurfirst(self._cur): * return iter([]) # <<<<<<<<<<<<<< * return self * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_3 = PyObject_GetIter(((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":162 * if not tcbdbcurfirst(self._cur): * return iter([]) * return self # <<<<<<<<<<<<<< * * def __contains__(self, int64_t osmid): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self); __pyx_r = __pyx_v_self; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.BDB.__iter__"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":164 * return self * * def __contains__(self, int64_t osmid): # <<<<<<<<<<<<<< * cdef void *ret * cdef int ret_size */ static int __pyx_pf_6imposm_5cache_2tc_3BDB_8__contains__(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid); /*proto*/ static int __pyx_pf_6imposm_5cache_2tc_3BDB_8__contains__(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid) { int64_t __pyx_v_osmid; void *__pyx_v_ret; int __pyx_v_ret_size; int __pyx_r; int __pyx_t_1; __Pyx_RefNannySetupContext("__contains__"); assert(__pyx_arg_osmid); { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(__pyx_arg_osmid); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.BDB.__contains__"); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":167 * cdef void *ret * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size); # <<<<<<<<<<<<<< * if ret: * return 1 */ __pyx_v_ret = tcbdbget3(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), (&__pyx_v_ret_size)); /* "imposm/cache/tc.pyx":168 * cdef int ret_size * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size); * if ret: # <<<<<<<<<<<<<< * return 1 * else: */ __pyx_t_1 = (__pyx_v_ret != 0); if (__pyx_t_1) { /* "imposm/cache/tc.pyx":169 * ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size); * if ret: * return 1 # <<<<<<<<<<<<<< * else: * return 0 */ __pyx_r = 1; goto __pyx_L0; goto __pyx_L5; } /*else*/ { /* "imposm/cache/tc.pyx":171 * return 1 * else: * return 0 # <<<<<<<<<<<<<< * * def __len__(self): */ __pyx_r = 0; goto __pyx_L0; } __pyx_L5:; __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":173 * return 0 * * def __len__(self): # <<<<<<<<<<<<<< * return tcbdbrnum(self.db) * */ static Py_ssize_t __pyx_pf_6imposm_5cache_2tc_3BDB_9__len__(PyObject *__pyx_v_self); /*proto*/ static Py_ssize_t __pyx_pf_6imposm_5cache_2tc_3BDB_9__len__(PyObject *__pyx_v_self) { Py_ssize_t __pyx_r; __Pyx_RefNannySetupContext("__len__"); /* "imposm/cache/tc.pyx":174 * * def __len__(self): * return tcbdbrnum(self.db) # <<<<<<<<<<<<<< * * def __next__(self): */ __pyx_r = tcbdbrnum(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db); goto __pyx_L0; __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":176 * return tcbdbrnum(self.db) * * def __next__(self): # <<<<<<<<<<<<<< * """ * Return next item as object. */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_10__next__(PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_6imposm_5cache_2tc_3BDB_10__next__[] = "\n Return next item as object.\n "; struct wrapperbase __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_10__next__; static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_10__next__(PyObject *__pyx_v_self) { int64_t __pyx_v_osmid; PyObject *__pyx_v_data; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int64_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("__next__"); __pyx_v_data = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":182 * cdef int64_t osmid * * if not self._cur: raise StopIteration # <<<<<<<<<<<<<< * * osmid, data = self._get_cur() */ __pyx_t_1 = (!(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur != 0)); if (__pyx_t_1) { __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":184 * if not self._cur: raise StopIteration * * osmid, data = self._get_cur() # <<<<<<<<<<<<<< * * # advance cursor, set to NULL if at the end */ __pyx_t_2 = ((struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB *)((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->__pyx_vtab)->_get_cur(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyTuple_CheckExact(__pyx_t_2) && likely(PyTuple_GET_SIZE(__pyx_t_2) == 2)) { PyObject* tuple = __pyx_t_2; __pyx_t_3 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_from_py_int64_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_osmid = __pyx_t_5; __Pyx_DECREF(__pyx_v_data); __pyx_v_data = __pyx_t_4; __pyx_t_4 = 0; } else { __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_UnpackItem(__pyx_t_6, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyInt_from_py_int64_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_UnpackItem(__pyx_t_6, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (__Pyx_EndUnpack(__pyx_t_6, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_osmid = __pyx_t_5; __Pyx_DECREF(__pyx_v_data); __pyx_v_data = __pyx_t_4; __pyx_t_4 = 0; } /* "imposm/cache/tc.pyx":187 * * # advance cursor, set to NULL if at the end * if tcbdbcurnext(self._cur) == 0: # <<<<<<<<<<<<<< * tcbdbcurdel(self._cur) * self._cur = NULL */ __pyx_t_1 = (tcbdbcurnext(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur) == 0); if (__pyx_t_1) { /* "imposm/cache/tc.pyx":188 * # advance cursor, set to NULL if at the end * if tcbdbcurnext(self._cur) == 0: * tcbdbcurdel(self._cur) # <<<<<<<<<<<<<< * self._cur = NULL * */ tcbdbcurdel(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur); /* "imposm/cache/tc.pyx":189 * if tcbdbcurnext(self._cur) == 0: * tcbdbcurdel(self._cur) * self._cur = NULL # <<<<<<<<<<<<<< * * # return objectified item */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_cur = NULL; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":192 * * # return objectified item * return self._obj(osmid, data) # <<<<<<<<<<<<<< * * cdef object _get_cur(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = ((struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB *)((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->__pyx_vtab)->_obj(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self), __pyx_v_osmid, __pyx_v_data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.BDB.__next__"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_data); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":194 * return self._obj(osmid, data) * * cdef object _get_cur(self): # <<<<<<<<<<<<<< * """ * Return the current object at the current cursor position */ static PyObject *__pyx_f_6imposm_5cache_2tc_3BDB__get_cur(struct __pyx_obj_6imposm_5cache_2tc_BDB *__pyx_v_self) { int __pyx_v_size; void *__pyx_v_ret; int64_t __pyx_v_osmid; PyObject *__pyx_v_value; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("_get_cur"); __pyx_v_value = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":201 * cdef int size * cdef void *ret * ret = tcbdbcurkey3(self._cur, &size) # <<<<<<<<<<<<<< * osmid = (ret)[0] * ret = tcbdbcurval3(self._cur, &size) */ __pyx_v_ret = tcbdbcurkey3(__pyx_v_self->_cur, (&__pyx_v_size)); /* "imposm/cache/tc.pyx":202 * cdef void *ret * ret = tcbdbcurkey3(self._cur, &size) * osmid = (ret)[0] # <<<<<<<<<<<<<< * ret = tcbdbcurval3(self._cur, &size) * value = PyMarshal_ReadObjectFromString(ret, size) */ __pyx_v_osmid = (((int64_t *)__pyx_v_ret)[0]); /* "imposm/cache/tc.pyx":203 * ret = tcbdbcurkey3(self._cur, &size) * osmid = (ret)[0] * ret = tcbdbcurval3(self._cur, &size) # <<<<<<<<<<<<<< * value = PyMarshal_ReadObjectFromString(ret, size) * return osmid, value */ __pyx_v_ret = tcbdbcurval3(__pyx_v_self->_cur, (&__pyx_v_size)); /* "imposm/cache/tc.pyx":204 * osmid = (ret)[0] * ret = tcbdbcurval3(self._cur, &size) * value = PyMarshal_ReadObjectFromString(ret, size) # <<<<<<<<<<<<<< * return osmid, value * */ __pyx_t_1 = PyMarshal_ReadObjectFromString(((char *)__pyx_v_ret), __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_v_value); __pyx_v_value = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":205 * ret = tcbdbcurval3(self._cur, &size) * value = PyMarshal_ReadObjectFromString(ret, size) * return osmid, value # <<<<<<<<<<<<<< * * def close(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("imposm.cache.tc.BDB._get_cur"); __pyx_r = 0; __pyx_L0:; __Pyx_DECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":207 * return osmid, value * * def close(self): # <<<<<<<<<<<<<< * if self._opened: * tcbdbclose(self.db) */ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_11close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_3BDB_11close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = NULL; __Pyx_RefNannySetupContext("close"); /* "imposm/cache/tc.pyx":208 * * def close(self): * if self._opened: # <<<<<<<<<<<<<< * tcbdbclose(self.db) * self._opened = 0 */ if (((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_opened) { /* "imposm/cache/tc.pyx":209 * def close(self): * if self._opened: * tcbdbclose(self.db) # <<<<<<<<<<<<<< * self._opened = 0 * */ tcbdbclose(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db); goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":210 * if self._opened: * tcbdbclose(self.db) * self._opened = 0 # <<<<<<<<<<<<<< * * def __dealloc__(self): */ ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_opened = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":212 * self._opened = 0 * * def __dealloc__(self): # <<<<<<<<<<<<<< * if self._opened: * tcbdbclose(self.db) */ static void __pyx_pf_6imposm_5cache_2tc_3BDB_12__dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_pf_6imposm_5cache_2tc_3BDB_12__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannySetupContext("__dealloc__"); /* "imposm/cache/tc.pyx":213 * * def __dealloc__(self): * if self._opened: # <<<<<<<<<<<<<< * tcbdbclose(self.db) * tcbdbdel(self.db) */ if (((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->_opened) { /* "imposm/cache/tc.pyx":214 * def __dealloc__(self): * if self._opened: * tcbdbclose(self.db) # <<<<<<<<<<<<<< * tcbdbdel(self.db) * */ tcbdbclose(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db); goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":215 * if self._opened: * tcbdbclose(self.db) * tcbdbdel(self.db) # <<<<<<<<<<<<<< * * cdef class CoordDB(BDB): */ tcbdbdel(((struct __pyx_obj_6imposm_5cache_2tc_BDB *)__pyx_v_self)->db); __Pyx_RefNannyFinishContext(); } /* "imposm/cache/tc.pyx":218 * * cdef class CoordDB(BDB): * def put(self, osmid, x, y): # <<<<<<<<<<<<<< * return self._put(osmid, x, y) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_osmid = 0; PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; PyObject *__pyx_r = NULL; int64_t __pyx_t_1; double __pyx_t_2; double __pyx_t_3; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__x,&__pyx_n_s__y,0}; __Pyx_RefNannySetupContext("put"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = values[0]; __pyx_v_x = values[1]; __pyx_v_y = values[2]; } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_y = PyTuple_GET_ITEM(__pyx_args, 2); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.CoordDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":219 * cdef class CoordDB(BDB): * def put(self, osmid, x, y): * return self._put(osmid, x, y) # <<<<<<<<<<<<<< * * def put_marshaled(self, osmid, x, y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_from_py_int64_t(__pyx_v_osmid); if (unlikely((__pyx_t_1 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_y); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyBool_FromLong(((struct __pyx_vtabstruct_6imposm_5cache_2tc_CoordDB *)((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_put(((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self), __pyx_t_1, __pyx_t_2, __pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.CoordDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":221 * return self._put(osmid, x, y) * * def put_marshaled(self, osmid, x, y): # <<<<<<<<<<<<<< * return self._put(osmid, x, y) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_osmid = 0; PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; PyObject *__pyx_r = NULL; int64_t __pyx_t_1; double __pyx_t_2; double __pyx_t_3; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__x,&__pyx_n_s__y,0}; __Pyx_RefNannySetupContext("put_marshaled"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put_marshaled") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = values[0]; __pyx_v_x = values[1]; __pyx_v_y = values[2]; } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_y = PyTuple_GET_ITEM(__pyx_args, 2); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.CoordDB.put_marshaled"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":222 * * def put_marshaled(self, osmid, x, y): * return self._put(osmid, x, y) # <<<<<<<<<<<<<< * * cdef bint _put(self, int64_t osmid, double x, double y) nogil: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_from_py_int64_t(__pyx_v_osmid); if (unlikely((__pyx_t_1 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_y); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyBool_FromLong(((struct __pyx_vtabstruct_6imposm_5cache_2tc_CoordDB *)((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_put(((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self), __pyx_t_1, __pyx_t_2, __pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.CoordDB.put_marshaled"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":224 * return self._put(osmid, x, y) * * cdef bint _put(self, int64_t osmid, double x, double y) nogil: # <<<<<<<<<<<<<< * cdef coord p = coord_struct(x, y) * return tcbdbput(self.db, &osmid, sizeof(int64_t), &p, sizeof(coord)) */ static int __pyx_f_6imposm_5cache_2tc_7CoordDB__put(struct __pyx_obj_6imposm_5cache_2tc_CoordDB *__pyx_v_self, int64_t __pyx_v_osmid, double __pyx_v_x, double __pyx_v_y) { __pyx_t_6imposm_5cache_2tc_coord __pyx_v_p; int __pyx_r; /* "imposm/cache/tc.pyx":225 * * cdef bint _put(self, int64_t osmid, double x, double y) nogil: * cdef coord p = coord_struct(x, y) # <<<<<<<<<<<<<< * return tcbdbput(self.db, &osmid, sizeof(int64_t), &p, sizeof(coord)) * */ __pyx_v_p = __pyx_f_6imposm_5cache_2tc_coord_struct(__pyx_v_x, __pyx_v_y); /* "imposm/cache/tc.pyx":226 * cdef bint _put(self, int64_t osmid, double x, double y) nogil: * cdef coord p = coord_struct(x, y) * return tcbdbput(self.db, &osmid, sizeof(int64_t), &p, sizeof(coord)) # <<<<<<<<<<<<<< * * def get(self, int64_t osmid): */ __pyx_r = tcbdbput(__pyx_v_self->__pyx_base.db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), ((char *)(&__pyx_v_p)), (sizeof(__pyx_t_6imposm_5cache_2tc_coord))); goto __pyx_L0; __pyx_r = 0; __pyx_L0:; return __pyx_r; } /* "imposm/cache/tc.pyx":228 * return tcbdbput(self.db, &osmid, sizeof(int64_t), &p, sizeof(coord)) * * def get(self, int64_t osmid): # <<<<<<<<<<<<<< * cdef coord *value * cdef int ret_size */ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_2get(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_2get(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid) { int64_t __pyx_v_osmid; __pyx_t_6imposm_5cache_2tc_coord *__pyx_v_value; int __pyx_v_ret_size; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("get"); assert(__pyx_arg_osmid); { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(__pyx_arg_osmid); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.CoordDB.get"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":231 * cdef coord *value * cdef int ret_size * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) # <<<<<<<<<<<<<< * if not value: return * return _uint32_to_coord(value.x), _uint32_to_coord(value.y) */ __pyx_v_value = ((__pyx_t_6imposm_5cache_2tc_coord *)tcbdbget3(((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self)->__pyx_base.db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), (&__pyx_v_ret_size))); /* "imposm/cache/tc.pyx":232 * cdef int ret_size * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not value: return # <<<<<<<<<<<<<< * return _uint32_to_coord(value.x), _uint32_to_coord(value.y) * */ __pyx_t_1 = (!(__pyx_v_value != 0)); if (__pyx_t_1) { __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":233 * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not value: return * return _uint32_to_coord(value.x), _uint32_to_coord(value.y) # <<<<<<<<<<<<<< * * def get_coords(self, refs): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->x)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->y)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.CoordDB.get"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":235 * return _uint32_to_coord(value.x), _uint32_to_coord(value.y) * * def get_coords(self, refs): # <<<<<<<<<<<<<< * cdef coord *value * cdef int ret_size */ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_3get_coords(PyObject *__pyx_v_self, PyObject *__pyx_v_refs); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_7CoordDB_3get_coords(PyObject *__pyx_v_self, PyObject *__pyx_v_refs) { __pyx_t_6imposm_5cache_2tc_coord *__pyx_v_value; int __pyx_v_ret_size; int64_t __pyx_v_osmid; PyObject *__pyx_v_coords; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; int64_t __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; __Pyx_RefNannySetupContext("get_coords"); __pyx_v_coords = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":239 * cdef int ret_size * cdef int64_t osmid * coords = list() # <<<<<<<<<<<<<< * for osmid in refs: * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_v_coords)); __pyx_v_coords = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":240 * cdef int64_t osmid * coords = list() * for osmid in refs: # <<<<<<<<<<<<<< * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not value: return */ if (PyList_CheckExact(__pyx_v_refs) || PyTuple_CheckExact(__pyx_v_refs)) { __pyx_t_2 = 0; __pyx_t_1 = __pyx_v_refs; __Pyx_INCREF(__pyx_t_1); } else { __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_refs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); } for (;;) { if (likely(PyList_CheckExact(__pyx_t_1))) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; } else if (likely(PyTuple_CheckExact(__pyx_t_1))) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; } else { __pyx_t_3 = PyIter_Next(__pyx_t_1); if (!__pyx_t_3) { if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } __Pyx_GOTREF(__pyx_t_3); } __pyx_t_4 = __Pyx_PyInt_from_py_int64_t(__pyx_t_3); if (unlikely((__pyx_t_4 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_osmid = __pyx_t_4; /* "imposm/cache/tc.pyx":241 * coords = list() * for osmid in refs: * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) # <<<<<<<<<<<<<< * if not value: return * coords.append((_uint32_to_coord(value.x), _uint32_to_coord(value.y))) */ __pyx_v_value = ((__pyx_t_6imposm_5cache_2tc_coord *)tcbdbget3(((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)__pyx_v_self)->__pyx_base.db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), (&__pyx_v_ret_size))); /* "imposm/cache/tc.pyx":242 * for osmid in refs: * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not value: return # <<<<<<<<<<<<<< * coords.append((_uint32_to_coord(value.x), _uint32_to_coord(value.y))) * */ __pyx_t_5 = (!(__pyx_v_value != 0)); if (__pyx_t_5) { __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L7; } __pyx_L7:; /* "imposm/cache/tc.pyx":243 * value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) * if not value: return * coords.append((_uint32_to_coord(value.x), _uint32_to_coord(value.y))) # <<<<<<<<<<<<<< * * return coords */ if (unlikely(__pyx_v_coords == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_3 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->x)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->y)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_8 = PyList_Append(__pyx_v_coords, ((PyObject *)__pyx_t_7)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":245 * coords.append((_uint32_to_coord(value.x), _uint32_to_coord(value.y))) * * return coords # <<<<<<<<<<<<<< * * cdef object _get_cur(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_coords)); __pyx_r = ((PyObject *)__pyx_v_coords); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("imposm.cache.tc.CoordDB.get_coords"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_coords); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":247 * return coords * * cdef object _get_cur(self): # <<<<<<<<<<<<<< * cdef int size * cdef int64_t osmid */ static PyObject *__pyx_f_6imposm_5cache_2tc_7CoordDB__get_cur(struct __pyx_obj_6imposm_5cache_2tc_CoordDB *__pyx_v_self) { int __pyx_v_size; int64_t __pyx_v_osmid; void *__pyx_v_ret; __pyx_t_6imposm_5cache_2tc_coord *__pyx_v_value; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("_get_cur"); /* "imposm/cache/tc.pyx":252 * cdef void *ret * cdef coord *value * ret = tcbdbcurkey3(self._cur, &size) # <<<<<<<<<<<<<< * osmid = (ret)[0] * value = tcbdbcurval3(self._cur, &size) */ __pyx_v_ret = tcbdbcurkey3(__pyx_v_self->__pyx_base._cur, (&__pyx_v_size)); /* "imposm/cache/tc.pyx":253 * cdef coord *value * ret = tcbdbcurkey3(self._cur, &size) * osmid = (ret)[0] # <<<<<<<<<<<<<< * value = tcbdbcurval3(self._cur, &size) * return osmid, (_uint32_to_coord(value.x), _uint32_to_coord(value.y)) */ __pyx_v_osmid = (((int64_t *)__pyx_v_ret)[0]); /* "imposm/cache/tc.pyx":254 * ret = tcbdbcurkey3(self._cur, &size) * osmid = (ret)[0] * value = tcbdbcurval3(self._cur, &size) # <<<<<<<<<<<<<< * return osmid, (_uint32_to_coord(value.x), _uint32_to_coord(value.y)) * */ __pyx_v_value = ((__pyx_t_6imposm_5cache_2tc_coord *)tcbdbcurval3(__pyx_v_self->__pyx_base._cur, (&__pyx_v_size))); /* "imposm/cache/tc.pyx":255 * osmid = (ret)[0] * value = tcbdbcurval3(self._cur, &size) * return osmid, (_uint32_to_coord(value.x), _uint32_to_coord(value.y)) # <<<<<<<<<<<<<< * * cdef object _obj(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->x)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_value->y)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.CoordDB._get_cur"); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":257 * return osmid, (_uint32_to_coord(value.x), _uint32_to_coord(value.y)) * * cdef object _obj(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return osmid, data * */ static PyObject *__pyx_f_6imposm_5cache_2tc_7CoordDB__obj(struct __pyx_obj_6imposm_5cache_2tc_CoordDB *__pyx_v_self, int64_t __pyx_v_osmid, PyObject *__pyx_v_data) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("_obj"); /* "imposm/cache/tc.pyx":258 * * cdef object _obj(self, int64_t osmid, data): * return osmid, data # <<<<<<<<<<<<<< * * cdef class NodeDB(BDB): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("imposm.cache.tc.CoordDB._obj"); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":261 * * cdef class NodeDB(BDB): * def put(self, osmid, tags, pos): # <<<<<<<<<<<<<< * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_6NodeDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_6NodeDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_osmid = 0; PyObject *__pyx_v_tags = 0; PyObject *__pyx_v_pos = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__tags,&__pyx_n_s__pos,0}; __Pyx_RefNannySetupContext("put"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tags); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pos); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = values[0]; __pyx_v_tags = values[1]; __pyx_v_pos = values[2]; } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_tags = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_pos = PyTuple_GET_ITEM(__pyx_args, 2); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.NodeDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":262 * cdef class NodeDB(BDB): * def put(self, osmid, tags, pos): * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) # <<<<<<<<<<<<<< * * def put_marshaled(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__put_marshaled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_tags); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_tags); __Pyx_GIVEREF(__pyx_v_tags); __Pyx_INCREF(__pyx_v_pos); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); __pyx_t_3 = PyMarshal_WriteObjectToString(((PyObject *)__pyx_t_2), 2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_osmid); __Pyx_GIVEREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.NodeDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":264 * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) * * def put_marshaled(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_6NodeDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_6NodeDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int64_t __pyx_v_osmid; PyObject *__pyx_v_data = 0; PyObject *__pyx_r = NULL; TCBDB *__pyx_t_1; char *__pyx_t_2; size_t __pyx_t_3; char *__pyx_t_4; char *__pyx_t_5; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("put_marshaled"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put_marshaled") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.NodeDB.put_marshaled"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":265 * * def put_marshaled(self, int64_t osmid, data): * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) # <<<<<<<<<<<<<< * * cdef object _obj(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((struct __pyx_obj_6imposm_5cache_2tc_NodeDB *)__pyx_v_self)->__pyx_base.db; __pyx_t_2 = ((char *)(&__pyx_v_osmid)); __pyx_t_3 = (sizeof(int64_t)); __pyx_t_4 = PyBytes_AsString(__pyx_v_data); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __pyx_t_4; __pyx_t_6 = __pyx_v_data; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyBool_FromLong(tcbdbput(__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_5, __pyx_t_7)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.NodeDB.put_marshaled"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":267 * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * * cdef object _obj(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return Node(osmid, data[0], data[1]) * */ static PyObject *__pyx_f_6imposm_5cache_2tc_6NodeDB__obj(struct __pyx_obj_6imposm_5cache_2tc_NodeDB *__pyx_v_self, int64_t __pyx_v_osmid, PyObject *__pyx_v_data) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_obj"); /* "imposm/cache/tc.pyx":268 * * cdef object _obj(self, int64_t osmid, data): * return Node(osmid, data[0], data[1]) # <<<<<<<<<<<<<< * * cdef class InsertedWayDB(BDB): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__Node); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_data, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_data, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.NodeDB._obj"); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":271 * * cdef class InsertedWayDB(BDB): * def put(self, int64_t osmid): # <<<<<<<<<<<<<< * return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_put(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_put(PyObject *__pyx_v_self, PyObject *__pyx_arg_osmid) { int64_t __pyx_v_osmid; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("put"); assert(__pyx_arg_osmid); { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(__pyx_arg_osmid); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.InsertedWayDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":272 * cdef class InsertedWayDB(BDB): * def put(self, int64_t osmid): * return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); # <<<<<<<<<<<<<< * * def __next__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(tcbdbput(((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base.db, ((char *)(&__pyx_v_osmid)), (sizeof(int64_t)), __pyx_k__x, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("imposm.cache.tc.InsertedWayDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":274 * return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); * * def __next__(self): # <<<<<<<<<<<<<< * """ * Return next item as object. */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_1__next__(PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_6imposm_5cache_2tc_13InsertedWayDB_1__next__[] = "\n Return next item as object.\n "; struct wrapperbase __pyx_wrapperbase_6imposm_5cache_2tc_13InsertedWayDB_1__next__; static PyObject *__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_1__next__(PyObject *__pyx_v_self) { int64_t __pyx_v_osmid; int __pyx_v_size; void *__pyx_v_ret; PyObject *__pyx_r = NULL; int __pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("__next__"); /* "imposm/cache/tc.pyx":282 * cdef void *ret * * if not self._cur: raise StopIteration # <<<<<<<<<<<<<< * * ret = tcbdbcurkey3(self._cur, &size) */ __pyx_t_1 = (!(((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base._cur != 0)); if (__pyx_t_1) { __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "imposm/cache/tc.pyx":284 * if not self._cur: raise StopIteration * * ret = tcbdbcurkey3(self._cur, &size) # <<<<<<<<<<<<<< * osmid = (ret)[0] * */ __pyx_v_ret = tcbdbcurkey3(((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base._cur, (&__pyx_v_size)); /* "imposm/cache/tc.pyx":285 * * ret = tcbdbcurkey3(self._cur, &size) * osmid = (ret)[0] # <<<<<<<<<<<<<< * * # advance cursor, set to NULL if at the end */ __pyx_v_osmid = (((int64_t *)__pyx_v_ret)[0]); /* "imposm/cache/tc.pyx":288 * * # advance cursor, set to NULL if at the end * if tcbdbcurnext(self._cur) == 0: # <<<<<<<<<<<<<< * tcbdbcurdel(self._cur) * self._cur = NULL */ __pyx_t_1 = (tcbdbcurnext(((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base._cur) == 0); if (__pyx_t_1) { /* "imposm/cache/tc.pyx":289 * # advance cursor, set to NULL if at the end * if tcbdbcurnext(self._cur) == 0: * tcbdbcurdel(self._cur) # <<<<<<<<<<<<<< * self._cur = NULL * */ tcbdbcurdel(((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base._cur); /* "imposm/cache/tc.pyx":290 * if tcbdbcurnext(self._cur) == 0: * tcbdbcurdel(self._cur) * self._cur = NULL # <<<<<<<<<<<<<< * * return osmid */ ((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)__pyx_v_self)->__pyx_base._cur = NULL; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":292 * self._cur = NULL * * return osmid # <<<<<<<<<<<<<< * * cdef class RefTagDB(BDB): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("imposm.cache.tc.InsertedWayDB.__next__"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":298 * Database for items with references and tags (i.e. ways/relations). * """ * def put(self, osmid, tags, refs): # <<<<<<<<<<<<<< * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, refs), 2)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_8RefTagDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_8RefTagDB_put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_osmid = 0; PyObject *__pyx_v_tags = 0; PyObject *__pyx_v_refs = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__tags,&__pyx_n_s__refs,0}; __Pyx_RefNannySetupContext("put"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tags); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__refs); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = values[0]; __pyx_v_tags = values[1]; __pyx_v_refs = values[2]; } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_tags = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_refs = PyTuple_GET_ITEM(__pyx_args, 2); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.RefTagDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":299 * """ * def put(self, osmid, tags, refs): * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, refs), 2)) # <<<<<<<<<<<<<< * * def put_marshaled(self, int64_t osmid, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__put_marshaled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_tags); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_tags); __Pyx_GIVEREF(__pyx_v_tags); __Pyx_INCREF(__pyx_v_refs); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_refs); __Pyx_GIVEREF(__pyx_v_refs); __pyx_t_3 = PyMarshal_WriteObjectToString(((PyObject *)__pyx_t_2), 2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_osmid); __Pyx_GIVEREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.RefTagDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":301 * return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, refs), 2)) * * def put_marshaled(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_8RefTagDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pf_6imposm_5cache_2tc_8RefTagDB_1put_marshaled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int64_t __pyx_v_osmid; PyObject *__pyx_v_data = 0; PyObject *__pyx_r = NULL; TCBDB *__pyx_t_1; char *__pyx_t_2; size_t __pyx_t_3; char *__pyx_t_4; char *__pyx_t_5; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__osmid,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("put_marshaled"); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put_marshaled") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put_marshaled", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.RefTagDB.put_marshaled"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":302 * * def put_marshaled(self, int64_t osmid, data): * return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) # <<<<<<<<<<<<<< * * cdef class WayDB(RefTagDB): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((struct __pyx_obj_6imposm_5cache_2tc_RefTagDB *)__pyx_v_self)->__pyx_base.db; __pyx_t_2 = ((char *)(&__pyx_v_osmid)); __pyx_t_3 = (sizeof(int64_t)); __pyx_t_4 = PyBytes_AsString(__pyx_v_data); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __pyx_t_4; __pyx_t_6 = __pyx_v_data; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyBool_FromLong(tcbdbput(__pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_5, __pyx_t_7)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.RefTagDB.put_marshaled"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":305 * * cdef class WayDB(RefTagDB): * cdef object _obj(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return Way(osmid, data[0], data[1]) * */ static PyObject *__pyx_f_6imposm_5cache_2tc_5WayDB__obj(struct __pyx_obj_6imposm_5cache_2tc_WayDB *__pyx_v_self, int64_t __pyx_v_osmid, PyObject *__pyx_v_data) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_obj"); /* "imposm/cache/tc.pyx":306 * cdef class WayDB(RefTagDB): * cdef object _obj(self, int64_t osmid, data): * return Way(osmid, data[0], data[1]) # <<<<<<<<<<<<<< * * cdef class RelationDB(RefTagDB): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__Way); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_data, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_data, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.WayDB._obj"); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":309 * * cdef class RelationDB(RefTagDB): * cdef object _obj(self, int64_t osmid, data): # <<<<<<<<<<<<<< * return Relation(osmid, data[0], data[1]) * */ static PyObject *__pyx_f_6imposm_5cache_2tc_10RelationDB__obj(struct __pyx_obj_6imposm_5cache_2tc_RelationDB *__pyx_v_self, int64_t __pyx_v_osmid, PyObject *__pyx_v_data) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("_obj"); /* "imposm/cache/tc.pyx":310 * cdef class RelationDB(RefTagDB): * cdef object _obj(self, int64_t osmid, data): * return Relation(osmid, data[0], data[1]) # <<<<<<<<<<<<<< * * from imposm.cache.internal import DeltaCoords as _DeltaCoords */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__Relation); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_data, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_data, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.RelationDB._obj"); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":316 * import bisect * * cdef unzip_nodes(list nodes): # <<<<<<<<<<<<<< * cdef int64_t last_lon, last_lat, lon, lat * cdef double lon_f, lat_f */ static PyObject *__pyx_f_6imposm_5cache_2tc_unzip_nodes(PyObject *__pyx_v_nodes) { int64_t __pyx_v_last_lon; int64_t __pyx_v_last_lat; int64_t __pyx_v_lon; int64_t __pyx_v_lat; double __pyx_v_lon_f; double __pyx_v_lat_f; int64_t __pyx_v_last_id; int64_t __pyx_v_id; PyObject *__pyx_v_ids; PyObject *__pyx_v_lons; PyObject *__pyx_v_lats; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int64_t __pyx_t_7; double __pyx_t_8; double __pyx_t_9; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; __Pyx_RefNannySetupContext("unzip_nodes"); __pyx_v_ids = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); __pyx_v_lons = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); __pyx_v_lats = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":320 * cdef double lon_f, lat_f * cdef int64_t last_id, id * ids, lons, lats = [], [], [] # <<<<<<<<<<<<<< * last_id = last_lon = last_lat = 0 * for id, lon_f, lat_f in nodes: */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_v_ids)); __pyx_v_ids = __pyx_t_1; __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lons)); __pyx_v_lons = __pyx_t_2; __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lats)); __pyx_v_lats = __pyx_t_3; __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":321 * cdef int64_t last_id, id * ids, lons, lats = [], [], [] * last_id = last_lon = last_lat = 0 # <<<<<<<<<<<<<< * for id, lon_f, lat_f in nodes: * lon = _coord_to_uint32(lon_f) */ __pyx_v_last_id = 0; __pyx_v_last_lon = 0; __pyx_v_last_lat = 0; /* "imposm/cache/tc.pyx":322 * ids, lons, lats = [], [], [] * last_id = last_lon = last_lat = 0 * for id, lon_f, lat_f in nodes: # <<<<<<<<<<<<<< * lon = _coord_to_uint32(lon_f) * lat = _coord_to_uint32(lat_f) */ if (unlikely(__pyx_v_nodes == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_4 = 0; __pyx_t_3 = ((PyObject *)__pyx_v_nodes); __Pyx_INCREF(__pyx_t_3); for (;;) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (PyTuple_CheckExact(__pyx_t_2) && likely(PyTuple_GET_SIZE(__pyx_t_2) == 3)) { PyObject* tuple = __pyx_t_2; __pyx_t_1 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyInt_from_py_int64_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = PyTuple_GET_ITEM(tuple, 2); __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_id = __pyx_t_7; __pyx_v_lon_f = __pyx_t_8; __pyx_v_lat_f = __pyx_t_9; } else { __pyx_t_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __Pyx_UnpackItem(__pyx_t_10, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyInt_from_py_int64_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_UnpackItem(__pyx_t_10, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_UnpackItem(__pyx_t_10, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_EndUnpack(__pyx_t_10, 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_v_id = __pyx_t_7; __pyx_v_lon_f = __pyx_t_9; __pyx_v_lat_f = __pyx_t_8; } /* "imposm/cache/tc.pyx":323 * last_id = last_lon = last_lat = 0 * for id, lon_f, lat_f in nodes: * lon = _coord_to_uint32(lon_f) # <<<<<<<<<<<<<< * lat = _coord_to_uint32(lat_f) * */ __pyx_v_lon = __pyx_f_6imposm_5cache_2tc__coord_to_uint32(__pyx_v_lon_f); /* "imposm/cache/tc.pyx":324 * for id, lon_f, lat_f in nodes: * lon = _coord_to_uint32(lon_f) * lat = _coord_to_uint32(lat_f) # <<<<<<<<<<<<<< * * ids.append(id - last_id) */ __pyx_v_lat = __pyx_f_6imposm_5cache_2tc__coord_to_uint32(__pyx_v_lat_f); /* "imposm/cache/tc.pyx":326 * lat = _coord_to_uint32(lat_f) * * ids.append(id - last_id) # <<<<<<<<<<<<<< * lons.append(lon - last_lon) * lats.append(lat - last_lat) */ if (unlikely(__pyx_v_ids == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = __Pyx_PyInt_to_py_int64_t((__pyx_v_id - __pyx_v_last_id)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = PyList_Append(__pyx_v_ids, __pyx_t_2); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":327 * * ids.append(id - last_id) * lons.append(lon - last_lon) # <<<<<<<<<<<<<< * lats.append(lat - last_lat) * last_id = id */ if (unlikely(__pyx_v_lons == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = __Pyx_PyInt_to_py_int64_t((__pyx_v_lon - __pyx_v_last_lon)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = PyList_Append(__pyx_v_lons, __pyx_t_2); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":328 * ids.append(id - last_id) * lons.append(lon - last_lon) * lats.append(lat - last_lat) # <<<<<<<<<<<<<< * last_id = id * last_lon = lon */ if (unlikely(__pyx_v_lats == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = __Pyx_PyInt_to_py_int64_t((__pyx_v_lat - __pyx_v_last_lat)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = PyList_Append(__pyx_v_lats, __pyx_t_2); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":329 * lons.append(lon - last_lon) * lats.append(lat - last_lat) * last_id = id # <<<<<<<<<<<<<< * last_lon = lon * last_lat = lat */ __pyx_v_last_id = __pyx_v_id; /* "imposm/cache/tc.pyx":330 * lats.append(lat - last_lat) * last_id = id * last_lon = lon # <<<<<<<<<<<<<< * last_lat = lat * */ __pyx_v_last_lon = __pyx_v_lon; /* "imposm/cache/tc.pyx":331 * last_id = id * last_lon = lon * last_lat = lat # <<<<<<<<<<<<<< * * return ids, lons, lats */ __pyx_v_last_lat = __pyx_v_lat; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":333 * last_lat = lat * * return ids, lons, lats # <<<<<<<<<<<<<< * * cdef zip_nodes(tuple ids, tuple lons, tuple lats): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_INCREF(((PyObject *)__pyx_v_ids)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_ids)); __Pyx_GIVEREF(((PyObject *)__pyx_v_ids)); __Pyx_INCREF(((PyObject *)__pyx_v_lons)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_lons)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lons)); __Pyx_INCREF(((PyObject *)__pyx_v_lats)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_lats)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lats)); __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("imposm.cache.tc.unzip_nodes"); __pyx_r = 0; __pyx_L0:; __Pyx_DECREF(__pyx_v_ids); __Pyx_DECREF(__pyx_v_lons); __Pyx_DECREF(__pyx_v_lats); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":335 * return ids, lons, lats * * cdef zip_nodes(tuple ids, tuple lons, tuple lats): # <<<<<<<<<<<<<< * cdef uint32_t last_lon, last_lat * cdef int64_t last_id */ static PyObject *__pyx_f_6imposm_5cache_2tc_zip_nodes(PyObject *__pyx_v_ids, PyObject *__pyx_v_lons, PyObject *__pyx_v_lats) { uint32_t __pyx_v_last_lon; uint32_t __pyx_v_last_lat; int64_t __pyx_v_last_id; PyObject *__pyx_v_nodes; Py_ssize_t __pyx_v_i; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; Py_ssize_t __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int64_t __pyx_t_6; uint32_t __pyx_t_7; PyObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("zip_nodes"); __pyx_v_nodes = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":338 * cdef uint32_t last_lon, last_lat * cdef int64_t last_id * nodes = [] # <<<<<<<<<<<<<< * last_id = last_lon = last_lat = 0 * */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_v_nodes)); __pyx_v_nodes = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":339 * cdef int64_t last_id * nodes = [] * last_id = last_lon = last_lat = 0 # <<<<<<<<<<<<<< * * for i in range(len(ids)): */ __pyx_v_last_id = 0; __pyx_v_last_lon = 0; __pyx_v_last_lat = 0; /* "imposm/cache/tc.pyx":341 * last_id = last_lon = last_lat = 0 * * for i in range(len(ids)): # <<<<<<<<<<<<<< * last_id += ids[i] * last_lon += lons[i] */ __pyx_t_1 = ((PyObject *)__pyx_v_ids); __Pyx_INCREF(__pyx_t_1); if (unlikely(__pyx_t_1 == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = PyTuple_GET_SIZE(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_i = __pyx_t_3; /* "imposm/cache/tc.pyx":342 * * for i in range(len(ids)): * last_id += ids[i] # <<<<<<<<<<<<<< * last_lon += lons[i] * last_lat += lats[i] */ __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_last_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_ids), __pyx_v_i, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyInt_from_py_int64_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_last_id = __pyx_t_6; /* "imposm/cache/tc.pyx":343 * for i in range(len(ids)): * last_id += ids[i] * last_lon += lons[i] # <<<<<<<<<<<<<< * last_lat += lats[i] * */ __pyx_t_5 = __Pyx_PyInt_to_py_uint32_t(__pyx_v_last_lon); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_lons), __pyx_v_i, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyInt_from_py_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (uint32_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_last_lon = __pyx_t_7; /* "imposm/cache/tc.pyx":344 * last_id += ids[i] * last_lon += lons[i] * last_lat += lats[i] # <<<<<<<<<<<<<< * * nodes.append(( */ __pyx_t_1 = __Pyx_PyInt_to_py_uint32_t(__pyx_v_last_lat); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_lats), __pyx_v_i, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyInt_from_py_uint32_t(__pyx_t_5); if (unlikely((__pyx_t_7 == (uint32_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_last_lat = __pyx_t_7; /* "imposm/cache/tc.pyx":346 * last_lat += lats[i] * * nodes.append(( # <<<<<<<<<<<<<< * last_id, * _uint32_to_coord(last_lon), */ if (unlikely(__pyx_v_nodes == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } /* "imposm/cache/tc.pyx":347 * * nodes.append(( * last_id, # <<<<<<<<<<<<<< * _uint32_to_coord(last_lon), * _uint32_to_coord(last_lat) */ __pyx_t_5 = __Pyx_PyInt_to_py_int64_t(__pyx_v_last_id); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); /* "imposm/cache/tc.pyx":348 * nodes.append(( * last_id, * _uint32_to_coord(last_lon), # <<<<<<<<<<<<<< * _uint32_to_coord(last_lat) * )) */ __pyx_t_4 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_last_lon)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); /* "imposm/cache/tc.pyx":349 * last_id, * _uint32_to_coord(last_lon), * _uint32_to_coord(last_lat) # <<<<<<<<<<<<<< * )) * return nodes */ __pyx_t_1 = PyFloat_FromDouble(__pyx_f_6imposm_5cache_2tc__uint32_to_coord(__pyx_v_last_lat)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_9 = PyList_Append(__pyx_v_nodes, ((PyObject *)__pyx_t_8)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; } /* "imposm/cache/tc.pyx":351 * _uint32_to_coord(last_lat) * )) * return nodes # <<<<<<<<<<<<<< * * class DeltaNodes(object): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_nodes)); __pyx_r = ((PyObject *)__pyx_v_nodes); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("imposm.cache.tc.zip_nodes"); __pyx_r = 0; __pyx_L0:; __Pyx_DECREF(__pyx_v_nodes); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":354 * * class DeltaNodes(object): * def __init__(self, data=None): # <<<<<<<<<<<<<< * self.nodes = [] * self.changed = False */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes___init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes___init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_data = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("__init__"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; values[1] = ((PyObject *)Py_None); switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_data = values[1]; } else { __pyx_v_data = ((PyObject *)Py_None); switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); case 1: __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.__init__"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":355 * class DeltaNodes(object): * def __init__(self, data=None): * self.nodes = [] # <<<<<<<<<<<<<< * self.changed = False * if data: */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__nodes, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":356 * def __init__(self, data=None): * self.nodes = [] * self.changed = False # <<<<<<<<<<<<<< * if data: * self.deserialize(data) */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__changed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":357 * self.nodes = [] * self.changed = False * if data: # <<<<<<<<<<<<<< * self.deserialize(data) * */ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_data); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { /* "imposm/cache/tc.pyx":358 * self.changed = False * if data: * self.deserialize(data) # <<<<<<<<<<<<<< * * def changed(self): */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__deserialize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L6; } __pyx_L6:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.__init__"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":360 * self.deserialize(data) * * def changed(self): # <<<<<<<<<<<<<< * return self.changed * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_1changed(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_1changed = {__Pyx_NAMESTR("changed"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_1changed, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_1changed(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("changed"); __pyx_self = __pyx_self; /* "imposm/cache/tc.pyx":361 * * def changed(self): * return self.changed # <<<<<<<<<<<<<< * * def get(self, int64_t osmid): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__changed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.changed"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":363 * return self.changed * * def get(self, int64_t osmid): # <<<<<<<<<<<<<< * i = bisect.bisect(self.nodes, (osmid, )) * if i != len(self.nodes) and self.nodes[i][0] == osmid: */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_2get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_2get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_2get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_2get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; int64_t __pyx_v_osmid; PyObject *__pyx_v_i; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; Py_ssize_t __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__osmid,0}; __Pyx_RefNannySetupContext("get"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[1]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.get"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_i = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":364 * * def get(self, int64_t osmid): * i = bisect.bisect(self.nodes, (osmid, )) # <<<<<<<<<<<<<< * if i != len(self.nodes) and self.nodes[i][0] == osmid: * return self.nodes[i][1:] */ __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__bisect); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__bisect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_v_i); __pyx_v_i = __pyx_t_4; __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":365 * def get(self, int64_t osmid): * i = bisect.bisect(self.nodes, (osmid, )) * if i != len(self.nodes) and self.nodes[i][0] == osmid: # <<<<<<<<<<<<<< * return self.nodes[i][1:] * return None */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_i, __pyx_t_4, Py_NE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_v_i); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_4, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __pyx_t_7; } else { __pyx_t_8 = __pyx_t_6; } if (__pyx_t_8) { /* "imposm/cache/tc.pyx":366 * i = bisect.bisect(self.nodes, (osmid, )) * if i != len(self.nodes) and self.nodes[i][0] == osmid: * return self.nodes[i][1:] # <<<<<<<<<<<<<< * return None * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_GetItem(__pyx_t_2, __pyx_v_i); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PySequence_GetSlice(__pyx_t_4, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":367 * if i != len(self.nodes) and self.nodes[i][0] == osmid: * return self.nodes[i][1:] * return None # <<<<<<<<<<<<<< * * def add(self, int64_t osmid, double lon, double lat): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.get"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_i); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":369 * return None * * def add(self, int64_t osmid, double lon, double lat): # <<<<<<<<<<<<<< * # todo: overwrite * self.changed = True */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_3add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_3add = {__Pyx_NAMESTR("add"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_3add, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_3add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; int64_t __pyx_v_osmid; double __pyx_v_lon; double __pyx_v_lat; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__osmid,&__pyx_n_s__lon,&__pyx_n_s__lat,0}; __Pyx_RefNannySetupContext("add"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[4] = {0,0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat); if (likely(values[3])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "add") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[1]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lon = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lat = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lon = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely((__pyx_v_lon == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lat = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 3)); if (unlikely((__pyx_v_lat == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.add"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":371 * def add(self, int64_t osmid, double lon, double lat): * # todo: overwrite * self.changed = True # <<<<<<<<<<<<<< * if self.nodes and self.nodes[-1][0] < osmid: * self.nodes.append((osmid, lon, lat)) */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__changed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":372 * # todo: overwrite * self.changed = True * if self.nodes and self.nodes[-1][0] < osmid: # <<<<<<<<<<<<<< * self.nodes.append((osmid, lon, lat)) * else: */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, -1, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_2; } if (__pyx_t_6) { /* "imposm/cache/tc.pyx":373 * self.changed = True * if self.nodes and self.nodes[-1][0] < osmid: * self.nodes.append((osmid, lon, lat)) # <<<<<<<<<<<<<< * else: * bisect.insort(self.nodes, (osmid, lon, lat)) */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_lon); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyFloat_FromDouble(__pyx_v_lat); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Append(__pyx_t_4, ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6; } /*else*/ { /* "imposm/cache/tc.pyx":375 * self.nodes.append((osmid, lon, lat)) * else: * bisect.insort(self.nodes, (osmid, lon, lat)) # <<<<<<<<<<<<<< * * def serialize(self): */ __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__bisect); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__insort); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_lon); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_9)); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_9)); __Pyx_GIVEREF(((PyObject *)__pyx_t_9)); __pyx_t_7 = 0; __pyx_t_9 = 0; __pyx_t_9 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __pyx_L6:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.add"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":377 * bisect.insort(self.nodes, (osmid, lon, lat)) * * def serialize(self): # <<<<<<<<<<<<<< * ids, lons, lats = unzip_nodes(self.nodes) * nodes = _DeltaCoords() */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_4serialize(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_4serialize = {__Pyx_NAMESTR("serialize"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_4serialize, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_4serialize(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_ids; PyObject *__pyx_v_lons; PyObject *__pyx_v_lats; PyObject *__pyx_v_nodes; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("serialize"); __pyx_self = __pyx_self; __pyx_v_ids = Py_None; __Pyx_INCREF(Py_None); __pyx_v_lons = Py_None; __Pyx_INCREF(Py_None); __pyx_v_lats = Py_None; __Pyx_INCREF(Py_None); __pyx_v_nodes = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":378 * * def serialize(self): * ids, lons, lats = unzip_nodes(self.nodes) # <<<<<<<<<<<<<< * nodes = _DeltaCoords() * nodes.ids = ids */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__nodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __pyx_f_6imposm_5cache_2tc_unzip_nodes(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyTuple_CheckExact(__pyx_t_2) && likely(PyTuple_GET_SIZE(__pyx_t_2) == 3)) { PyObject* tuple = __pyx_t_2; __pyx_t_1 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyTuple_GET_ITEM(tuple, 2); __Pyx_INCREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_v_ids); __pyx_v_ids = __pyx_t_1; __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_lons); __pyx_v_lons = __pyx_t_3; __pyx_t_3 = 0; __Pyx_DECREF(__pyx_v_lats); __pyx_v_lats = __pyx_t_4; __pyx_t_4 = 0; } else { __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __Pyx_UnpackItem(__pyx_t_5, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_UnpackItem(__pyx_t_5, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_UnpackItem(__pyx_t_5, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (__Pyx_EndUnpack(__pyx_t_5, 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_v_ids); __pyx_v_ids = __pyx_t_1; __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_lons); __pyx_v_lons = __pyx_t_3; __pyx_t_3 = 0; __Pyx_DECREF(__pyx_v_lats); __pyx_v_lats = __pyx_t_4; __pyx_t_4 = 0; } /* "imposm/cache/tc.pyx":379 * def serialize(self): * ids, lons, lats = unzip_nodes(self.nodes) * nodes = _DeltaCoords() # <<<<<<<<<<<<<< * nodes.ids = ids * nodes.lons = lons */ __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___DeltaCoords); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_v_nodes); __pyx_v_nodes = __pyx_t_4; __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":380 * ids, lons, lats = unzip_nodes(self.nodes) * nodes = _DeltaCoords() * nodes.ids = ids # <<<<<<<<<<<<<< * nodes.lons = lons * nodes.lats = lats */ if (PyObject_SetAttr(__pyx_v_nodes, __pyx_n_s__ids, __pyx_v_ids) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "imposm/cache/tc.pyx":381 * nodes = _DeltaCoords() * nodes.ids = ids * nodes.lons = lons # <<<<<<<<<<<<<< * nodes.lats = lats * return nodes.SerializeToString() */ if (PyObject_SetAttr(__pyx_v_nodes, __pyx_n_s__lons, __pyx_v_lons) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "imposm/cache/tc.pyx":382 * nodes.ids = ids * nodes.lons = lons * nodes.lats = lats # <<<<<<<<<<<<<< * return nodes.SerializeToString() * */ if (PyObject_SetAttr(__pyx_v_nodes, __pyx_n_s__lats, __pyx_v_lats) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "imposm/cache/tc.pyx":383 * nodes.lons = lons * nodes.lats = lats * return nodes.SerializeToString() # <<<<<<<<<<<<<< * * def deserialize(self, data): */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyObject_GetAttr(__pyx_v_nodes, __pyx_n_s__SerializeToString); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.serialize"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_ids); __Pyx_DECREF(__pyx_v_lons); __Pyx_DECREF(__pyx_v_lats); __Pyx_DECREF(__pyx_v_nodes); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":385 * return nodes.SerializeToString() * * def deserialize(self, data): # <<<<<<<<<<<<<< * nodes = _DeltaCoords() * nodes.ParseFromString(data) */ static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_5deserialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_5deserialize = {__Pyx_NAMESTR("deserialize"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_5deserialize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_10DeltaNodes_5deserialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_data = 0; PyObject *__pyx_v_nodes; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__data,0}; __Pyx_RefNannySetupContext("deserialize"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("deserialize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "deserialize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_data = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("deserialize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.deserialize"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_nodes = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":386 * * def deserialize(self, data): * nodes = _DeltaCoords() # <<<<<<<<<<<<<< * nodes.ParseFromString(data) * self.nodes = zip_nodes( */ __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s___DeltaCoords); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_nodes); __pyx_v_nodes = __pyx_t_2; __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":387 * def deserialize(self, data): * nodes = _DeltaCoords() * nodes.ParseFromString(data) # <<<<<<<<<<<<<< * self.nodes = zip_nodes( * nodes.ids, nodes.lons, nodes.lats) */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_nodes, __pyx_n_s__ParseFromString); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":389 * nodes.ParseFromString(data) * self.nodes = zip_nodes( * nodes.ids, nodes.lons, nodes.lats) # <<<<<<<<<<<<<< * * class DeltaCoordsDB(object): */ __pyx_t_3 = PyObject_GetAttr(__pyx_v_nodes, __pyx_n_s__ids); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_GetAttr(__pyx_v_nodes, __pyx_n_s__lons); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyObject_GetAttr(__pyx_v_nodes, __pyx_n_s__lats); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __pyx_f_6imposm_5cache_2tc_zip_nodes(((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":388 * nodes = _DeltaCoords() * nodes.ParseFromString(data) * self.nodes = zip_nodes( # <<<<<<<<<<<<<< * nodes.ids, nodes.lons, nodes.lats) * */ if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__nodes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.DeltaNodes.deserialize"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_nodes); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":392 * * class DeltaCoordsDB(object): * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): # <<<<<<<<<<<<<< * self.db = BDB(filename, mode, estimated_records) * self.mode = mode */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB___init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB___init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_filename = 0; PyObject *__pyx_v_mode = 0; PyObject *__pyx_v_estimated_records = 0; PyObject *__pyx_v_delta_nodes_cache_size = 0; PyObject *__pyx_v_delta_nodes_size = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__filename,&__pyx_n_s__mode,&__pyx_n_s__estimated_records,&__pyx_n_s_1,&__pyx_n_s__delta_nodes_size,0}; __Pyx_RefNannySetupContext("__init__"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[6] = {0,0,0,0,0,0}; values[2] = ((PyObject *)__pyx_n_s__w); values[3] = ((PyObject *)__pyx_int_0); values[4] = ((PyObject *)__pyx_int_100); values[5] = ((PyObject *)__pyx_int_6); switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filename); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__estimated_records); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_1); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delta_nodes_size); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_filename = values[1]; __pyx_v_mode = values[2]; __pyx_v_estimated_records = values[3]; __pyx_v_delta_nodes_cache_size = values[4]; __pyx_v_delta_nodes_size = values[5]; } else { __pyx_v_mode = ((PyObject *)__pyx_n_s__w); __pyx_v_estimated_records = ((PyObject *)__pyx_int_0); __pyx_v_delta_nodes_cache_size = ((PyObject *)__pyx_int_100); __pyx_v_delta_nodes_size = ((PyObject *)__pyx_int_6); switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: __pyx_v_delta_nodes_size = PyTuple_GET_ITEM(__pyx_args, 5); case 5: __pyx_v_delta_nodes_cache_size = PyTuple_GET_ITEM(__pyx_args, 4); case 4: __pyx_v_estimated_records = PyTuple_GET_ITEM(__pyx_args, 3); case 3: __pyx_v_mode = PyTuple_GET_ITEM(__pyx_args, 2); case 2: __pyx_v_filename = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.__init__"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":393 * class DeltaCoordsDB(object): * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): * self.db = BDB(filename, mode, estimated_records) # <<<<<<<<<<<<<< * self.mode = mode * self.delta_nodes = {} */ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_v_filename); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_filename); __Pyx_GIVEREF(__pyx_v_filename); __Pyx_INCREF(__pyx_v_mode); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_mode); __Pyx_GIVEREF(__pyx_v_mode); __Pyx_INCREF(__pyx_v_estimated_records); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_estimated_records); __Pyx_GIVEREF(__pyx_v_estimated_records); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6imposm_5cache_2tc_BDB)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__db, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":394 * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): * self.db = BDB(filename, mode, estimated_records) * self.mode = mode # <<<<<<<<<<<<<< * self.delta_nodes = {} * self.delta_node_ids = deque() */ if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__mode, __pyx_v_mode) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "imposm/cache/tc.pyx":395 * self.db = BDB(filename, mode, estimated_records) * self.mode = mode * self.delta_nodes = {} # <<<<<<<<<<<<<< * self.delta_node_ids = deque() * self.delta_nodes_cache_size = delta_nodes_cache_size */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta_nodes, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":396 * self.mode = mode * self.delta_nodes = {} * self.delta_node_ids = deque() # <<<<<<<<<<<<<< * self.delta_nodes_cache_size = delta_nodes_cache_size * self.delta_nodes_size = delta_nodes_size */ __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__deque); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta_node_ids, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":397 * self.delta_nodes = {} * self.delta_node_ids = deque() * self.delta_nodes_cache_size = delta_nodes_cache_size # <<<<<<<<<<<<<< * self.delta_nodes_size = delta_nodes_size * */ if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s_1, __pyx_v_delta_nodes_cache_size) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "imposm/cache/tc.pyx":398 * self.delta_node_ids = deque() * self.delta_nodes_cache_size = delta_nodes_cache_size * self.delta_nodes_size = delta_nodes_size # <<<<<<<<<<<<<< * * def put(self, int64_t osmid, double lon, double lat): */ if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta_nodes_size, __pyx_v_delta_nodes_size) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.__init__"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":400 * self.delta_nodes_size = delta_nodes_size * * def put(self, int64_t osmid, double lon, double lat): # <<<<<<<<<<<<<< * if self.mode == 'r': * return None */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_1put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_1put = {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_1put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_1put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; int64_t __pyx_v_osmid; double __pyx_v_lon; double __pyx_v_lat; PyObject *__pyx_v_delta_id; PyObject *__pyx_v_delta_node; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__osmid,&__pyx_n_s__lon,&__pyx_n_s__lat,0}; __Pyx_RefNannySetupContext("put"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[4] = {0,0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat); if (likely(values[3])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(values[1]); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lon = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lat = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_osmid = __Pyx_PyInt_from_py_int64_t(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_osmid == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lon = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely((__pyx_v_lon == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lat = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 3)); if (unlikely((__pyx_v_lat == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_delta_id = Py_None; __Pyx_INCREF(Py_None); __pyx_v_delta_node = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":401 * * def put(self, int64_t osmid, double lon, double lat): * if self.mode == 'r': # <<<<<<<<<<<<<< * return None * delta_id = osmid >> self.delta_nodes_size */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__mode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_n_s__r), Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "imposm/cache/tc.pyx":402 * def put(self, int64_t osmid, double lon, double lat): * if self.mode == 'r': * return None # <<<<<<<<<<<<<< * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":403 * if self.mode == 'r': * return None * delta_id = osmid >> self.delta_nodes_size # <<<<<<<<<<<<<< * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) */ __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyNumber_Rshift(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_delta_id); __pyx_v_delta_id = __pyx_t_4; __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":404 * return None * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: # <<<<<<<<<<<<<< * self.fetch_delta_node(delta_id) * delta_node = self.delta_nodes[delta_id] */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = (__Pyx_NegateNonNeg(PySequence_Contains(__pyx_t_4, __pyx_v_delta_id))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "imposm/cache/tc.pyx":405 * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) # <<<<<<<<<<<<<< * delta_node = self.delta_nodes[delta_id] * delta_node.add(osmid, lon, lat) */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__fetch_delta_node); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_v_delta_id); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_delta_id); __Pyx_GIVEREF(__pyx_v_delta_id); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7; } __pyx_L7:; /* "imposm/cache/tc.pyx":406 * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) * delta_node = self.delta_nodes[delta_id] # <<<<<<<<<<<<<< * delta_node.add(osmid, lon, lat) * return True */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(__pyx_t_2, __pyx_v_delta_id); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_v_delta_node); __pyx_v_delta_node = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":407 * self.fetch_delta_node(delta_id) * delta_node = self.delta_nodes[delta_id] * delta_node.add(osmid, lon, lat) # <<<<<<<<<<<<<< * return True * */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_delta_node, __pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_osmid); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyFloat_FromDouble(__pyx_v_lon); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyFloat_FromDouble(__pyx_v_lat); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "imposm/cache/tc.pyx":408 * delta_node = self.delta_nodes[delta_id] * delta_node.add(osmid, lon, lat) * return True # <<<<<<<<<<<<<< * * put_marshaled = put */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.put"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_delta_id); __Pyx_DECREF(__pyx_v_delta_node); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":412 * put_marshaled = put * * def get(self, osmid): # <<<<<<<<<<<<<< * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_2get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_2get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_2get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_2get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_osmid = 0; PyObject *__pyx_v_delta_id; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__osmid,0}; __Pyx_RefNannySetupContext("get"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmid); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_osmid = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_osmid = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.get"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_delta_id = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":413 * * def get(self, osmid): * delta_id = osmid >> self.delta_nodes_size # <<<<<<<<<<<<<< * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Rshift(__pyx_v_osmid, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_delta_id); __pyx_v_delta_id = __pyx_t_2; __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":414 * def get(self, osmid): * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: # <<<<<<<<<<<<<< * self.fetch_delta_node(delta_id) * return self.delta_nodes[delta_id].get(osmid) */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = (__Pyx_NegateNonNeg(PySequence_Contains(__pyx_t_2, __pyx_v_delta_id))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "imposm/cache/tc.pyx":415 * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) # <<<<<<<<<<<<<< * return self.delta_nodes[delta_id].get(osmid) * */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__fetch_delta_node); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_v_delta_id); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_delta_id); __Pyx_GIVEREF(__pyx_v_delta_id); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":416 * if delta_id not in self.delta_nodes: * self.fetch_delta_node(delta_id) * return self.delta_nodes[delta_id].get(osmid) # <<<<<<<<<<<<<< * * def get_coords(self, osmids): */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_GetItem(__pyx_t_4, __pyx_v_delta_id); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_osmid); __Pyx_GIVEREF(__pyx_v_osmid); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.get"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_delta_id); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":418 * return self.delta_nodes[delta_id].get(osmid) * * def get_coords(self, osmids): # <<<<<<<<<<<<<< * coords = [] * for osmid in osmids: */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_3get_coords(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_3get_coords = {__Pyx_NAMESTR("get_coords"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_3get_coords, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_3get_coords(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_osmids = 0; PyObject *__pyx_v_coords; PyObject *__pyx_v_osmid; PyObject *__pyx_v_coord; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; int __pyx_t_7; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__osmids,0}; __Pyx_RefNannySetupContext("get_coords"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__osmids); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get_coords", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "get_coords") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_osmids = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_osmids = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_coords", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.get_coords"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_coords = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); __pyx_v_osmid = Py_None; __Pyx_INCREF(Py_None); __pyx_v_coord = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":419 * * def get_coords(self, osmids): * coords = [] # <<<<<<<<<<<<<< * for osmid in osmids: * coord = self.get(osmid) */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_v_coords)); __pyx_v_coords = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":420 * def get_coords(self, osmids): * coords = [] * for osmid in osmids: # <<<<<<<<<<<<<< * coord = self.get(osmid) * if coord is None: */ if (PyList_CheckExact(__pyx_v_osmids) || PyTuple_CheckExact(__pyx_v_osmids)) { __pyx_t_2 = 0; __pyx_t_1 = __pyx_v_osmids; __Pyx_INCREF(__pyx_t_1); } else { __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_osmids); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); } for (;;) { if (likely(PyList_CheckExact(__pyx_t_1))) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; } else if (likely(PyTuple_CheckExact(__pyx_t_1))) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; } else { __pyx_t_3 = PyIter_Next(__pyx_t_1); if (!__pyx_t_3) { if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_DECREF(__pyx_v_osmid); __pyx_v_osmid = __pyx_t_3; __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":421 * coords = [] * for osmid in osmids: * coord = self.get(osmid) # <<<<<<<<<<<<<< * if coord is None: * return */ __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_INCREF(__pyx_v_osmid); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_osmid); __Pyx_GIVEREF(__pyx_v_osmid); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_coord); __pyx_v_coord = __pyx_t_5; __pyx_t_5 = 0; /* "imposm/cache/tc.pyx":422 * for osmid in osmids: * coord = self.get(osmid) * if coord is None: # <<<<<<<<<<<<<< * return * coords.append(coord) */ __pyx_t_6 = (__pyx_v_coord == Py_None); if (__pyx_t_6) { /* "imposm/cache/tc.pyx":423 * coord = self.get(osmid) * if coord is None: * return # <<<<<<<<<<<<<< * coords.append(coord) * return coords */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L8; } __pyx_L8:; /* "imposm/cache/tc.pyx":424 * if coord is None: * return * coords.append(coord) # <<<<<<<<<<<<<< * return coords * */ if (unlikely(__pyx_v_coords == Py_None)) { PyErr_SetString(PyExc_AttributeError, "'NoneType' object has no attribute 'append'"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = PyList_Append(__pyx_v_coords, __pyx_v_coord); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":425 * return * coords.append(coord) * return coords # <<<<<<<<<<<<<< * * def close(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_coords)); __pyx_r = ((PyObject *)__pyx_v_coords); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.get_coords"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_coords); __Pyx_DECREF(__pyx_v_osmid); __Pyx_DECREF(__pyx_v_coord); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":427 * return coords * * def close(self): # <<<<<<<<<<<<<< * for node_id, node in self.delta_nodes.iteritems(): * self._put(node_id, node) */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_4close(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_4close = {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_4close, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_4close(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_node_id; PyObject *__pyx_v_node; PyObject *__pyx_r = NULL; Py_ssize_t __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("close"); __pyx_self = __pyx_self; __pyx_v_node_id = Py_None; __Pyx_INCREF(Py_None); __pyx_v_node = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":428 * * def close(self): * for node_id, node in self.delta_nodes.iteritems(): # <<<<<<<<<<<<<< * self._put(node_id, node) * self.delta_nodes = {} */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__iteritems); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_1 = 0; __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); } else { __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (likely(PyList_CheckExact(__pyx_t_3))) { if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_3)) break; __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; } else if (likely(PyTuple_CheckExact(__pyx_t_3))) { if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; } else { __pyx_t_2 = PyIter_Next(__pyx_t_3); if (!__pyx_t_2) { if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } __Pyx_GOTREF(__pyx_t_2); } if (PyTuple_CheckExact(__pyx_t_2) && likely(PyTuple_GET_SIZE(__pyx_t_2) == 2)) { PyObject* tuple = __pyx_t_2; __pyx_t_4 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_v_node_id); __pyx_v_node_id = __pyx_t_4; __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_node); __pyx_v_node = __pyx_t_5; __pyx_t_5 = 0; } else { __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_UnpackItem(__pyx_t_6, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_UnpackItem(__pyx_t_6, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (__Pyx_EndUnpack(__pyx_t_6, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_v_node_id); __pyx_v_node_id = __pyx_t_4; __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_node); __pyx_v_node = __pyx_t_5; __pyx_t_5 = 0; } /* "imposm/cache/tc.pyx":429 * def close(self): * for node_id, node in self.delta_nodes.iteritems(): * self._put(node_id, node) # <<<<<<<<<<<<<< * self.delta_nodes = {} * self.delta_node_ids = deque() */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___put); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_INCREF(__pyx_v_node_id); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_node_id); __Pyx_GIVEREF(__pyx_v_node_id); __Pyx_INCREF(__pyx_v_node); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_node); __Pyx_GIVEREF(__pyx_v_node); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":430 * for node_id, node in self.delta_nodes.iteritems(): * self._put(node_id, node) * self.delta_nodes = {} # <<<<<<<<<<<<<< * self.delta_node_ids = deque() * self.db.close() */ __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta_nodes, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":431 * self._put(node_id, node) * self.delta_nodes = {} * self.delta_node_ids = deque() # <<<<<<<<<<<<<< * self.db.close() * */ __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__deque); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__delta_node_ids, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":432 * self.delta_nodes = {} * self.delta_node_ids = deque() * self.db.close() # <<<<<<<<<<<<<< * * def _put(self, delta_id, delta_node): */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__db); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.close"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_node_id); __Pyx_DECREF(__pyx_v_node); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":434 * self.db.close() * * def _put(self, delta_id, delta_node): # <<<<<<<<<<<<<< * data = delta_node.serialize() * self.db.put_marshaled(delta_id, data) */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_5_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_5_put = {__Pyx_NAMESTR("_put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_5_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_5_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_delta_id = 0; PyObject *__pyx_v_delta_node = 0; PyObject *__pyx_v_data; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__delta_id,&__pyx_n_s__delta_node,0}; __Pyx_RefNannySetupContext("_put"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[3] = {0,0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delta_id); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_put", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delta_node); if (likely(values[2])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_put", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_delta_id = values[1]; __pyx_v_delta_node = values[2]; } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_delta_id = PyTuple_GET_ITEM(__pyx_args, 1); __pyx_v_delta_node = PyTuple_GET_ITEM(__pyx_args, 2); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_put", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB._put"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_data = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":435 * * def _put(self, delta_id, delta_node): * data = delta_node.serialize() # <<<<<<<<<<<<<< * self.db.put_marshaled(delta_id, data) * */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_delta_node, __pyx_n_s__serialize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_data); __pyx_v_data = __pyx_t_2; __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":436 * def _put(self, delta_id, delta_node): * data = delta_node.serialize() * self.db.put_marshaled(delta_id, data) # <<<<<<<<<<<<<< * * def _get(self, delta_id): */ __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__db); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__put_marshaled); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(__pyx_v_delta_id); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_delta_id); __Pyx_GIVEREF(__pyx_v_delta_id); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB._put"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_data); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":438 * self.db.put_marshaled(delta_id, data) * * def _get(self, delta_id): # <<<<<<<<<<<<<< * return DeltaNodes(data=self.db.get_raw(delta_id)) * */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_6_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_6_get = {__Pyx_NAMESTR("_get"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_6_get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_6_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_delta_id = 0; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__delta_id,0}; __Pyx_RefNannySetupContext("_get"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delta_id); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_get", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_delta_id = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_delta_id = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_get", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB._get"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; /* "imposm/cache/tc.pyx":439 * * def _get(self, delta_id): * return DeltaNodes(data=self.db.get_raw(delta_id)) # <<<<<<<<<<<<<< * * def fetch_delta_node(self, delta_id): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__DeltaNodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__db); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__get_raw); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_INCREF(__pyx_v_delta_id); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_delta_id); __Pyx_GIVEREF(__pyx_v_delta_id); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__data), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB._get"); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "imposm/cache/tc.pyx":441 * return DeltaNodes(data=self.db.get_raw(delta_id)) * * def fetch_delta_node(self, delta_id): # <<<<<<<<<<<<<< * if len(self.delta_node_ids) >= self.delta_nodes_cache_size: * rm_id = self.delta_node_ids.popleft() */ static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_7fetch_delta_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_7fetch_delta_node = {__Pyx_NAMESTR("fetch_delta_node"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_7fetch_delta_node, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pf_6imposm_5cache_2tc_13DeltaCoordsDB_7fetch_delta_node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_delta_id = 0; PyObject *__pyx_v_rm_id; PyObject *__pyx_v_rm_node; PyObject *__pyx_v_new_node; PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__delta_id,0}; __Pyx_RefNannySetupContext("fetch_delta_node"); __pyx_self = __pyx_self; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); PyObject* values[2] = {0,0}; switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; case 1: values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delta_id); if (likely(values[1])) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fetch_delta_node", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "fetch_delta_node") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_self = values[0]; __pyx_v_delta_id = values[1]; } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { __pyx_v_self = PyTuple_GET_ITEM(__pyx_args, 0); __pyx_v_delta_id = PyTuple_GET_ITEM(__pyx_args, 1); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fetch_delta_node", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.fetch_delta_node"); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_rm_id = Py_None; __Pyx_INCREF(Py_None); __pyx_v_rm_node = Py_None; __Pyx_INCREF(Py_None); __pyx_v_new_node = Py_None; __Pyx_INCREF(Py_None); /* "imposm/cache/tc.pyx":442 * * def fetch_delta_node(self, delta_id): * if len(self.delta_node_ids) >= self.delta_nodes_cache_size: # <<<<<<<<<<<<<< * rm_id = self.delta_node_ids.popleft() * rm_node = self.delta_nodes.pop(rm_id) */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_node_ids); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_GE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { /* "imposm/cache/tc.pyx":443 * def fetch_delta_node(self, delta_id): * if len(self.delta_node_ids) >= self.delta_nodes_cache_size: * rm_id = self.delta_node_ids.popleft() # <<<<<<<<<<<<<< * rm_node = self.delta_nodes.pop(rm_id) * if rm_node.changed: */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_node_ids); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__popleft); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_v_rm_id); __pyx_v_rm_id = __pyx_t_4; __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":444 * if len(self.delta_node_ids) >= self.delta_nodes_cache_size: * rm_id = self.delta_node_ids.popleft() * rm_node = self.delta_nodes.pop(rm_id) # <<<<<<<<<<<<<< * if rm_node.changed: * self._put(rm_id, rm_node) */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__pop); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_INCREF(__pyx_v_rm_id); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_rm_id); __Pyx_GIVEREF(__pyx_v_rm_id); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_rm_node); __pyx_v_rm_node = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":445 * rm_id = self.delta_node_ids.popleft() * rm_node = self.delta_nodes.pop(rm_id) * if rm_node.changed: # <<<<<<<<<<<<<< * self._put(rm_id, rm_node) * new_node = self._get(delta_id) */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_rm_node, __pyx_n_s__changed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* "imposm/cache/tc.pyx":446 * rm_node = self.delta_nodes.pop(rm_id) * if rm_node.changed: * self._put(rm_id, rm_node) # <<<<<<<<<<<<<< * new_node = self._get(delta_id) * if new_node is None: */ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___put); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_INCREF(__pyx_v_rm_id); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_rm_id); __Pyx_GIVEREF(__pyx_v_rm_id); __Pyx_INCREF(__pyx_v_rm_node); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_rm_node); __Pyx_GIVEREF(__pyx_v_rm_node); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L7; } __pyx_L7:; goto __pyx_L6; } __pyx_L6:; /* "imposm/cache/tc.pyx":447 * if rm_node.changed: * self._put(rm_id, rm_node) * new_node = self._get(delta_id) # <<<<<<<<<<<<<< * if new_node is None: * new_node = DeltaNodes() */ __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___get); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_INCREF(__pyx_v_delta_id); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_delta_id); __Pyx_GIVEREF(__pyx_v_delta_id); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_new_node); __pyx_v_new_node = __pyx_t_1; __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":448 * self._put(rm_id, rm_node) * new_node = self._get(delta_id) * if new_node is None: # <<<<<<<<<<<<<< * new_node = DeltaNodes() * self.delta_nodes[delta_id] = new_node */ __pyx_t_5 = (__pyx_v_new_node == Py_None); if (__pyx_t_5) { /* "imposm/cache/tc.pyx":449 * new_node = self._get(delta_id) * if new_node is None: * new_node = DeltaNodes() # <<<<<<<<<<<<<< * self.delta_nodes[delta_id] = new_node * self.delta_node_ids.append(delta_id) */ __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__DeltaNodes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_new_node); __pyx_v_new_node = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L8; } __pyx_L8:; /* "imposm/cache/tc.pyx":450 * if new_node is None: * new_node = DeltaNodes() * self.delta_nodes[delta_id] = new_node # <<<<<<<<<<<<<< * self.delta_node_ids.append(delta_id) * */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_nodes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_4, __pyx_v_delta_id, __pyx_v_new_node) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "imposm/cache/tc.pyx":451 * new_node = DeltaNodes() * self.delta_nodes[delta_id] = new_node * self.delta_node_ids.append(delta_id) # <<<<<<<<<<<<<< * */ __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__delta_node_ids); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_v_delta_id); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("imposm.cache.tc.DeltaCoordsDB.fetch_delta_node"); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF(__pyx_v_rm_id); __Pyx_DECREF(__pyx_v_rm_node); __Pyx_DECREF(__pyx_v_new_node); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB __pyx_vtable_6imposm_5cache_2tc_BDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_BDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_BDB *p; PyObject *o = (*t->tp_alloc)(t, 0); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_BDB *)o); p->__pyx_vtab = __pyx_vtabptr_6imposm_5cache_2tc_BDB; p->filename = Py_None; Py_INCREF(Py_None); if (__pyx_pf_6imposm_5cache_2tc_3BDB___cinit__(o, a, k) < 0) { Py_DECREF(o); o = 0; } return o; } static void __pyx_tp_dealloc_6imposm_5cache_2tc_BDB(PyObject *o) { struct __pyx_obj_6imposm_5cache_2tc_BDB *p = (struct __pyx_obj_6imposm_5cache_2tc_BDB *)o; { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_pf_6imposm_5cache_2tc_3BDB_12__dealloc__(o); if (PyErr_Occurred()) PyErr_WriteUnraisable(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } Py_XDECREF(p->filename); (*Py_TYPE(o)->tp_free)(o); } static int __pyx_tp_traverse_6imposm_5cache_2tc_BDB(PyObject *o, visitproc v, void *a) { int e; struct __pyx_obj_6imposm_5cache_2tc_BDB *p = (struct __pyx_obj_6imposm_5cache_2tc_BDB *)o; if (p->filename) { e = (*v)(p->filename, a); if (e) return e; } return 0; } static int __pyx_tp_clear_6imposm_5cache_2tc_BDB(PyObject *o) { struct __pyx_obj_6imposm_5cache_2tc_BDB *p = (struct __pyx_obj_6imposm_5cache_2tc_BDB *)o; PyObject* tmp; tmp = ((PyObject*)p->filename); p->filename = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); return 0; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_BDB[] = { {__Pyx_NAMESTR("_tune_db"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_2_tune_db, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_3get, METH_O, __Pyx_DOCSTR(__pyx_doc_6imposm_5cache_2tc_3BDB_3get)}, {__Pyx_NAMESTR("get_raw"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_4get_raw, METH_O, __Pyx_DOCSTR(__pyx_doc_6imposm_5cache_2tc_3BDB_4get_raw)}, {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_5put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("put_marshaled"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_6put_marshaled, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_10__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(__pyx_doc_6imposm_5cache_2tc_3BDB_10__next__)}, {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_3BDB_11close, METH_NOARGS, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_BDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_BDB = { __pyx_pf_6imposm_5cache_2tc_3BDB_9__len__, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ __pyx_pf_6imposm_5cache_2tc_3BDB_8__contains__, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_BDB = { __pyx_pf_6imposm_5cache_2tc_3BDB_9__len__, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_BDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_BDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.BDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_BDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_BDB, /*tp_as_number*/ &__pyx_tp_as_sequence_BDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_BDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_BDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ __pyx_pf_6imposm_5cache_2tc_3BDB_7__iter__, /*tp_iter*/ __pyx_pf_6imposm_5cache_2tc_3BDB_10__next__, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_BDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ __pyx_pf_6imposm_5cache_2tc_3BDB_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_BDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_CoordDB __pyx_vtable_6imposm_5cache_2tc_CoordDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_CoordDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_CoordDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_CoordDB *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_CoordDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_CoordDB[] = { {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_7CoordDB_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("put_marshaled"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_7CoordDB_1put_marshaled, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_7CoordDB_2get, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get_coords"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_7CoordDB_3get_coords, METH_O, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_CoordDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_CoordDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_CoordDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_CoordDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_CoordDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.CoordDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_CoordDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_CoordDB, /*tp_as_number*/ &__pyx_tp_as_sequence_CoordDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_CoordDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_CoordDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_CoordDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_CoordDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_NodeDB __pyx_vtable_6imposm_5cache_2tc_NodeDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_NodeDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_NodeDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_NodeDB *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_NodeDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_NodeDB[] = { {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_6NodeDB_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("put_marshaled"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_6NodeDB_1put_marshaled, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_NodeDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_NodeDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_NodeDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_NodeDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_NodeDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.NodeDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_NodeDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_NodeDB, /*tp_as_number*/ &__pyx_tp_as_sequence_NodeDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_NodeDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_NodeDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_NodeDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_NodeDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_InsertedWayDB __pyx_vtable_6imposm_5cache_2tc_InsertedWayDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_InsertedWayDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_InsertedWayDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_InsertedWayDB[] = { {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_put, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_1__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(__pyx_doc_6imposm_5cache_2tc_13InsertedWayDB_1__next__)}, {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_InsertedWayDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_InsertedWayDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_InsertedWayDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_InsertedWayDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_InsertedWayDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.InsertedWayDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_InsertedWayDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_InsertedWayDB, /*tp_as_number*/ &__pyx_tp_as_sequence_InsertedWayDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_InsertedWayDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_InsertedWayDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ __pyx_pf_6imposm_5cache_2tc_13InsertedWayDB_1__next__, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_InsertedWayDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_InsertedWayDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_RefTagDB __pyx_vtable_6imposm_5cache_2tc_RefTagDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_RefTagDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_RefTagDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_RefTagDB *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_RefTagDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_RefTagDB[] = { {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_8RefTagDB_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("put_marshaled"), (PyCFunction)__pyx_pf_6imposm_5cache_2tc_8RefTagDB_1put_marshaled, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_RefTagDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_RefTagDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_RefTagDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_RefTagDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_RefTagDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.RefTagDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_RefTagDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_RefTagDB, /*tp_as_number*/ &__pyx_tp_as_sequence_RefTagDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_RefTagDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_RefTagDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ __Pyx_DOCSTR("\n Database for items with references and tags (i.e. ways/relations).\n "), /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_RefTagDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_RefTagDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_WayDB __pyx_vtable_6imposm_5cache_2tc_WayDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_WayDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_WayDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_WayDB *)o); p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_WayDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_WayDB[] = { {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_WayDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_WayDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_WayDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_WayDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_WayDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.WayDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_WayDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_WayDB, /*tp_as_number*/ &__pyx_tp_as_sequence_WayDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_WayDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_WayDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_WayDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_WayDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static struct __pyx_vtabstruct_6imposm_5cache_2tc_RelationDB __pyx_vtable_6imposm_5cache_2tc_RelationDB; static PyObject *__pyx_tp_new_6imposm_5cache_2tc_RelationDB(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_obj_6imposm_5cache_2tc_RelationDB *p; PyObject *o = __pyx_tp_new_6imposm_5cache_2tc_BDB(t, a, k); if (!o) return 0; p = ((struct __pyx_obj_6imposm_5cache_2tc_RelationDB *)o); p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_6imposm_5cache_2tc_BDB*)__pyx_vtabptr_6imposm_5cache_2tc_RelationDB; return o; } static PyMethodDef __pyx_methods_6imposm_5cache_2tc_RelationDB[] = { {0, 0, 0, 0} }; static PyNumberMethods __pyx_tp_as_number_RelationDB = { 0, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_divide*/ #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ 0, /*nb_negative*/ 0, /*nb_positive*/ 0, /*nb_absolute*/ 0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_MAJOR_VERSION < 3 0, /*nb_coerce*/ #endif 0, /*nb_int*/ #if PY_MAJOR_VERSION < 3 0, /*nb_long*/ #else 0, /*reserved*/ #endif 0, /*nb_float*/ #if PY_MAJOR_VERSION < 3 0, /*nb_oct*/ #endif #if PY_MAJOR_VERSION < 3 0, /*nb_hex*/ #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ #if PY_MAJOR_VERSION < 3 0, /*nb_inplace_divide*/ #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ 0, /*nb_inplace_rshift*/ 0, /*nb_inplace_and*/ 0, /*nb_inplace_xor*/ 0, /*nb_inplace_or*/ 0, /*nb_floor_divide*/ 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ #if PY_VERSION_HEX >= 0x02050000 0, /*nb_index*/ #endif }; static PySequenceMethods __pyx_tp_as_sequence_RelationDB = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_RelationDB = { 0, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_RelationDB = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_getbuffer*/ #endif #if PY_VERSION_HEX >= 0x02060000 0, /*bf_releasebuffer*/ #endif }; static PyTypeObject __pyx_type_6imposm_5cache_2tc_RelationDB = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("imposm.cache.tc.RelationDB"), /*tp_name*/ sizeof(struct __pyx_obj_6imposm_5cache_2tc_RelationDB), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6imposm_5cache_2tc_BDB, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif 0, /*tp_repr*/ &__pyx_tp_as_number_RelationDB, /*tp_as_number*/ &__pyx_tp_as_sequence_RelationDB, /*tp_as_sequence*/ &__pyx_tp_as_mapping_RelationDB, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_RelationDB, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_6imposm_5cache_2tc_BDB, /*tp_traverse*/ __pyx_tp_clear_6imposm_5cache_2tc_BDB, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_6imposm_5cache_2tc_RelationDB, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_6imposm_5cache_2tc_RelationDB, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif }; static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { PyModuleDef_HEAD_INIT, __Pyx_NAMESTR("tc"), 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 1}, {&__pyx_n_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 1}, {&__pyx_n_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 1}, {&__pyx_n_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 1}, {&__pyx_n_s__DeltaCoords, __pyx_k__DeltaCoords, sizeof(__pyx_k__DeltaCoords), 0, 0, 1, 1}, {&__pyx_n_s__DeltaCoordsDB, __pyx_k__DeltaCoordsDB, sizeof(__pyx_k__DeltaCoordsDB), 0, 0, 1, 1}, {&__pyx_n_s__DeltaNodes, __pyx_k__DeltaNodes, sizeof(__pyx_k__DeltaNodes), 0, 0, 1, 1}, {&__pyx_n_s__IOError, __pyx_k__IOError, sizeof(__pyx_k__IOError), 0, 0, 1, 1}, {&__pyx_n_s__Node, __pyx_k__Node, sizeof(__pyx_k__Node), 0, 0, 1, 1}, {&__pyx_n_s__ParseFromString, __pyx_k__ParseFromString, sizeof(__pyx_k__ParseFromString), 0, 0, 1, 1}, {&__pyx_n_s__Relation, __pyx_k__Relation, sizeof(__pyx_k__Relation), 0, 0, 1, 1}, {&__pyx_n_s__SerializeToString, __pyx_k__SerializeToString, sizeof(__pyx_k__SerializeToString), 0, 0, 1, 1}, {&__pyx_n_s__StopIteration, __pyx_k__StopIteration, sizeof(__pyx_k__StopIteration), 0, 0, 1, 1}, {&__pyx_n_s__Way, __pyx_k__Way, sizeof(__pyx_k__Way), 0, 0, 1, 1}, {&__pyx_n_s___DeltaCoords, __pyx_k___DeltaCoords, sizeof(__pyx_k___DeltaCoords), 0, 0, 1, 1}, {&__pyx_n_s____init__, __pyx_k____init__, sizeof(__pyx_k____init__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s___cur, __pyx_k___cur, sizeof(__pyx_k___cur), 0, 0, 1, 1}, {&__pyx_n_s___get, __pyx_k___get, sizeof(__pyx_k___get), 0, 0, 1, 1}, {&__pyx_n_s___get_cur, __pyx_k___get_cur, sizeof(__pyx_k___get_cur), 0, 0, 1, 1}, {&__pyx_n_s___modes, __pyx_k___modes, sizeof(__pyx_k___modes), 0, 0, 1, 1}, {&__pyx_n_s___obj, __pyx_k___obj, sizeof(__pyx_k___obj), 0, 0, 1, 1}, {&__pyx_n_s___opened, __pyx_k___opened, sizeof(__pyx_k___opened), 0, 0, 1, 1}, {&__pyx_n_s___put, __pyx_k___put, sizeof(__pyx_k___put), 0, 0, 1, 1}, {&__pyx_n_s___tune_db, __pyx_k___tune_db, sizeof(__pyx_k___tune_db), 0, 0, 1, 1}, {&__pyx_n_s__add, __pyx_k__add, sizeof(__pyx_k__add), 0, 0, 1, 1}, {&__pyx_n_s__append, __pyx_k__append, sizeof(__pyx_k__append), 0, 0, 1, 1}, {&__pyx_n_s__bisect, __pyx_k__bisect, sizeof(__pyx_k__bisect), 0, 0, 1, 1}, {&__pyx_n_s__changed, __pyx_k__changed, sizeof(__pyx_k__changed), 0, 0, 1, 1}, {&__pyx_n_s__close, __pyx_k__close, sizeof(__pyx_k__close), 0, 0, 1, 1}, {&__pyx_n_s__collections, __pyx_k__collections, sizeof(__pyx_k__collections), 0, 0, 1, 1}, {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, {&__pyx_n_s__db, __pyx_k__db, sizeof(__pyx_k__db), 0, 0, 1, 1}, {&__pyx_n_s__delta_id, __pyx_k__delta_id, sizeof(__pyx_k__delta_id), 0, 0, 1, 1}, {&__pyx_n_s__delta_node, __pyx_k__delta_node, sizeof(__pyx_k__delta_node), 0, 0, 1, 1}, {&__pyx_n_s__delta_node_ids, __pyx_k__delta_node_ids, sizeof(__pyx_k__delta_node_ids), 0, 0, 1, 1}, {&__pyx_n_s__delta_nodes, __pyx_k__delta_nodes, sizeof(__pyx_k__delta_nodes), 0, 0, 1, 1}, {&__pyx_n_s__delta_nodes_size, __pyx_k__delta_nodes_size, sizeof(__pyx_k__delta_nodes_size), 0, 0, 1, 1}, {&__pyx_n_s__deque, __pyx_k__deque, sizeof(__pyx_k__deque), 0, 0, 1, 1}, {&__pyx_n_s__deserialize, __pyx_k__deserialize, sizeof(__pyx_k__deserialize), 0, 0, 1, 1}, {&__pyx_n_s__estimated_records, __pyx_k__estimated_records, sizeof(__pyx_k__estimated_records), 0, 0, 1, 1}, {&__pyx_n_s__fetch_delta_node, __pyx_k__fetch_delta_node, sizeof(__pyx_k__fetch_delta_node), 0, 0, 1, 1}, {&__pyx_n_s__filename, __pyx_k__filename, sizeof(__pyx_k__filename), 0, 0, 1, 1}, {&__pyx_n_s__get, __pyx_k__get, sizeof(__pyx_k__get), 0, 0, 1, 1}, {&__pyx_n_s__get_coords, __pyx_k__get_coords, sizeof(__pyx_k__get_coords), 0, 0, 1, 1}, {&__pyx_n_s__get_raw, __pyx_k__get_raw, sizeof(__pyx_k__get_raw), 0, 0, 1, 1}, {&__pyx_n_s__ids, __pyx_k__ids, sizeof(__pyx_k__ids), 0, 0, 1, 1}, {&__pyx_n_s__insort, __pyx_k__insort, sizeof(__pyx_k__insort), 0, 0, 1, 1}, {&__pyx_n_s__iteritems, __pyx_k__iteritems, sizeof(__pyx_k__iteritems), 0, 0, 1, 1}, {&__pyx_n_s__lat, __pyx_k__lat, sizeof(__pyx_k__lat), 0, 0, 1, 1}, {&__pyx_n_s__lats, __pyx_k__lats, sizeof(__pyx_k__lats), 0, 0, 1, 1}, {&__pyx_n_s__lon, __pyx_k__lon, sizeof(__pyx_k__lon), 0, 0, 1, 1}, {&__pyx_n_s__lons, __pyx_k__lons, sizeof(__pyx_k__lons), 0, 0, 1, 1}, {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1}, {&__pyx_n_s__nodes, __pyx_k__nodes, sizeof(__pyx_k__nodes), 0, 0, 1, 1}, {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1}, {&__pyx_n_s__osmid, __pyx_k__osmid, sizeof(__pyx_k__osmid), 0, 0, 1, 1}, {&__pyx_n_s__osmids, __pyx_k__osmids, sizeof(__pyx_k__osmids), 0, 0, 1, 1}, {&__pyx_n_s__pop, __pyx_k__pop, sizeof(__pyx_k__pop), 0, 0, 1, 1}, {&__pyx_n_s__popleft, __pyx_k__popleft, sizeof(__pyx_k__popleft), 0, 0, 1, 1}, {&__pyx_n_s__pos, __pyx_k__pos, sizeof(__pyx_k__pos), 0, 0, 1, 1}, {&__pyx_n_s__put, __pyx_k__put, sizeof(__pyx_k__put), 0, 0, 1, 1}, {&__pyx_n_s__put_marshaled, __pyx_k__put_marshaled, sizeof(__pyx_k__put_marshaled), 0, 0, 1, 1}, {&__pyx_n_s__r, __pyx_k__r, sizeof(__pyx_k__r), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__refs, __pyx_k__refs, sizeof(__pyx_k__refs), 0, 0, 1, 1}, {&__pyx_n_s__self, __pyx_k__self, sizeof(__pyx_k__self), 0, 0, 1, 1}, {&__pyx_n_s__serialize, __pyx_k__serialize, sizeof(__pyx_k__serialize), 0, 0, 1, 1}, {&__pyx_n_s__tags, __pyx_k__tags, sizeof(__pyx_k__tags), 0, 0, 1, 1}, {&__pyx_n_s__w, __pyx_k__w, sizeof(__pyx_k__w), 0, 0, 1, 1}, {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1}, {&__pyx_n_s__y, __pyx_k__y, sizeof(__pyx_k__y), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_object = __Pyx_GetName(__pyx_b, __pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_IOError = __Pyx_GetName(__pyx_b, __pyx_n_s__IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_StopIteration = __Pyx_GetName(__pyx_b, __pyx_n_s__StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); __Pyx_RefNannyFinishContext(); return 0; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_100 = PyInt_FromLong(100); if (unlikely(!__pyx_int_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_128 = PyInt_FromLong(128); if (unlikely(!__pyx_int_128)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC inittc(void); /*proto*/ PyMODINIT_FUNC inittc(void) #else PyMODINIT_FUNC PyInit_tc(void); /*proto*/ PyMODINIT_FUNC PyInit_tc(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; #if CYTHON_REFNANNY void* __pyx_refnanny = NULL; __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit_tc(void)", __LINE__, __FILE__); #endif __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __pyx_binding_PyCFunctionType_USED if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("tc"), __pyx_methods, 0, 0, PYTHON_API_VERSION); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; #if PY_MAJOR_VERSION < 3 Py_INCREF(__pyx_m); #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_module_is_main_imposm__cache__tc) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ __pyx_vtabptr_6imposm_5cache_2tc_BDB = &__pyx_vtable_6imposm_5cache_2tc_BDB; __pyx_vtable_6imposm_5cache_2tc_BDB._obj = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *))__pyx_f_6imposm_5cache_2tc_3BDB__obj; __pyx_vtable_6imposm_5cache_2tc_BDB._get_cur = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *))__pyx_f_6imposm_5cache_2tc_3BDB__get_cur; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_BDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} { PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_6imposm_5cache_2tc_BDB, "__iter__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_7__iter__ = *((PyWrapperDescrObject *)wrapper)->d_base; __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_7__iter__.doc = __pyx_doc_6imposm_5cache_2tc_3BDB_7__iter__; ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6imposm_5cache_2tc_3BDB_7__iter__; } } { PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_6imposm_5cache_2tc_BDB, "__next__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_10__next__ = *((PyWrapperDescrObject *)wrapper)->d_base; __pyx_wrapperbase_6imposm_5cache_2tc_3BDB_10__next__.doc = __pyx_doc_6imposm_5cache_2tc_3BDB_10__next__; ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6imposm_5cache_2tc_3BDB_10__next__; } } if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_BDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_BDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "BDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_BDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_BDB = &__pyx_type_6imposm_5cache_2tc_BDB; __pyx_vtabptr_6imposm_5cache_2tc_CoordDB = &__pyx_vtable_6imposm_5cache_2tc_CoordDB; __pyx_vtable_6imposm_5cache_2tc_CoordDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_BDB; __pyx_vtable_6imposm_5cache_2tc_CoordDB.__pyx_base._obj = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *))__pyx_f_6imposm_5cache_2tc_7CoordDB__obj; __pyx_vtable_6imposm_5cache_2tc_CoordDB.__pyx_base._get_cur = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *))__pyx_f_6imposm_5cache_2tc_7CoordDB__get_cur; __pyx_vtable_6imposm_5cache_2tc_CoordDB._put = (int (*)(struct __pyx_obj_6imposm_5cache_2tc_CoordDB *, int64_t, double, double))__pyx_f_6imposm_5cache_2tc_7CoordDB__put; __pyx_type_6imposm_5cache_2tc_CoordDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_BDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_CoordDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_CoordDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_CoordDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "CoordDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_CoordDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_CoordDB = &__pyx_type_6imposm_5cache_2tc_CoordDB; __pyx_vtabptr_6imposm_5cache_2tc_NodeDB = &__pyx_vtable_6imposm_5cache_2tc_NodeDB; __pyx_vtable_6imposm_5cache_2tc_NodeDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_BDB; __pyx_vtable_6imposm_5cache_2tc_NodeDB.__pyx_base._obj = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *))__pyx_f_6imposm_5cache_2tc_6NodeDB__obj; __pyx_type_6imposm_5cache_2tc_NodeDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_BDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_NodeDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_NodeDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_NodeDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "NodeDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_NodeDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_NodeDB = &__pyx_type_6imposm_5cache_2tc_NodeDB; __pyx_vtabptr_6imposm_5cache_2tc_InsertedWayDB = &__pyx_vtable_6imposm_5cache_2tc_InsertedWayDB; __pyx_vtable_6imposm_5cache_2tc_InsertedWayDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_BDB; __pyx_type_6imposm_5cache_2tc_InsertedWayDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_BDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_InsertedWayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} { PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_6imposm_5cache_2tc_InsertedWayDB, "__next__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { __pyx_wrapperbase_6imposm_5cache_2tc_13InsertedWayDB_1__next__ = *((PyWrapperDescrObject *)wrapper)->d_base; __pyx_wrapperbase_6imposm_5cache_2tc_13InsertedWayDB_1__next__.doc = __pyx_doc_6imposm_5cache_2tc_13InsertedWayDB_1__next__; ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6imposm_5cache_2tc_13InsertedWayDB_1__next__; } } if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_InsertedWayDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_InsertedWayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "InsertedWayDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_InsertedWayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_InsertedWayDB = &__pyx_type_6imposm_5cache_2tc_InsertedWayDB; __pyx_vtabptr_6imposm_5cache_2tc_RefTagDB = &__pyx_vtable_6imposm_5cache_2tc_RefTagDB; __pyx_vtable_6imposm_5cache_2tc_RefTagDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_BDB; __pyx_type_6imposm_5cache_2tc_RefTagDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_BDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_RefTagDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_RefTagDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_RefTagDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "RefTagDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_RefTagDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_RefTagDB = &__pyx_type_6imposm_5cache_2tc_RefTagDB; __pyx_vtabptr_6imposm_5cache_2tc_WayDB = &__pyx_vtable_6imposm_5cache_2tc_WayDB; __pyx_vtable_6imposm_5cache_2tc_WayDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_RefTagDB; __pyx_vtable_6imposm_5cache_2tc_WayDB.__pyx_base.__pyx_base._obj = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *))__pyx_f_6imposm_5cache_2tc_5WayDB__obj; __pyx_type_6imposm_5cache_2tc_WayDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_RefTagDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_WayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_WayDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_WayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "WayDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_WayDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_WayDB = &__pyx_type_6imposm_5cache_2tc_WayDB; __pyx_vtabptr_6imposm_5cache_2tc_RelationDB = &__pyx_vtable_6imposm_5cache_2tc_RelationDB; __pyx_vtable_6imposm_5cache_2tc_RelationDB.__pyx_base = *__pyx_vtabptr_6imposm_5cache_2tc_RefTagDB; __pyx_vtable_6imposm_5cache_2tc_RelationDB.__pyx_base.__pyx_base._obj = (PyObject *(*)(struct __pyx_obj_6imposm_5cache_2tc_BDB *, int64_t, PyObject *))__pyx_f_6imposm_5cache_2tc_10RelationDB__obj; __pyx_type_6imposm_5cache_2tc_RelationDB.tp_base = __pyx_ptype_6imposm_5cache_2tc_RefTagDB; if (PyType_Ready(&__pyx_type_6imposm_5cache_2tc_RelationDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetVtable(__pyx_type_6imposm_5cache_2tc_RelationDB.tp_dict, __pyx_vtabptr_6imposm_5cache_2tc_RelationDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_SetAttrString(__pyx_m, "RelationDB", (PyObject *)&__pyx_type_6imposm_5cache_2tc_RelationDB) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6imposm_5cache_2tc_RelationDB = &__pyx_type_6imposm_5cache_2tc_RelationDB; /*--- Type import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "imposm/cache/tc.pyx":1 * from imposm.base import Node, Way, Relation # <<<<<<<<<<<<<< * from libc.stdint cimport uint32_t, int64_t * */ __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(((PyObject *)__pyx_n_s__Node)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__Node)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Node)); __Pyx_INCREF(((PyObject *)__pyx_n_s__Way)); PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__Way)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Way)); __Pyx_INCREF(((PyObject *)__pyx_n_s__Relation)); PyList_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_n_s__Relation)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Relation)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Node); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Node, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Way); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Way, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Relation); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Relation, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":85 * return p * * _modes = { # <<<<<<<<<<<<<< * 'w': BDBOWRITER | BDBOCREAT, * 'r': BDBOREADER | BDBONOLCK, */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "imposm/cache/tc.pyx":86 * * _modes = { * 'w': BDBOWRITER | BDBOCREAT, # <<<<<<<<<<<<<< * 'r': BDBOREADER | BDBONOLCK, * } */ __pyx_t_1 = PyInt_FromLong((BDBOWRITER | BDBOCREAT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__w), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":87 * _modes = { * 'w': BDBOWRITER | BDBOCREAT, * 'r': BDBOREADER | BDBONOLCK, # <<<<<<<<<<<<<< * } * */ __pyx_t_1 = PyInt_FromLong((BDBOREADER | BDBONOLCK)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__r), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyObject_SetAttr(__pyx_m, __pyx_n_s___modes, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":312 * return Relation(osmid, data[0], data[1]) * * from imposm.cache.internal import DeltaCoords as _DeltaCoords # <<<<<<<<<<<<<< * from collections import deque * import bisect */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((PyObject *)__pyx_n_s__DeltaCoords)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__DeltaCoords)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__DeltaCoords)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__DeltaCoords); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetAttr(__pyx_m, __pyx_n_s___DeltaCoords, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":313 * * from imposm.cache.internal import DeltaCoords as _DeltaCoords * from collections import deque # <<<<<<<<<<<<<< * import bisect * */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(((PyObject *)__pyx_n_s__deque)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__deque)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__deque)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__collections), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__deque); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__deque, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":314 * from imposm.cache.internal import DeltaCoords as _DeltaCoords * from collections import deque * import bisect # <<<<<<<<<<<<<< * * cdef unzip_nodes(list nodes): */ __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__bisect), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bisect, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":353 * return nodes * * class DeltaNodes(object): # <<<<<<<<<<<<<< * def __init__(self, data=None): * self.nodes = [] */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "imposm/cache/tc.pyx":354 * * class DeltaNodes(object): * def __init__(self, data=None): # <<<<<<<<<<<<<< * self.nodes = [] * self.changed = False */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes___init__, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":360 * self.deserialize(data) * * def changed(self): # <<<<<<<<<<<<<< * return self.changed * */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_1changed, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__changed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":363 * return self.changed * * def get(self, int64_t osmid): # <<<<<<<<<<<<<< * i = bisect.bisect(self.nodes, (osmid, )) * if i != len(self.nodes) and self.nodes[i][0] == osmid: */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_2get, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__get, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":369 * return None * * def add(self, int64_t osmid, double lon, double lat): # <<<<<<<<<<<<<< * # todo: overwrite * self.changed = True */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_3add, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__add, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":377 * bisect.insort(self.nodes, (osmid, lon, lat)) * * def serialize(self): # <<<<<<<<<<<<<< * ids, lons, lats = unzip_nodes(self.nodes) * nodes = _DeltaCoords() */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_4serialize, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__serialize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":385 * return nodes.SerializeToString() * * def deserialize(self, data): # <<<<<<<<<<<<<< * nodes = _DeltaCoords() * nodes.ParseFromString(data) */ __pyx_t_1 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_10DeltaNodes_5deserialize, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__deserialize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "imposm/cache/tc.pyx":353 * return nodes * * class DeltaNodes(object): # <<<<<<<<<<<<<< * def __init__(self, data=None): * self.nodes = [] */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__DeltaNodes, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DeltaNodes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":391 * nodes.ids, nodes.lons, nodes.lats) * * class DeltaCoordsDB(object): # <<<<<<<<<<<<<< * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): * self.db = BDB(filename, mode, estimated_records) */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "imposm/cache/tc.pyx":392 * * class DeltaCoordsDB(object): * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): # <<<<<<<<<<<<<< * self.db = BDB(filename, mode, estimated_records) * self.mode = mode */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB___init__, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":400 * self.delta_nodes_size = delta_nodes_size * * def put(self, int64_t osmid, double lon, double lat): # <<<<<<<<<<<<<< * if self.mode == 'r': * return None */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_1put, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__put, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":410 * return True * * put_marshaled = put # <<<<<<<<<<<<<< * * def get(self, osmid): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s__put); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__put_marshaled, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":412 * put_marshaled = put * * def get(self, osmid): # <<<<<<<<<<<<<< * delta_id = osmid >> self.delta_nodes_size * if delta_id not in self.delta_nodes: */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_2get, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__get, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":418 * return self.delta_nodes[delta_id].get(osmid) * * def get_coords(self, osmids): # <<<<<<<<<<<<<< * coords = [] * for osmid in osmids: */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_3get_coords, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__get_coords, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":427 * return coords * * def close(self): # <<<<<<<<<<<<<< * for node_id, node in self.delta_nodes.iteritems(): * self._put(node_id, node) */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_4close, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__close, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":434 * self.db.close() * * def _put(self, delta_id, delta_node): # <<<<<<<<<<<<<< * data = delta_node.serialize() * self.db.put_marshaled(delta_id, data) */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_5_put, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___put, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":438 * self.db.put_marshaled(delta_id, data) * * def _get(self, delta_id): # <<<<<<<<<<<<<< * return DeltaNodes(data=self.db.get_raw(delta_id)) * */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_6_get, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":441 * return DeltaNodes(data=self.db.get_raw(delta_id)) * * def fetch_delta_node(self, delta_id): # <<<<<<<<<<<<<< * if len(self.delta_node_ids) >= self.delta_nodes_cache_size: * rm_id = self.delta_node_ids.popleft() */ __pyx_t_3 = __pyx_binding_PyCFunctionType_NewEx(&__pyx_mdef_6imposm_5cache_2tc_13DeltaCoordsDB_7fetch_delta_node, NULL, __pyx_n_s_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__fetch_delta_node, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "imposm/cache/tc.pyx":391 * nodes.ids, nodes.lons, nodes.lats) * * class DeltaCoordsDB(object): # <<<<<<<<<<<<<< * def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): * self.db = BDB(filename, mode, estimated_records) */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__DeltaCoordsDB, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DeltaCoordsDB, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "imposm/cache/tc.pyx":1 * from imposm.base import Node, Way, Relation # <<<<<<<<<<<<<< * from libc.stdint cimport uint32_t, int64_t * */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); if (__pyx_m) { __Pyx_AddTraceback("init imposm.cache.tc"); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init imposm.cache.tc"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { PyObject *result; result = PyObject_GetAttr(dict, name); if (!result) PyErr_SetObject(PyExc_NameError, name); return result; } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AS_STRING(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; } else { #if PY_MAJOR_VERSION < 3 if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { #else if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { #endif goto invalid_keyword_type; } else { for (name = first_kw_arg; *name; name++) { #if PY_MAJOR_VERSION >= 3 if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && PyUnicode_Compare(**name, key) == 0) break; #else if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && _PyString_Eq(**name, key)) break; #endif } if (*name) { values[name-argnames] = value; } else { /* unexpected keyword found */ for (name=argnames; name != first_kw_arg; name++) { if (**name == key) goto arg_passed_twice; #if PY_MAJOR_VERSION >= 3 if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; #else if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && _PyString_Eq(**name, key)) goto arg_passed_twice; #endif } if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } } } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, **name); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *number, *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } number = (num_expected == 1) ? "" : "s"; PyErr_Format(PyExc_TypeError, #if PY_VERSION_HEX < 0x02050000 "%s() takes %s %d positional argument%s (%d given)", #else "%s() takes %s %zd positional argument%s (%zd given)", #endif func_name, more_or_less, num_expected, number, num_found); } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { Py_XINCREF(type); Py_XINCREF(value); Py_XINCREF(tb); /* First, check the traceback argument, replacing None with NULL. */ if (tb == Py_None) { Py_DECREF(tb); tb = 0; } else if (tb != NULL && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } /* Next, replace a missing value with None */ if (value == NULL) { value = Py_None; Py_INCREF(value); } #if PY_VERSION_HEX < 0x02050000 if (!PyClass_Check(type)) #else if (!PyType_Check(type)) #endif { /* Raising an instance. The value should be a dummy. */ if (value != Py_None) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } /* Normalize to raise , */ Py_DECREF(value); value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (!PyExceptionClass_Check(type)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: return; } #endif static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, #if PY_VERSION_HEX < 0x02050000 "need more than %d value%s to unpack", (int)index, #else "need more than %zd value%s to unpack", index, #endif (index == 1) ? "" : "s"); } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, #if PY_VERSION_HEX < 0x02050000 "too many values to unpack (expected %d)", (int)expected); #else "too many values to unpack (expected %zd)", expected); #endif } static PyObject *__Pyx_UnpackItem(PyObject *iter, Py_ssize_t index) { PyObject *item; if (!(item = PyIter_Next(iter))) { if (!PyErr_Occurred()) { __Pyx_RaiseNeedMoreValuesError(index); } } return item; } static int __Pyx_EndUnpack(PyObject *iter, Py_ssize_t expected) { PyObject *item; if ((item = PyIter_Next(iter))) { Py_DECREF(item); __Pyx_RaiseTooManyValuesError(expected); return -1; } else if (!PyErr_Occurred()) return 0; else return -1; } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { PyObject *py_import = 0; PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); if (!py_import) goto bad; if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); bad: Py_XDECREF(empty_list); Py_XDECREF(py_import); Py_XDECREF(empty_dict); return module; } static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) { PyObject *metaclass; /* Default metaclass */ #if PY_MAJOR_VERSION < 3 if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = PyObject_GetAttrString(base, "__class__"); if (!metaclass) { PyErr_Clear(); metaclass = (PyObject*) Py_TYPE(base); } } else { metaclass = (PyObject *) &PyClass_Type; } #else if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = (PyObject*) Py_TYPE(base); } else { metaclass = (PyObject *) &PyType_Type; } #endif Py_INCREF(metaclass); return metaclass; } static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *modname) { PyObject *result; PyObject *metaclass; if (PyDict_SetItemString(dict, "__module__", modname) < 0) return NULL; /* Python2 __metaclass__ */ metaclass = PyDict_GetItemString(dict, "__metaclass__"); if (metaclass) { Py_INCREF(metaclass); } else { metaclass = __Pyx_FindPy2Metaclass(bases); } result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); Py_DECREF(metaclass); return result; } static PyObject *__pyx_binding_PyCFunctionType_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module) { __pyx_binding_PyCFunctionType_object *op = PyObject_GC_New(__pyx_binding_PyCFunctionType_object, __pyx_binding_PyCFunctionType); if (op == NULL) return NULL; op->func.m_ml = ml; Py_XINCREF(self); op->func.m_self = self; Py_XINCREF(module); op->func.m_module = module; PyObject_GC_Track(op); return (PyObject *)op; } static void __pyx_binding_PyCFunctionType_dealloc(__pyx_binding_PyCFunctionType_object *m) { PyObject_GC_UnTrack(m); Py_XDECREF(m->func.m_self); Py_XDECREF(m->func.m_module); PyObject_GC_Del(m); } static PyObject *__pyx_binding_PyCFunctionType_descr_get(PyObject *func, PyObject *obj, PyObject *type) { if (obj == Py_None) obj = NULL; return PyMethod_New(func, obj, type); } static int __pyx_binding_PyCFunctionType_init(void) { __pyx_binding_PyCFunctionType_type = PyCFunction_Type; __pyx_binding_PyCFunctionType_type.tp_name = __Pyx_NAMESTR("cython_binding_builtin_function_or_method"); __pyx_binding_PyCFunctionType_type.tp_dealloc = (destructor)__pyx_binding_PyCFunctionType_dealloc; __pyx_binding_PyCFunctionType_type.tp_descr_get = __pyx_binding_PyCFunctionType_descr_get; if (PyType_Ready(&__pyx_binding_PyCFunctionType_type) < 0) { return -1; } __pyx_binding_PyCFunctionType = &__pyx_binding_PyCFunctionType_type; return 0; } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t val) { const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(int64_t) == sizeof(char)) || (sizeof(int64_t) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(int64_t) == sizeof(int)) || (sizeof(int64_t) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(int64_t), little, !is_unsigned); } } static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject* x) { const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0; const int is_unsigned = const_zero < neg_one; if (sizeof(int64_t) == sizeof(char)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedChar(x); else return (int64_t)__Pyx_PyInt_AsSignedChar(x); } else if (sizeof(int64_t) == sizeof(short)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedShort(x); else return (int64_t)__Pyx_PyInt_AsSignedShort(x); } else if (sizeof(int64_t) == sizeof(int)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedInt(x); else return (int64_t)__Pyx_PyInt_AsSignedInt(x); } else if (sizeof(int64_t) == sizeof(long)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedLong(x); else return (int64_t)__Pyx_PyInt_AsSignedLong(x); } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedLongLong(x); else return (int64_t)__Pyx_PyInt_AsSignedLongLong(x); } else { int64_t val; PyObject *v = __Pyx_PyNumber_Int(x); #if PY_VERSION_HEX < 0x03000000 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } return (int64_t)-1; } } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint32_t(uint32_t val) { const uint32_t neg_one = (uint32_t)-1, const_zero = (uint32_t)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(uint32_t) == sizeof(char)) || (sizeof(uint32_t) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(uint32_t) == sizeof(int)) || (sizeof(uint32_t) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(uint32_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(uint32_t), little, !is_unsigned); } } static CYTHON_INLINE uint32_t __Pyx_PyInt_from_py_uint32_t(PyObject* x) { const uint32_t neg_one = (uint32_t)-1, const_zero = (uint32_t)0; const int is_unsigned = const_zero < neg_one; if (sizeof(uint32_t) == sizeof(char)) { if (is_unsigned) return (uint32_t)__Pyx_PyInt_AsUnsignedChar(x); else return (uint32_t)__Pyx_PyInt_AsSignedChar(x); } else if (sizeof(uint32_t) == sizeof(short)) { if (is_unsigned) return (uint32_t)__Pyx_PyInt_AsUnsignedShort(x); else return (uint32_t)__Pyx_PyInt_AsSignedShort(x); } else if (sizeof(uint32_t) == sizeof(int)) { if (is_unsigned) return (uint32_t)__Pyx_PyInt_AsUnsignedInt(x); else return (uint32_t)__Pyx_PyInt_AsSignedInt(x); } else if (sizeof(uint32_t) == sizeof(long)) { if (is_unsigned) return (uint32_t)__Pyx_PyInt_AsUnsignedLong(x); else return (uint32_t)__Pyx_PyInt_AsSignedLong(x); } else if (sizeof(uint32_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return (uint32_t)__Pyx_PyInt_AsUnsignedLongLong(x); else return (uint32_t)__Pyx_PyInt_AsSignedLongLong(x); } else { uint32_t val; PyObject *v = __Pyx_PyNumber_Int(x); #if PY_VERSION_HEX < 0x03000000 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } return (uint32_t)-1; } } static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return PyLong_AsUnsignedLong(x); } else { return PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return PyLong_AsUnsignedLongLong(x); } else { return PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return PyLong_AsUnsignedLong(x); } else { return PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return PyLong_AsUnsignedLongLong(x); } else { return PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return PyLong_AsUnsignedLong(x); } else { return PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_VERSION_HEX < 0x03000000 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return PyLong_AsUnsignedLongLong(x); } else { return PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_SetVtable(PyObject *dict, void *vtable) { #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) PyObject *ob = PyCapsule_New(vtable, 0, 0); #else PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); #endif if (!ob) goto bad; if (PyDict_SetItemString(dict, "__pyx_vtable__", ob) < 0) goto bad; Py_DECREF(ob); return 0; bad: Py_XDECREF(ob); return -1; } #include "compile.h" #include "frameobject.h" #include "traceback.h" static void __Pyx_AddTraceback(const char *funcname) { PyObject *py_srcfile = 0; PyObject *py_funcname = 0; PyObject *py_globals = 0; PyCodeObject *py_code = 0; PyFrameObject *py_frame = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(__pyx_filename); #else py_srcfile = PyUnicode_FromString(__pyx_filename); #endif if (!py_srcfile) goto bad; if (__pyx_clineno) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_code = PyCode_New( 0, /*int argcount,*/ #if PY_MAJOR_VERSION >= 3 0, /*int kwonlyargcount,*/ #endif 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ __pyx_lineno, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); if (!py_code) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = __pyx_lineno; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } /* Type Conversion Functions */ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_VERSION_HEX < 0x03000000 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_VERSION_HEX < 0x03000000 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_VERSION_HEX < 0x03000000 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { return (size_t)-1; } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ imposm-2.5.0/imposm/cache/tc.pyx0000644000076500000240000003351111766043214016471 0ustar oltstaff00000000000000from imposm.base import Node, Way, Relation from libc.stdint cimport uint32_t, int64_t cdef extern from "Python.h": object PyString_FromStringAndSize(char *s, Py_ssize_t len) cdef extern from "marshal.h": object PyMarshal_ReadObjectFromString(char *string, Py_ssize_t len) object PyMarshal_WriteObjectToString(object value, int version) cdef extern from "tcutil.h": ctypedef int TCCMP() cdef int tccmpint32() cdef int tccmpint64() cdef extern from "tcbdb.h": ctypedef enum: BDBFOPEN BDBFFATAL ctypedef enum: BDBOREADER = 1 << 0 # /* open as a reader */ BDBOWRITER = 1 << 1 # /* open as a writer */ BDBOCREAT = 1 << 2 # /* writer creating */ BDBOTRUNC = 1 << 3 # /* writer truncating */ BDBONOLCK = 1 << 4 # /* open without locking */ BDBOLCKNB = 1 << 5 # /* lock without blocking */ BDBOTSYNC = 1 << 6 # /* synchronize every transaction */ ctypedef enum: BDBTLARGE = 1 << 0, # /* use 64-bit bucket array */ BDBTDEFLATE = 1 << 1 # /* compress each page with Deflate */ BDBTBZIP = 1 << 2, # /* compress each record with BZIP2 */ BDBTTCBS = 1 << 3, # /* compress each page with TCBS */ BDBTEXCODEC = 1 << 4 # /* compress each record with outer functions */ ctypedef void TCBDB ctypedef void BDBCUR TCBDB *tcbdbnew() void tcbdbdel(TCBDB *) int tcbdbecode(TCBDB *) bint tcbdbtune(TCBDB *db, int lmemb, int nmemb, int bnum, int apow, int fpow, int opts) bint tcbdbsetcache(TCBDB *bdb, int lcnum, int ncnum) bint tcbdbsetcmpfunc(TCBDB *bdb, TCCMP cmp, void *cmpop) bint tcbdbsetmutex(TCBDB *bdb) bint tcbdbopen(TCBDB *, char *, int) bint tcbdbclose(TCBDB *) nogil bint tcbdbput(TCBDB *, void *, int, void *, int) nogil void *tcbdbget(TCBDB *, void *, int, int *) nogil void *tcbdbget3(TCBDB *bdb, void *kbuf, int ksiz, int *sp) nogil long tcbdbrnum(TCBDB *bdb) BDBCUR *tcbdbcurnew(TCBDB *bdb) void tcbdbcurdel(BDBCUR *cur) bint tcbdbcurfirst(BDBCUR *cur) bint tcbdbcurnext(BDBCUR *cur) void *tcbdbcurkey3(BDBCUR *cur, int *sp) void *tcbdbcurval3(BDBCUR *cur, int *sp) DEF COORD_FACTOR = 11930464.7083 # ((2<<31)-1)/360.0 cdef uint32_t _coord_to_uint32(double x) nogil: return ((x + 180.0) * COORD_FACTOR) cdef double _uint32_to_coord(uint32_t x) nogil: return ((x / COORD_FACTOR) - 180.0) ctypedef struct coord: uint32_t x uint32_t y cdef inline coord coord_struct(double x, double y) nogil: cdef coord p p.x = _coord_to_uint32(x) p.y = _coord_to_uint32(y) return p _modes = { 'w': BDBOWRITER | BDBOCREAT, 'r': BDBOREADER | BDBONOLCK, } cdef class BDB: cdef TCBDB *db cdef object filename cdef int _opened cdef BDBCUR *_cur def __cinit__(self, filename, mode='w', estimated_records=0): self.db = tcbdbnew() self._opened = 0 def __init__(self, filename, mode='w', estimated_records=0): self.filename = filename self._tune_db(estimated_records) tcbdbsetcmpfunc(self.db, tccmpint64, NULL) if not tcbdbopen(self.db, filename, _modes[mode]): raise IOError(tcbdbecode(self.db)) self._opened = 1 def _tune_db(self, estimated_records): if estimated_records: lmemb = 128 # default nmemb = -1 fpow = 13 # 2^13 = 8196 bnum = int((estimated_records*3)/lmemb) tcbdbtune(self.db, lmemb, nmemb, bnum, 5, fpow, BDBTLARGE | BDBTDEFLATE) else: tcbdbtune(self.db, -1, -1, -1, 5, 13, BDBTLARGE | BDBTDEFLATE) def get(self, int64_t osmid): """ Return object with given id. Returns None if id is not stored. """ cdef void *ret cdef int ret_size ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) if not ret: return None return self._obj(osmid, PyMarshal_ReadObjectFromString(ret, ret_size)) def get_raw(self, int64_t osmid): """ Return object with given id. Returns None if id is not stored. """ cdef void *ret cdef int ret_size ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) if not ret: return None return PyString_FromStringAndSize(ret, ret_size) def put(self, int64_t osmid, data): return self.put_marshaled(osmid, PyMarshal_WriteObjectToString(data, 2)) def put_marshaled(self, int64_t osmid, data): return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) cdef object _obj(self, int64_t osmid, data): """ Create an object from the id and unmarshaled data. Should be overridden by subclasses. """ return data def __iter__(self): """ Return an iterator over the database. Resets any existing iterator. """ if self._cur: tcbdbcurdel(self._cur) self._cur = tcbdbcurnew(self.db) if not tcbdbcurfirst(self._cur): return iter([]) return self def __contains__(self, int64_t osmid): cdef void *ret cdef int ret_size ret = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size); if ret: return 1 else: return 0 def __len__(self): return tcbdbrnum(self.db) def __next__(self): """ Return next item as object. """ cdef int64_t osmid if not self._cur: raise StopIteration osmid, data = self._get_cur() # advance cursor, set to NULL if at the end if tcbdbcurnext(self._cur) == 0: tcbdbcurdel(self._cur) self._cur = NULL # return objectified item return self._obj(osmid, data) cdef object _get_cur(self): """ Return the current object at the current cursor position as a tuple of the id and the unmarshaled data. """ cdef int size cdef void *ret ret = tcbdbcurkey3(self._cur, &size) osmid = (ret)[0] ret = tcbdbcurval3(self._cur, &size) value = PyMarshal_ReadObjectFromString(ret, size) return osmid, value def close(self): if self._opened: tcbdbclose(self.db) self._opened = 0 def __dealloc__(self): if self._opened: tcbdbclose(self.db) tcbdbdel(self.db) cdef class CoordDB(BDB): def put(self, osmid, x, y): return self._put(osmid, x, y) def put_marshaled(self, osmid, x, y): return self._put(osmid, x, y) cdef bint _put(self, int64_t osmid, double x, double y) nogil: cdef coord p = coord_struct(x, y) return tcbdbput(self.db, &osmid, sizeof(int64_t), &p, sizeof(coord)) def get(self, int64_t osmid): cdef coord *value cdef int ret_size value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) if not value: return return _uint32_to_coord(value.x), _uint32_to_coord(value.y) def get_coords(self, refs): cdef coord *value cdef int ret_size cdef int64_t osmid coords = list() for osmid in refs: value = tcbdbget3(self.db, &osmid, sizeof(int64_t), &ret_size) if not value: return coords.append((_uint32_to_coord(value.x), _uint32_to_coord(value.y))) return coords cdef object _get_cur(self): cdef int size cdef int64_t osmid cdef void *ret cdef coord *value ret = tcbdbcurkey3(self._cur, &size) osmid = (ret)[0] value = tcbdbcurval3(self._cur, &size) return osmid, (_uint32_to_coord(value.x), _uint32_to_coord(value.y)) cdef object _obj(self, int64_t osmid, data): return osmid, data cdef class NodeDB(BDB): def put(self, osmid, tags, pos): return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, pos), 2)) def put_marshaled(self, int64_t osmid, data): return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) cdef object _obj(self, int64_t osmid, data): return Node(osmid, data[0], data[1]) cdef class InsertedWayDB(BDB): def put(self, int64_t osmid): return tcbdbput(self.db, &osmid, sizeof(int64_t), 'x', 1); def __next__(self): """ Return next item as object. """ cdef int64_t osmid cdef int size cdef void *ret if not self._cur: raise StopIteration ret = tcbdbcurkey3(self._cur, &size) osmid = (ret)[0] # advance cursor, set to NULL if at the end if tcbdbcurnext(self._cur) == 0: tcbdbcurdel(self._cur) self._cur = NULL return osmid cdef class RefTagDB(BDB): """ Database for items with references and tags (i.e. ways/relations). """ def put(self, osmid, tags, refs): return self.put_marshaled(osmid, PyMarshal_WriteObjectToString((tags, refs), 2)) def put_marshaled(self, int64_t osmid, data): return tcbdbput(self.db, &osmid, sizeof(int64_t), data, len(data)) cdef class WayDB(RefTagDB): cdef object _obj(self, int64_t osmid, data): return Way(osmid, data[0], data[1]) cdef class RelationDB(RefTagDB): cdef object _obj(self, int64_t osmid, data): return Relation(osmid, data[0], data[1]) from imposm.cache.internal import DeltaCoords as _DeltaCoords from collections import deque import bisect cdef unzip_nodes(list nodes): cdef int64_t last_lon, last_lat, lon, lat cdef double lon_f, lat_f cdef int64_t last_id, id ids, lons, lats = [], [], [] last_id = last_lon = last_lat = 0 for id, lon_f, lat_f in nodes: lon = _coord_to_uint32(lon_f) lat = _coord_to_uint32(lat_f) ids.append(id - last_id) lons.append(lon - last_lon) lats.append(lat - last_lat) last_id = id last_lon = lon last_lat = lat return ids, lons, lats cdef zip_nodes(tuple ids, tuple lons, tuple lats): cdef uint32_t last_lon, last_lat cdef int64_t last_id nodes = [] last_id = last_lon = last_lat = 0 for i in range(len(ids)): last_id += ids[i] last_lon += lons[i] last_lat += lats[i] nodes.append(( last_id, _uint32_to_coord(last_lon), _uint32_to_coord(last_lat) )) return nodes class DeltaNodes(object): def __init__(self, data=None): self.nodes = [] self.changed = False if data: self.deserialize(data) def changed(self): return self.changed def get(self, int64_t osmid): i = bisect.bisect(self.nodes, (osmid, )) if i != len(self.nodes) and self.nodes[i][0] == osmid: return self.nodes[i][1:] return None def add(self, int64_t osmid, double lon, double lat): # todo: overwrite self.changed = True if self.nodes and self.nodes[-1][0] < osmid: self.nodes.append((osmid, lon, lat)) else: bisect.insort(self.nodes, (osmid, lon, lat)) def serialize(self): ids, lons, lats = unzip_nodes(self.nodes) nodes = _DeltaCoords() nodes.ids = ids nodes.lons = lons nodes.lats = lats return nodes.SerializeToString() def deserialize(self, data): nodes = _DeltaCoords() nodes.ParseFromString(data) self.nodes = zip_nodes( nodes.ids, nodes.lons, nodes.lats) class DeltaCoordsDB(object): def __init__(self, filename, mode='w', estimated_records=0, delta_nodes_cache_size=100, delta_nodes_size=6): self.db = BDB(filename, mode, estimated_records) self.mode = mode self.delta_nodes = {} self.delta_node_ids = deque() self.delta_nodes_cache_size = delta_nodes_cache_size self.delta_nodes_size = delta_nodes_size def put(self, int64_t osmid, double lon, double lat): if self.mode == 'r': return None delta_id = osmid >> self.delta_nodes_size if delta_id not in self.delta_nodes: self.fetch_delta_node(delta_id) delta_node = self.delta_nodes[delta_id] delta_node.add(osmid, lon, lat) return True put_marshaled = put def get(self, osmid): delta_id = osmid >> self.delta_nodes_size if delta_id not in self.delta_nodes: self.fetch_delta_node(delta_id) return self.delta_nodes[delta_id].get(osmid) def get_coords(self, osmids): coords = [] for osmid in osmids: coord = self.get(osmid) if coord is None: return coords.append(coord) return coords def close(self): for node_id, node in self.delta_nodes.iteritems(): self._put(node_id, node) self.delta_nodes = {} self.delta_node_ids = deque() self.db.close() def _put(self, delta_id, delta_node): data = delta_node.serialize() self.db.put_marshaled(delta_id, data) def _get(self, delta_id): return DeltaNodes(data=self.db.get_raw(delta_id)) def fetch_delta_node(self, delta_id): if len(self.delta_node_ids) >= self.delta_nodes_cache_size: rm_id = self.delta_node_ids.popleft() rm_node = self.delta_nodes.pop(rm_id) if rm_node.changed: self._put(rm_id, rm_node) new_node = self._get(delta_id) if new_node is None: new_node = DeltaNodes() self.delta_nodes[delta_id] = new_node self.delta_node_ids.append(delta_id) imposm-2.5.0/imposm/config.py0000644000076500000240000000251411766043214016074 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import relations with missing rings import_partial_relations = False # select relation builder: union or contains relation_builder = 'contains' # log relation that take longer than x seconds imposm_multipolygon_report = 60 # skip relations with more rings (0 skip nothing) imposm_multipolygon_max_ring = 0 # split ways that are longer than x nodes (0 to split nothing) imposm_linestring_max_length = 0 # create a SERIAL PRIMARY KEY column (id) for all Postgres tables # solves cases where osm_id is not unique (e.g. tram and road share the # same way and are combined in a union view) imposm_pg_serial_id = True # cache coords in a compact storage (with delta encoding) # use this when memory is limited (default) imposm_compact_coords_cache = Trueimposm-2.5.0/imposm/db/0000755000076500000240000000000012060141076014631 5ustar oltstaff00000000000000imposm-2.5.0/imposm/db/__init__.py0000644000076500000240000000000011766043214016737 0ustar oltstaff00000000000000imposm-2.5.0/imposm/db/config.py0000644000076500000240000000444711777042346016477 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import cgi import urllib from . postgis import PostGISDB from .. mapping import Options def DB(db_conf): if db_conf.get('name', 'postgis') == 'postgis': # default and backwards compat return PostGISDB(db_conf) raise ValueError('unknown db: %s' % (db_conf.name,)) def db_conf_from_string(conf, base_db_conf): db_conf = _parse_rfc1738_args(conf) if 'proj' not in db_conf: db_conf.proj = base_db_conf.proj if 'prefix' not in db_conf: db_conf.prefix = base_db_conf.prefix return db_conf def _parse_rfc1738_args(name): # from SQLAlchemy lib/sqlalchemy/engine/url.py # MIT licensed pattern = re.compile(r''' (?P\w+):// (?: (?P[^:/]*) (?::(?P[^/]*))? @)? (?: (?P[^/:]*) (?::(?P[^/]*))? )? (?:/(?P.*))? ''' , re.X) m = pattern.match(name) if m is not None: components = m.groupdict() if components['db'] is not None: tokens = components['db'].split('?', 2) components['db'] = tokens[0] query = (len(tokens) > 1 and dict(cgi.parse_qsl(tokens[1]))) or None if query is not None: query = dict((k.encode('ascii'), query[k]) for k in query) else: query = None components['query'] = query if components['password'] is not None: components['password'] = urllib.unquote_plus(components['password']) return Options(**components) else: raise ValueError( "Could not parse rfc1738 URL from string '%s'" % name) imposm-2.5.0/imposm/db/postgis.py0000644000076500000240000005014512060136174016703 0ustar oltstaff00000000000000# Copyright 2011-2012 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import time import uuid from contextlib import contextmanager import psycopg2 import psycopg2.extensions import logging log = logging.getLogger(__name__) from imposm import config from imposm.mapping import UnionView, GeneralizedTable, Mapping unknown = object() class PostGISDB(object): insert_data_format = 'tuple' def __init__(self, db_conf, use_geometry_columns_table=unknown): self.db_conf = db_conf self.srid = int(db_conf['proj'].split(':')[1]) self._insert_stmts = {} self._connection = None self._cur = None if use_geometry_columns_table is unknown: if self.is_postgis_2(): use_geometry_columns_table = False else: use_geometry_columns_table = True self.use_geometry_columns_table = use_geometry_columns_table @property def table_prefix(self): return self.db_conf.prefix.rstrip('_') + '_' def to_tablename(self, name): return self.table_prefix + name.lower() def is_postgis_2(self): cur = self.connection.cursor() cur.execute('SELECT postgis_version()') version_string = cur.fetchone()[0] return version_string.strip()[0] == '2' @property def connection(self): if not self._connection: kw = {} if self.db_conf.port: kw['port'] = int(self.db_conf.port) self._connection = psycopg2.connect( database=self.db_conf.db, host=self.db_conf.host, user=self.db_conf.user, password=self.db_conf.password, sslmode=self.db_conf.get('sslmode', 'allow'), **kw ) self._connection.set_isolation_level( psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED) return self._connection def commit(self): self.connection.commit() @property def cur(self): if self._cur is None: self._cur = self.connection.cursor() return self._cur @contextmanager def savepoint(self, cur, raise_errors=False): savepoint_name = 'savepoint' + uuid.uuid4().get_hex() try: cur.execute('SAVEPOINT %s' % savepoint_name) yield except psycopg2.ProgrammingError: cur.execute('ROLLBACK TO SAVEPOINT %s' % savepoint_name) if raise_errors: raise def insert(self, mapping, insert_data, tries=0): insert_stmt = self.insert_stmt(mapping) try: if tries: self.reconnect() self.cur.executemany(insert_stmt, insert_data) except psycopg2.OperationalError, ex: if tries >= 8: log.warn('%s, giving up', ex) raise seconds = 2 ** (tries + 1) log.warn('%s, retry in %d', ex, seconds) time.sleep(seconds) self.insert(mapping, insert_data, tries=tries + 1) except psycopg2.Error, ex: self.connection.rollback() for data in insert_data: try: self.cur.execute(insert_stmt, data) except psycopg2.Error, ex: log.warn('error while importing "%r": %s', data, ex) self.connection.rollback() else: self.connection.commit() self.connection.commit() def post_insert(self, mappings): mappings = [m for m in mappings.values() if isinstance(m, (GeneralizedTable, Mapping))] for mapping in mappings: table_name = self.to_tablename(mapping.name) self.create_geom_index(table_name) def create_geom_index(self, table_name): idx_name = '%s_geom' % table_name cur = self.connection.cursor() cur.execute(""" CREATE INDEX "%s" ON "%s" USING GIST (geometry) """ % (idx_name,table_name)) self.connection.commit() def geom_wrapper(self, geom): return psycopg2.Binary(geom.wkb) def reconnect(self): if self._connection: try: self._connection.close() except psycopg2.InterfaceError: pass self._connection = None self._cur = None def insert_stmt(self, mapping): if mapping.name not in self._insert_stmts: self._insert_stmts[mapping.name] = self._insert_stmt(mapping) return self._insert_stmts[mapping.name] def _insert_stmt(self, mapping): extra_arg_names = extra_args = '' if mapping.fields: extra_arg_names = [n for n, t in mapping.fields] extra_args = ', %s' * len(extra_arg_names) extra_arg_names = ', ' + ', '.join('"' + name + '"' for name in extra_arg_names) return """INSERT INTO "%(tablename)s" (osm_id, geometry %(extra_arg_names)s) VALUES (%%s, ST_Transform(ST_GeomFromWKB(%%s, 4326), %(srid)s) %(extra_args)s) """.strip() % dict(tablename=self.table_prefix + mapping.name, srid=self.srid, extra_arg_names=extra_arg_names, extra_args=extra_args) def create_tables(self, mappings): for mapping in mappings: self.create_table(mapping) def drop_table_or_view(self, cur, name): with self.savepoint(cur): cur.execute('DROP TABLE "' + name + '" CASCADE') with self.savepoint(cur): cur.execute('DROP VIEW "' + name + '" CASCADE') def create_table(self, mapping): tablename = self.table_prefix + mapping.name cur = self.connection.cursor() self.drop_table_or_view(cur, tablename) extra_fields = '' for n, t in mapping.fields: extra_fields += ', "%s" %s ' % (n, t.column_type) if config.imposm_pg_serial_id: serial_column = "id SERIAL PRIMARY KEY," else: serial_column = "" cur.execute(""" CREATE TABLE "%s" ( %s osm_id BIGINT %s ); """ % (tablename, serial_column, extra_fields)) self.create_geometry_column(cur, tablename, mapping) self.create_field_indices(cur=cur, mapping=mapping, tablename=tablename) def create_geometry_column(self, cur, tablename, mapping): if self.use_geometry_columns_table: cur.execute(""" SELECT AddGeometryColumn ('', '%(tablename)s', 'geometry', %(srid)s, '%(pg_geometry_type)s', 2) """ % dict(tablename=tablename, srid=self.srid, pg_geometry_type=mapping.geom_type)) else: cur.execute(""" ALTER TABLE %(tablename)s ADD COLUMN geometry geometry(%(pg_geometry_type)s, %(srid)s); """ % dict(tablename=tablename, srid=self.srid, pg_geometry_type=mapping.geom_type)) def create_field_indices(self, cur, mapping, tablename): for n, t in mapping.fields: if isinstance(t, TrigramIndex): cur.execute(""" CREATE INDEX "%(tablename)s_trgm_idx_%(column)s" ON "%(tablename)s" USING GIST ("%(column)s" gist_trgm_ops) """ % dict(tablename=tablename, column=n)) if isinstance(t, (StringIndex, Index)): cur.execute(""" CREATE INDEX "%(tablename)s_idx_%(column)s" ON "%(tablename)s" ("%(column)s") """ % dict(tablename=tablename, column=n)) def swap_tables(self, new_prefix, existing_prefix, backup_prefix): cur = self.connection.cursor() self.remove_tables(backup_prefix) self.remove_views(backup_prefix) cur.execute('SELECT tablename FROM pg_tables WHERE tablename like %s', (existing_prefix + '%', )) existing_tables = [] for row in cur: table_name = row[0] if table_name.startswith(existing_prefix) and not table_name.startswith((new_prefix, backup_prefix)): # check for overlapping prefixes: osm_ but not osm_new_ or osm_backup_ existing_tables.append(table_name) cur.execute('SELECT viewname FROM pg_views WHERE viewname like %s', (existing_prefix + '%', )) existing_views = [] for row in cur: view_name = row[0] if view_name.startswith(existing_prefix) and not view_name.startswith((new_prefix, backup_prefix)): # check for overlapping prefixes: osm_ but not osm_new_ or osm_backup_ existing_views.append(view_name) cur.execute('SELECT indexname FROM pg_indexes WHERE indexname like %s', (existing_prefix + '%', )) existing_indexes = set() for row in cur: index_name = row[0] if index_name.startswith(existing_prefix) and not index_name.startswith((new_prefix, backup_prefix)): # check for overlapping prefixes: osm_ but not osm_new_ or osm_backup_ existing_indexes.add(index_name) cur.execute('SELECT relname FROM pg_class WHERE relname like %s', (existing_prefix + '%_id_seq', )) existing_seq = set() for row in cur: seq_name = row[0] if seq_name.startswith(existing_prefix) and not seq_name.startswith((new_prefix, backup_prefix)): # check for overlapping prefixes: osm_ but not osm_new_ or osm_backup_ existing_seq.add(seq_name) cur.execute('SELECT tablename FROM pg_tables WHERE tablename like %s', (new_prefix + '%', )) new_tables = [] for row in cur: table_name = row[0] new_tables.append(table_name) cur.execute('SELECT viewname FROM pg_views WHERE viewname like %s', (new_prefix + '%', )) new_views = [] for row in cur: view_name = row[0] new_views.append(view_name) cur.execute('SELECT indexname FROM pg_indexes WHERE indexname like %s', (new_prefix + '%', )) new_indexes = set() for row in cur: index_name = row[0] new_indexes.add(index_name) cur.execute('SELECT relname FROM pg_class WHERE relname like %s', (new_prefix + '%_id_seq', )) new_seq = [] for row in cur: seq_name = row[0] new_seq.append(seq_name) if not new_tables: raise RuntimeError('did not found tables to swap') # rename existing tables (osm_) to backup_prefix (osm_backup_) for table_name in existing_tables: rename_to = table_name.replace(existing_prefix, backup_prefix) cur.execute('ALTER TABLE "%s" RENAME TO "%s"' % (table_name, rename_to)) for idx in existing_indexes: if idx in (table_name + '_geom', table_name + '_pkey') or idx.startswith(table_name + '_trgm_idx_') or idx.startswith(table_name + '_idx_'): new_idx = idx.replace(table_name, rename_to, 1) cur.execute('ALTER INDEX "%s" RENAME TO "%s"' % (idx, new_idx)) if table_name + '_id_seq' in existing_seq: cur.execute('ALTER SEQUENCE "%s" RENAME TO "%s"' % (table_name + '_id_seq', rename_to + '_id_seq')) if self.use_geometry_columns_table: cur.execute('UPDATE geometry_columns SET f_table_name = %s WHERE f_table_name = %s', (rename_to, table_name)) # rename existing views (osm_) to backup_prefix (osm_backup_) for view_name in existing_views: rename_to = view_name.replace(existing_prefix, backup_prefix) cur.execute('ALTER VIEW "%s" RENAME TO "%s"' % (view_name, rename_to)) if self.use_geometry_columns_table: cur.execute('UPDATE geometry_columns SET f_table_name = %s WHERE f_table_name = %s', (rename_to, view_name)) # rename new tables (osm_new_) to existing_prefix (osm_) for table_name in new_tables: rename_to = table_name.replace(new_prefix, existing_prefix) cur.execute('ALTER TABLE "%s" RENAME TO "%s"' % (table_name, rename_to)) for idx in new_indexes: if idx in (table_name + '_geom', table_name + '_pkey') or idx.startswith(table_name + '_trgm_idx_') or idx.startswith(table_name + '_idx_'): new_idx = idx.replace(table_name, rename_to, 1) cur.execute('ALTER INDEX "%s" RENAME TO "%s"' % (idx, new_idx)) if table_name + '_id_seq' in new_seq: cur.execute('ALTER SEQUENCE "%s" RENAME TO "%s"' % (table_name + '_id_seq', rename_to + '_id_seq')) if self.use_geometry_columns_table: cur.execute('UPDATE geometry_columns SET f_table_name = %s WHERE f_table_name = %s', (rename_to, table_name)) # rename new views (osm_new_) to existing_prefix (osm_) for view_name in new_views: rename_to = view_name.replace(new_prefix, existing_prefix) cur.execute('ALTER VIEW "%s" RENAME TO "%s"' % (view_name, rename_to)) if self.use_geometry_columns_table: cur.execute('UPDATE geometry_columns SET f_table_name = %s WHERE f_table_name = %s', (rename_to, view_name)) def remove_tables(self, prefix): cur = self.connection.cursor() cur.execute('SELECT tablename FROM pg_tables WHERE tablename like %s', (prefix + '%', )) remove_tables = [row[0] for row in cur] for table_name in remove_tables: cur.execute("DROP TABLE %s CASCADE" % (table_name, )) if self.use_geometry_columns_table: cur.execute("DELETE FROM geometry_columns WHERE f_table_name = %s", (table_name, )) def remove_views(self, prefix): cur = self.connection.cursor() cur.execute('SELECT viewname FROM pg_views WHERE viewname like %s', (prefix + '%', )) remove_views = [row[0] for row in cur] for view_name in remove_views: cur.execute('DROP VIEW "%s" CASCADE' % (view_name, )) if self.use_geometry_columns_table: cur.execute("DELETE FROM geometry_columns WHERE f_table_name = %s", (view_name, )) def create_views(self, mappings, ignore_errors=False): for mapping in mappings.values(): if isinstance(mapping, UnionView): PostGISUnionView(self, mapping).create(ignore_errors=ignore_errors) def create_generalized_tables(self, mappings): mappings = [m for m in mappings.values() if isinstance(m, GeneralizedTable)] for mapping in sorted(mappings, key=lambda x: x.name, reverse=True): PostGISGeneralizedTable(self, mapping).create() def optimize(self, mappings): mappings = [m for m in mappings.values() if isinstance(m, (GeneralizedTable, Mapping))] for mapping in mappings: table_name = self.to_tablename(mapping.name) self.optimize_table(table_name, '%s_geom' % table_name) self.vacuum() def optimize_table(self, table_name, idx_name): cur = self.connection.cursor() print 'Clustering table %s' % table_name cur.execute('CLUSTER "%s" ON "%s"' % (idx_name, table_name)) self.connection.commit() def vacuum(self): old_isolation_level = self.connection.isolation_level self.reconnect() self.connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) cur = self.connection.cursor() print 'Vacuum analyze' cur.execute("VACUUM ANALYZE") self.connection.set_isolation_level(old_isolation_level) class PostGISUnionView(object): def __init__(self, db, mapping): self.mapping = mapping self.db = db self.view_name = db.to_tablename(mapping.name) def _view_stmt(self): selects = [] if config.imposm_pg_serial_id: serial_column = "id, " else: serial_column = "" for mapping in self.mapping.mappings: field_str = ', '.join(self._mapping_fields(mapping)) selects.append("""SELECT %s osm_id, geometry, %s, '%s' as class from "%s" """ % ( serial_column, field_str, mapping.classname or mapping.name, self.db.to_tablename(mapping.name))) selects = '\nUNION ALL\n'.join(selects) stmt = 'CREATE VIEW "%s" as (\n%s\n)' % (self.view_name, selects) return stmt def _geom_table_stmt(self): assert self.db.use_geometry_columns_table stmt = "insert into geometry_columns values ('', 'public', '%s', 'geometry', 2, %d, 'GEOMETRY')" % ( self.view_name, self.db.srid) return stmt def _mapping_fields(self, mapping): mapping_fields = set([n for n, t in mapping.fields]) fields = [] for name, default in self.mapping.fields: if name in mapping_fields: fields.append('"' + name + '"') else: if default is None: default = 'null' elif isinstance(default, basestring): default = "'%s'" % default else: default = str(default) fields.append(default + ' as "' + name + '"') return fields def create(self, ignore_errors): cur = self.db.connection.cursor() cur.execute('BEGIN') self.db.drop_table_or_view(cur, self.view_name) with self.db.savepoint(cur, raise_errors=not ignore_errors): cur.execute(self._view_stmt()) if self.db.use_geometry_columns_table: cur.execute('SELECT * FROM geometry_columns WHERE f_table_name = %s', (self.view_name, )) if cur.fetchall(): # drop old entry to handle changes of SRID cur.execute('DELETE FROM geometry_columns WHERE f_table_name = %s', (self.view_name, )) cur.execute(self._geom_table_stmt()) class PostGISGeneralizedTable(object): def __init__(self, db, mapping): self.db = db self.mapping = mapping self.table_name = db.to_tablename(mapping.name) def _geom_table_stmt(self): assert self.db.use_geometry_columns_table stmt = "insert into geometry_columns values ('', 'public', '%s', 'geometry', 2, %d, 'GEOMETRY')" % ( self.table_name, self.db.srid) return stmt def _stmt(self): fields = ', '.join([n for n, t in self.mapping.fields]) if fields: fields += ',' where = ' WHERE ST_IsValid(ST_SimplifyPreserveTopology(geometry, %f))' % (self.mapping.tolerance,) if self.mapping.where: where = ' AND '.join([where, self.mapping.where]) if config.imposm_pg_serial_id: serial_column = "id, " else: serial_column = "" return """CREATE TABLE "%s" AS (SELECT %s osm_id, %s ST_SimplifyPreserveTopology(geometry, %f) as geometry from "%s"%s)""" % ( self.table_name, serial_column, fields, self.mapping.tolerance, self.db.to_tablename(self.mapping.origin.name), where) def create(self): cur = self.db.connection.cursor() cur.execute('BEGIN') self.db.drop_table_or_view(cur, self.table_name) cur.execute(self._stmt()) if self.db.use_geometry_columns_table: cur.execute('SELECT * FROM geometry_columns WHERE f_table_name = %s', (self.table_name, )) if cur.fetchall(): # drop old entry to handle changes of SRID cur.execute('DELETE FROM geometry_columns WHERE f_table_name = %s', (self.table_name, )) cur.execute(self._geom_table_stmt()) class TrigramIndex(object): pass class StringIndex(object): pass class Index(object): pass imposm-2.5.0/imposm/dbimporter.py0000644000076500000240000002122112041174451016765 0ustar oltstaff00000000000000# Copyright 2011, 2012 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from collections import defaultdict from multiprocessing import Process import threading from Queue import Queue from imposm.base import OSMElem from imposm.geom import IncompletePolygonError from imposm.mapping import DropElem from imposm.multipolygon import RelationBuilder from imposm.util import setproctitle import logging log = logging.getLogger(__name__) class ImporterProcess(Process): name = 'importer' def __init__(self, in_queue, db, mapper, osm_cache, dry_run): Process.__init__(self) self.daemon = True setproctitle('imposm %s process' % self.name) self.in_queue = in_queue self.mapper = mapper self.osm_cache = osm_cache self.db = db self.dry_run = dry_run self.db_queue = Queue(256) def run(self): self.setup() # cProfile.runctx('self.doit()', globals(), locals(), 'profile%s.dat' % (self.name,)) self.doit() self.teardown() def setup(self): self.db_importer = threading.Thread(target=self.db_importer, args=(self.db_queue, self.db), kwargs=dict(dry_run=self.dry_run)) self.db_importer.start() def doit(self): pass def teardown(self): self.osm_cache.close_all() self.db_queue.put(None) self.db_importer.join() class TupleBasedImporter(ImporterProcess): def db_importer(self, queue, db, dry_run=False): db.reconnect() mappings = defaultdict(list) while True: data = queue.get() if data is None: break mapping, osm_id, osm_elem, extra_args = data insert_data = mappings[mapping] if isinstance(osm_elem.geom, (list)): for geom in osm_elem.geom: insert_data.append((osm_id, db.geom_wrapper(geom)) + tuple(extra_args)) else: insert_data.append((osm_id, db.geom_wrapper(osm_elem.geom)) + tuple(extra_args)) if len(insert_data) >= 128: if not dry_run: db.insert(mapping, insert_data) del mappings[mapping] # flush for mapping, insert_data in mappings.iteritems(): if not dry_run: db.insert(mapping, insert_data) def insert(self, mappings, osm_id, geom, tags): inserted = False for type, ms in mappings: for m in ms: osm_elem = OSMElem(osm_id, geom, type, tags) try: m.filter(osm_elem) m.build_geom(osm_elem) extra_args = m.field_values(osm_elem) self.db_queue.put((m, osm_id, osm_elem, extra_args)) inserted = True except DropElem: pass return inserted class DictBasedImporter(ImporterProcess): def db_importer(self, queue, db, dry_run=False): db.reconnect() insert_data = [] while True: data = queue.get() if data is None: break data['geometry'] = db.geom_wrapper(data['geometry']) insert_data.append(data) if len(insert_data) >= 128: if not dry_run: db.insert(insert_data) insert_data = [] # flush if not dry_run: db.insert(insert_data) def insert(self, mappings, osm_id, geom, tags): inserted = False osm_objects = {} for type, ms in mappings: for m in ms: osm_elem = OSMElem(osm_id, geom, type, tags) try: m.filter(osm_elem) except DropElem: continue if m.geom_type in osm_objects: obj = osm_objects[m.geom_type] obj['fields'].update(m.field_dict(osm_elem)) obj['fields'][type[0]] = type[1] obj['mapping_names'].append(m.name) else: try: m.build_geom(osm_elem) except DropElem: continue obj = {} obj['fields'] = m.field_dict(osm_elem) obj['fields'][type[0]] = type[1] obj['osm_id'] = osm_id obj['geometry'] = osm_elem.geom obj['mapping_names'] = [m.name] osm_objects[m.geom_type] = obj inserted = True for obj in osm_objects.itervalues(): if isinstance(obj['geometry'], (list, )): for geom in obj['geometry']: obj_part = obj.copy() obj_part['geometry'] = geom self.db_queue.put(obj_part) else: self.db_queue.put(obj) return inserted class NodeProcess(ImporterProcess): name = 'node' def doit(self): while True: nodes = self.in_queue.get() if nodes is None: break for node in nodes: mappings = self.mapper.for_nodes(node.tags) if not mappings: continue self.insert(mappings, node.osm_id, node.coord, node.tags) class NodeProcessDict(NodeProcess, DictBasedImporter): pass class NodeProcessTuple(NodeProcess, TupleBasedImporter): pass class WayProcess(ImporterProcess): name = 'way' def doit(self): coords_cache = self.osm_cache.coords_cache(mode='r') inserted_ways_cache = self.osm_cache.inserted_ways_cache(mode='r') inserted_ways = iter(inserted_ways_cache) try: skip_id = inserted_ways.next() except StopIteration: skip_id = 2**64 while True: ways = self.in_queue.get() if ways is None: break for way in ways: # forward to the next skip id that is not smaller # than our current id while skip_id < way.osm_id: try: skip_id = inserted_ways.next() except StopIteration: skip_id = 2**64 if skip_id == way.osm_id: continue mappings = self.mapper.for_ways(way.tags) if not mappings: continue coords = coords_cache.get_coords(way.refs) if not coords: log.debug('missing coords for way %s', way.osm_id) continue self.insert(mappings, way.osm_id, coords, way.tags) class WayProcessDict(WayProcess, DictBasedImporter): pass class WayProcessTuple(WayProcess, TupleBasedImporter): pass class RelationProcess(ImporterProcess): name = 'relation' def __init__(self, in_queue, db, mapper, osm_cache, dry_run, inserted_way_queue): super(RelationProcess, self).__init__(in_queue, db, mapper, osm_cache, dry_run) self.inserted_way_queue = inserted_way_queue def doit(self): coords_cache = self.osm_cache.coords_cache(mode='r') ways_cache = self.osm_cache.ways_cache(mode='r') while True: relations = self.in_queue.get() if relations is None: break for relation in relations: builder = RelationBuilder(relation, ways_cache, coords_cache) try: builder.build() except IncompletePolygonError, ex: if str(ex): log.debug(ex) continue mappings = self.mapper.for_relations(relation.tags) if mappings: inserted = self.insert(mappings, relation.osm_id, relation.geom, relation.tags) if inserted: builder.mark_inserted_ways(self.inserted_way_queue) class RelationProcessDict(RelationProcess, DictBasedImporter): pass class RelationProcessTuple(RelationProcess, TupleBasedImporter): pass imposm-2.5.0/imposm/defaultmapping.py0000644000076500000240000002456011766043214017634 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from imposm.mapping import ( Options, Points, LineStrings, Polygons, String, Bool, Integer, OneOfInt, set_default_name_type, LocalizedName, WayZOrder, ZOrder, Direction, GeneralizedTable, UnionView, PseudoArea, meter_to_mapunit, sqr_meter_to_mapunit, ) # # internal configuration options # # uncomment to make changes to the default values # import imposm.config # # # import relations with missing rings # imposm.config.import_partial_relations = False # # # select relation builder: union or contains # imposm.config.relation_builder = 'contains' # # # log relation that take longer than x seconds # imposm.config.imposm_multipolygon_report = 60 # # # skip relations with more rings (0 skip nothing) # imposm.config.imposm_multipolygon_max_ring = 0 # # # split ways that are longer than x nodes (0 to split nothing) # imposm.config.imposm_linestring_max_length = 50 # # # cache coords in a compact storage (with delta encoding) # # use this when memory is limited (default) # imposm.config.imposm_compact_coords_cache = True # set_default_name_type(LocalizedName(['name:en', 'int_name', 'name'])) db_conf = Options( # db='osm', host='localhost', port=5432, user='osm', password='osm', sslmode='allow', prefix='osm_new_', proj='epsg:900913', ) class Highway(LineStrings): fields = ( ('tunnel', Bool()), ('bridge', Bool()), ('oneway', Direction()), ('ref', String()), ('z_order', WayZOrder()), ) field_filter = ( ('area', Bool()), ) places = Points( name = 'places', mapping = { 'place': ( 'country', 'state', 'region', 'county', 'city', 'town', 'village', 'hamlet', 'suburb', 'locality', ), }, fields = ( ('z_order', ZOrder([ 'country', 'state', 'region', 'county', 'city', 'town', 'village', 'hamlet', 'suburb', 'locality', ])), ('population', Integer()), ), ) admin = Polygons( name = 'admin', mapping = { 'boundary': ( 'administrative', ), }, fields = ( ('admin_level', OneOfInt('1 2 3 4 5 6'.split())), ), ) motorways = Highway( name = 'motorways', mapping = { 'highway': ( 'motorway', 'motorway_link', 'trunk', 'trunk_link', ), } ) mainroads = Highway( name = 'mainroads', mapping = { 'highway': ( 'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary', )} ) buildings = Polygons( name = 'buildings', mapping = { 'building': ( '__any__', )} ) minorroads = Highway( name = 'minorroads', mapping = { 'highway': ( 'road', 'path', 'track', 'service', 'footway', 'bridleway', 'cycleway', 'steps', 'pedestrian', 'living_street', 'unclassified', 'residential', )} ) transport_points = Points( name = 'transport_points', fields = ( ('ref', String()), ), mapping = { 'highway': ( 'motorway_junction', 'turning_circle', 'bus_stop', ), 'railway': ( 'station', 'halt', 'tram_stop', 'crossing', 'level_crossing', 'subway_entrance', ), 'aeroway': ( 'aerodome', 'terminal', 'helipad', 'gate', )} ) railways = LineStrings( name = 'railways', fields = ( ('tunnel', Bool()), ('bridge', Bool()), # ('ref', String()), ('z_order', WayZOrder()), ), mapping = { 'railway': ( 'rail', 'tram', 'light_rail', 'subway', 'narrow_gauge', 'preserved', 'funicular', 'monorail', )} ) waterways = LineStrings( name = 'waterways', mapping = { 'waterway': ( 'stream', 'river', 'canal', 'drain', )}, field_filter = ( ('tunnel', Bool()), ), ) waterareas = Polygons( name = 'waterareas', mapping = { 'waterway': ('riverbank',), 'natural': ('water',), 'landuse': ('basin', 'reservoir'), }) aeroways = LineStrings( name = 'aeroways', mapping = { 'aeroway': ( 'runway', 'taxiway', )} ) transport_areas = Polygons( name = 'transport_areas', mapping = { 'railway': ( 'station', ), 'aeroway': ( 'aerodrome', 'terminal', 'helipad', 'apron', ), }) landusages = Polygons( name = 'landusages', fields = ( ('area', PseudoArea()), ('z_order', ZOrder([ 'pedestrian', 'footway', 'playground', 'park', 'forest', 'cemetery', 'farmyard', 'farm', 'farmland', 'wood', 'meadow', 'grass', 'village_green', 'recreation_ground', 'garden', 'sports_centre', 'pitch', 'common', 'allotments', 'golf_course', 'university', 'school', 'college', 'library', 'fuel', 'parking', 'nature_reserve', 'cinema', 'theatre', 'place_of_worship', 'hospital', 'scrub', 'quarry', 'residential', 'retail', 'commercial', 'industrial', 'railway', 'land', ])), ), mapping = { 'landuse': ( 'park', 'forest', 'residential', 'retail', 'commercial', 'industrial', 'railway', 'cemetery', 'grass', 'farmyard', 'farm', 'farmland', 'wood', 'meadow', 'village_green', 'recreation_ground', 'allotments', 'quarry', ), 'leisure': ( 'park', 'garden', 'playground', 'golf_course', 'sports_centre', 'pitch', 'stadium', 'common', 'nature_reserve', ), 'natural': ( 'wood', 'land', 'scrub', ), 'highway': ( 'pedestrian', 'footway', ), 'amenity': ( 'university', 'school', 'college', 'library', 'fuel', 'parking', 'cinema', 'theatre', 'place_of_worship', 'hospital', ), }) amenities = Points( name='amenities', mapping = { 'amenity': ( 'university', 'school', 'library', 'fuel', 'hospital', 'fire_station', 'police', 'townhall', ), }) motorways_gen1 = GeneralizedTable( name = 'motorways_gen1', tolerance = meter_to_mapunit(50.0), origin = motorways, ) mainroads_gen1 = GeneralizedTable( name = 'mainroads_gen1', tolerance = meter_to_mapunit(50.0), origin = mainroads, ) railways_gen1 = GeneralizedTable( name = 'railways_gen1', tolerance = meter_to_mapunit(50.0), origin = railways, ) motorways_gen0 = GeneralizedTable( name = 'motorways_gen0', tolerance = meter_to_mapunit(200.0), origin = motorways_gen1, ) mainroads_gen0 = GeneralizedTable( name = 'mainroads_gen0', tolerance = meter_to_mapunit(200.0), origin = mainroads_gen1, ) railways_gen0 = GeneralizedTable( name = 'railways_gen0', tolerance = meter_to_mapunit(200.0), origin = railways_gen1, ) landusages_gen0 = GeneralizedTable( name = 'landusages_gen0', tolerance = meter_to_mapunit(200.0), origin = landusages, where = "ST_Area(geometry)>%f" % sqr_meter_to_mapunit(500000), ) landusages_gen1 = GeneralizedTable( name = 'landusages_gen1', tolerance = meter_to_mapunit(50.0), origin = landusages, where = "ST_Area(geometry)>%f" % sqr_meter_to_mapunit(50000), ) waterareas_gen0 = GeneralizedTable( name = 'waterareas_gen0', tolerance = meter_to_mapunit(200.0), origin = waterareas, where = "ST_Area(geometry)>%f" % sqr_meter_to_mapunit(500000), ) waterareas_gen1 = GeneralizedTable( name = 'waterareas_gen1', tolerance = meter_to_mapunit(50.0), origin = waterareas, where = "ST_Area(geometry)>%f" % sqr_meter_to_mapunit(50000), ) roads = UnionView( name = 'roads', fields = ( ('bridge', 0), ('ref', None), ('tunnel', 0), ('oneway', 0), ('z_order', 0), ), mappings = [motorways, mainroads, minorroads, railways], ) roads_gen1 = UnionView( name = 'roads_gen1', fields = ( ('bridge', 0), ('ref', None), ('tunnel', 0), ('oneway', 0), ('z_order', 0), ), mappings = [railways_gen1, mainroads_gen1, motorways_gen1], ) roads_gen0 = UnionView( name = 'roads_gen0', fields = ( ('bridge', 0), ('ref', None), ('tunnel', 0), ('oneway', 0), ('z_order', 0), ), mappings = [railways_gen0, mainroads_gen0, motorways_gen0], ) imposm-2.5.0/imposm/geom.py0000644000076500000240000003421212037722237015557 0ustar oltstaff00000000000000# Copyright 2011, 2012 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import division import math import codecs import os import shapely.geometry import shapely.geos import shapely.prepared from shapely.geometry.base import BaseGeometry from shapely import geometry from shapely import wkt from shapely.ops import cascaded_union, linemerge from shapely.topology import TopologicalError try: import rtree except ImportError: rtree = None from imposm import config from imposm.util.geom import load_polygons, load_datasource, build_multipolygon import logging log = logging.getLogger(__name__) class InvalidGeometryError(Exception): pass class IncompletePolygonError(Exception): pass TOLERANCE_DEEGREES = 1e-8 TOLERANCE_METERS = 1e-3 # older versions had unhandled floating point execptions in .buffer(0) SHAPELY_SUPPORTS_BUFFER = shapely.geos.geos_capi_version >= (1, 6, 0) def validate_and_simplify(geom, meter_units=False): if SHAPELY_SUPPORTS_BUFFER: try: # buffer(0) is nearly fast as is_valid return geom.buffer(0) except ValueError: # shapely raises ValueError if buffer(0) result is empty raise InvalidGeometryError('geometry is empty') orig_geom = geom if not geom.is_valid: tolerance = TOLERANCE_METERS if meter_units else TOLERANCE_DEEGREES try: geom = geom.simplify(tolerance, False) except ValueError: # shapely raises ValueError if buffer(0) result is empty raise InvalidGeometryError('geometry is empty') if not geom.is_valid: raise InvalidGeometryError('geometry is invalid, could not simplify: %s' % orig_geom) return geom class GeomBuilder(object): def build(self, osm_elem): # TODO is this method still in use? try: if isinstance(osm_elem.coords, BaseGeometry): return osm_elem.coords geom_wkt = self.to_wkt(osm_elem.coords) if geom_wkt is not None: geom = wkt.loads(geom_wkt) except Exception, ex: raise InvalidGeometryError('unable to build geometry %s: %s %s' % (osm_elem.osm_id, ex, osm_elem.coords)) if geom_wkt is None or geom is None: # unable to build valid wkt (non closed polygon, etc) raise InvalidGeometryError() return geom def check_geom_type(self, geom): return def build_geom(self, osm_elem): try: if isinstance(osm_elem.coords, BaseGeometry): if osm_elem.coords.is_empty: raise InvalidGeometryError('empty geometry') self.check_geom_type(osm_elem.coords) return osm_elem.coords geom = self.to_geom(osm_elem.coords) except InvalidGeometryError, ex: raise InvalidGeometryError('unable to build geometry %s: %s %s' % (osm_elem.osm_id, ex, osm_elem.coords)) if geom is None: # unable to build valid wkt (non closed polygon, etc) raise InvalidGeometryError() return geom class PointBuilder(GeomBuilder): def to_wkt(self, data): if len(data) != 2: return None return 'POINT(%f %f)' % data def to_geom(self, data): if len(data) != 2: return None return geometry.Point(*data) def check_geom_type(self, geom): if geom.type != 'Point': raise InvalidGeometryError('expected Point, got %s' % geom.type) def build_checked_geom(self, osm_elem, validate=False): geom = self.build_geom(osm_elem) if not validate or geom.is_valid: return geom else: raise InvalidGeometryError('invalid geometry for %s: %s, %s' % (osm_elem.osm_id, geom, osm_elem.coords)) class PolygonBuilder(GeomBuilder): def to_wkt(self, data): if len(data) >= 4 and data[0] == data[-1]: return 'POLYGON((' + ', '.join('%f %f' % p for p in data) + '))' return None def to_geom(self, data): if len(data) >= 4 and data[0] == data[-1]: return geometry.Polygon(data) return None def check_geom_type(self, geom): if geom.type not in ('Polygon', 'MultiPolygon'): raise InvalidGeometryError('expected Polygon or MultiPolygon, got %s' % geom.type) def build_checked_geom(self, osm_elem, validate=False): geom = self.build_geom(osm_elem) if not validate: return geom try: return validate_and_simplify(geom) except InvalidGeometryError: raise InvalidGeometryError('invalid geometry for %s: %s, %s' % (osm_elem.osm_id, geom, osm_elem.coords)) class LineStringBuilder(GeomBuilder): def to_wkt(self, data): if len(data) <= 1: return None if len(data) == 2 and data[0] == data[1]: return None return 'LINESTRING(' + ', '.join('%f %f' % p for p in data) + ')' def check_geom_type(self, geom): if geom.type != 'LineString': raise InvalidGeometryError('expected LineString, got %s' % geom.type) def to_geom(self, data, max_length=None): if len(data) <= 1: return None if len(data) == 2 and data[0] == data[1]: return None if max_length is None: max_length = config.imposm_linestring_max_length if max_length and len(data) > max_length: chunks = math.ceil(len(data) / max_length) length = int(len(data) // chunks) lines = [] for i in xrange(1, len(data), length): lines.append(geometry.LineString(data[i-1:i+length])) return lines return geometry.LineString(data) def build_checked_geom(self, osm_elem, validate=False): geom = self.build_geom(osm_elem) if not validate or geom.is_valid: return geom else: raise InvalidGeometryError('invalid geometry for %s: %s, %s' % (osm_elem.osm_id, geom, osm_elem.coords)) def tile_bbox(bbox, grid_width): """ Tile bbox into multiple sub-boxes, each of `grid_width` size. >>> list(tile_bbox((-1, 1, 0.49, 1.51), 0.5)) #doctest: +NORMALIZE_WHITESPACE [(-1.0, 1.0, -0.5, 1.5), (-1.0, 1.5, -0.5, 2.0), (-0.5, 1.0, 0.0, 1.5), (-0.5, 1.5, 0.0, 2.0), (0.0, 1.0, 0.5, 1.5), (0.0, 1.5, 0.5, 2.0)] """ min_x = math.floor(bbox[0]/grid_width) * grid_width min_y = math.floor(bbox[1]/grid_width) * grid_width max_x = math.ceil(bbox[2]/grid_width) * grid_width max_y = math.ceil(bbox[3]/grid_width) * grid_width x_steps = (max_x - min_x) / grid_width y_steps = (max_y - min_y) / grid_width for x in xrange(int(x_steps)): for y in xrange(int(y_steps)): yield ( min_x + x * grid_width, min_y + y * grid_width, min_x + (x + 1) * grid_width, min_y + (y + 1)* grid_width, ) def split_polygon_at_grid(geom, grid_width=0.1): """ >>> p = list(split_polygon_at_grid(geometry.box(-0.5, 1, 0.2, 2), 1)) >>> p[0].contains(geometry.box(-0.5, 1, 0, 2)) True >>> p[0].area == geometry.box(-0.5, 1, 0, 2).area True >>> p[1].contains(geometry.box(0, 1, 0.2, 2)) True >>> p[1].area == geometry.box(0, 1, 0.2, 2).area True """ if not geom.is_valid: geom = geom.buffer(0) for split_box in tile_bbox(geom.bounds, grid_width): try: polygon_part = geom.intersection(shapely.geometry.box(*split_box)) except TopologicalError: continue if not polygon_part.is_empty: yield polygon_part def load_geom(source): geom = None # source is a wkt file if os.path.exists(os.path.abspath(source)): data = None with open(os.path.abspath(source), 'r') as fp: data = fp.read(50) # load WKT geometry and remove leading whitespaces if data.lower().lstrip().startswith(('polygon', 'multipolygon')): geom = load_polygons(source) # source is an OGR datasource if geom is None: geom = load_datasource(source) if geom: # get the first and maybe only geometry if not check_wgs84_srs(geom[0]): log.error('Geometry is not in EPSG:4326') return None if rtree: return LimitRTreeGeometry(geom) else: log.info('You should install RTree for large --limit-to polygons') return LimitPolygonGeometry(build_multipolygon(geom)[1]) return None def check_wgs84_srs(geom): bbox = geom.bounds if bbox[0] >= -180 and bbox[1] >= -90 and bbox[2] <= 180 and bbox[3] <= 90: return True return False class EmtpyGeometryError(Exception): pass class LimitPolygonGeometry(object): def __init__(self, shapely_geom): self._geom = shapely_geom self._prepared_geom = None self._prepared_counter = 0 self._prepared_max = 100000 @property def geom(self): # GEOS internal data structure for prepared geometries grows over time, # recreate to limit memory consumption if not self._prepared_geom or self._prepared_counter > self._prepared_max: print 'create prepared' self._prepared_geom = shapely.prepared.prep(self._geom) self._prepared_counter = 0 self._prepared_counter += 1 return self._prepared_geom def intersection(self, geom): if self.geom.contains_properly(geom): # no need to limit contained geometries return geom new_geom = None if self.geom.intersects(geom): try: # can not use intersection with prepared geom new_geom = self._geom.intersection(geom) except TopologicalError: pass if not new_geom or new_geom.is_empty: raise EmtpyGeometryError('No intersection or empty geometry') new_geom = filter_geometry_by_type(new_geom, geom.type) if new_geom: return new_geom raise EmtpyGeometryError('No intersection or empty geometry') def filter_geometry_by_type(geometry, geom_type): """ Filter (multi)geometry for compatible `geom_type`, because we can't insert points into linestring tables for example """ if geometry.type == geom_type: # same type is fine return geometry if geometry.type == 'MultiPolygon' and geom_type == 'Polygon': # polygon mappings should also support multipolygons return geometry if hasattr(geometry, 'geoms'): # GeometryCollection or MultiLineString? return list of geometries geoms = [] for part in geometry.geoms: # only parts with same type if part.type == geom_type: geoms.append(part) if geoms: return geoms return None def flatten_polygons(polygons): for polygon in polygons: if polygon.type == 'MultiPolygon': for p in polygon.geoms: yield p else: yield polygon def flatten_linestrings(linestrings): for linestring in linestrings: if linestring.type == 'MultiLineString': for ls in linestring.geoms: yield ls else: yield linestring class LimitRTreeGeometry(object): def __init__(self, polygons): index = rtree.index.Index() sub_polygons = [] part_idx = 0 for polygon in polygons: for part in split_polygon_at_grid(polygon): sub_polygons.append(part) index.insert(part_idx, part.bounds) part_idx += 1 self.polygons = sub_polygons self.index = index def intersection(self, geom): intersection_ids = list(self.index.intersection(geom.bounds)) if not intersection_ids: raise EmtpyGeometryError('No intersection or empty geometry') intersections = [] for i in intersection_ids: polygon = self.polygons[i] if polygon.contains(geom): return geom if polygon.intersects(geom): try: new_geom_part = polygon.intersection(geom) new_geom_part = filter_geometry_by_type(new_geom_part, geom.type) if new_geom_part: if len(intersection_ids) == 1: return new_geom_part if isinstance(new_geom_part, list): intersections.extend(new_geom_part) else: intersections.append(new_geom_part) except TopologicalError: pass if not intersections: raise EmtpyGeometryError('No intersection or empty geometry') # intersections from multiple sub-polygons # try to merge them back to a single geometry if geom.type.endswith('Polygon'): union = cascaded_union(list(flatten_polygons(intersections))) elif geom.type.endswith('LineString'): union = linemerge(list(flatten_linestrings(intersections))) if union.type == 'MultiLineString': union = list(union.geoms) elif geom.type == 'Point': union = intersections[0] else: log.warn('unexpexted geometry type %s', geom.type) raise EmtpyGeometryError() return union imposm-2.5.0/imposm/mapping.py0000644000076500000240000005104112037722237016262 0ustar oltstaff00000000000000# -:- encoding: UTF8 -:- # Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import division import math import imposm.geom ANY = '__any__' __all__ = [ 'LineStrings', 'Polygons', 'Points', 'Options', 'PolygonTable', 'ZOrder', 'PointTable', 'String', 'LocalizedName', 'LineStringTable', 'Direction', 'OneOfInt', 'Integer', 'WayZOrder', 'Bool', 'GeneralizedTable', 'UnionView', 'set_default_name_field', ] default_name_field = None def set_default_name_type(type, column_name='name'): """ Set new default type for 'name' field. :: set_default_name_type(LocalizedName(['name:en', 'int_name', 'name'])) """ global default_name_field default_name_field = column_name, type # changed by imposm.app if the projection is epsg:4326 import_srs_is_geographic = False def meter_to_mapunit(meter): """ Convert ``meter`` into the mapunit of the import. Only supports EPSG:4326 (degrees) at the moment, all other SRS will use meter as mapunit. """ if import_srs_is_geographic: deg_to_meter = (40000 * 1000) / 360 return meter / deg_to_meter return meter def sqr_meter_to_mapunit(sqr_meter): """ Convert ``sqr_meter`` into the mapunit of the import. Only supports EPSG:4326 (degrees) at the moment, all other SRS will use meter as mapunit. """ if import_srs_is_geographic: return meter_to_mapunit(math.sqrt(sqr_meter))**2 return sqr_meter class Mapping(object): table = None fields = () field_filter = () classname = None _insert_stmt = None with_type_field = True def __init__(self, name, mapping, fields=None, field_filter=None, with_type_field=None): self.name = name self.mapping = mapping self.fields = fields or tuple(self.fields) self.limit_to_polygon = None if with_type_field is not None: # allow subclass to define other default by setting it as class variable self.with_type_field = with_type_field self._add_type_field() self._add_name_field() if field_filter: self.field_filter = field_filter def _add_name_field(self): """ Add name field to default if not set. """ if not any(1 for name, _type in self.fields if name == 'name'): if default_name_field: self.fields = (default_name_field,) + self.fields else: self.fields = (('name', Name()),) + self.fields def _add_type_field(self): """ Add type field. """ if not self.with_type_field: return for name, type_ in self.fields: if name == 'type': # do not add type field if already present return self.fields = (('type', Type()), ) + self.fields @property def insert_stmt(self): if not self._insert_stmt: self._insert_stmt = self.table('osm_' + self.name, self).insert_stmt return self._insert_stmt def extra_field_names(self): extra_field_names = [] for field_name, field_filter in self.field_filter: extra_field_names.append(field_name) for field_name, field in self.fields: field_names = field.extra_fields() if field_names is not None: extra_field_names.extend(field_names) else: extra_field_names.append(field_name) return extra_field_names def build_geom(self, osm_elem): try: geom = self.geom_builder.build_checked_geom(osm_elem) if self.limit_to_polygon is not None: geom = self.limit_to_polygon.intersection(geom) osm_elem.geom = geom except imposm.geom.InvalidGeometryError, ex: raise DropElem('invalid geometry: %s' % (ex, )) except imposm.geom.EmtpyGeometryError, ex: raise DropElem(ex) def field_values(self, osm_elem): return [t.value(osm_elem.tags.get(n), osm_elem) for n, t in self.fields] def field_dict(self, osm_elem): result = dict((n, t.value(osm_elem.tags.get(n), osm_elem)) for n, t in self.fields) if self.with_type_field: del result['type'] result[osm_elem.cls] = osm_elem.type return result def filter(self, osm_elem): [t.filter(osm_elem.tags.get(n), osm_elem) for n, t in self.field_filter] def __repr__(self): return '' % self.name class TagMapper(object): def __init__(self, mappings, limit_to=None): self.mappings = mappings self.limit_to_polygon = limit_to self._init_map() def _init_map(self): self.point_mappings = {} self.line_mappings = {} self.polygon_mappings = {} self.point_tags = {} self.line_tags = {} self.polygon_tags = {} for mapping in self.mappings: if mapping.table is PointTable: tags = self.point_tags add_to = self.point_mappings elif mapping.table is LineStringTable: tags = self.line_tags add_to = self.line_mappings elif mapping.table is PolygonTable: tags = self.polygon_tags add_to = self.polygon_mappings for extra in mapping.extra_field_names(): tags.setdefault(extra, set()).add('__any__') for tag, types in mapping.mapping.iteritems(): add_to.setdefault(tag, {}) for type in types: tags.setdefault(tag, set()).add(type) add_to[tag].setdefault(type, []).append(mapping) # add limit_to polygon to each mapping mapping.limit_to_polygon = self.limit_to_polygon def for_nodes(self, tags): return self._mapping_for_tags(self.point_mappings, tags) def for_ways(self, tags): return (self._mapping_for_tags(self.line_mappings, tags) + self._mapping_for_tags(self.polygon_mappings, tags)) def for_relations(self, tags): return self._mapping_for_tags(self.polygon_mappings, tags) def _tag_filter(self, filter_tags): def filter(tags): for k in tags.keys(): if k not in filter_tags: del tags[k] else: if '__any__' in filter_tags[k]: pass elif tags[k] in filter_tags[k]: pass else: del tags[k] if 'name' in tags and len(tags) == 1: del tags['name'] return filter def tag_filter_for_nodes(self): tags = dict(self.point_tags) return self._tag_filter(tags) def tag_filter_for_ways(self): tags = dict() for k, v in self.line_tags.iteritems(): tags.setdefault(k, set()).update(v) for k, v in self.polygon_tags.iteritems(): tags.setdefault(k, set()).update(v) return self._tag_filter(tags) def tag_filter_for_relations(self): tags = dict() for k, v in self.line_tags.iteritems(): tags.setdefault(k, set()).update(v) for k, v in self.polygon_tags.iteritems(): tags.setdefault(k, set()).update(v) tags['type'] = set(['multipolygon', 'boundary']) # for type=multipolygon expected_tags = set(['type', 'name']) _rel_filter = self._tag_filter(tags) def rel_filter(tags): if tags.get('type') == 'multipolygon': pass elif tags.get('type') == 'boundary' and 'boundary' in tags: # a lot of the boundary relations are not multipolygon pass else: tags.clear() return tag_count = len(tags) _rel_filter(tags) if len(tags) < tag_count: # we removed tags... if not set(tags).difference(expected_tags): # but no tags except name and type are left # remove all, otherwise tags from longest # way/ring would be used during MP building tags.clear() return rel_filter def _mapping_for_tags(self, tag_map, tags): result = [] mapping_set = set() for tag_name in tags: if tag_name in tag_map: tag_value = tags[tag_name] mappings = [] if tag_value in tag_map[tag_name]: mappings.extend(tag_map[tag_name][tag_value]) elif ANY in tag_map[tag_name]: mappings.extend(tag_map[tag_name][ANY]) new_mappings = [] for proc in mappings: if proc not in mapping_set: mapping_set.add(proc) new_mappings.append(proc) if new_mappings: result.append(((tag_name, tag_value), tuple(new_mappings))) return result # marker classes class PointTable(object): pass class LineStringTable(object): pass class PolygonTable(object): pass class Points(Mapping): """ Table class for point features. :PostGIS datatype: POINT """ table = PointTable geom_builder = imposm.geom.PointBuilder() geom_type = 'POINT' class LineStrings(Mapping): """ Table class for line string features. :PostGIS datatype: LINESTRING """ table = LineStringTable geom_builder = imposm.geom.LineStringBuilder() geom_type = 'LINESTRING' class Polygons(Mapping): """ Table class for polygon features. :PostGIS datatype: GEOMETRY (POLYGON does not support multi-polygons) """ table = PolygonTable geom_builder = imposm.geom.PolygonBuilder() geom_type = 'GEOMETRY' # for multipolygon support class GeneralizedTable(object): def __init__(self, name, tolerance, origin, where=None): self.name = name self.tolerance = tolerance self.origin = origin self.classname = origin.name self.fields = self.origin.fields self.with_type_field = self.origin.with_type_field self.where = where class UnionView(object): def __init__(self, name, mappings, fields): self.name = name self.mappings = mappings self.fields = fields self._add_name_field() self._add_type_field() def _add_name_field(self): """ Add name field to default if not set. """ if not any(1 for name, _type in self.fields if name == 'name'): if default_name_field: self.fields = ((default_name_field[0], ''),) + self.fields else: self.fields = (('name', ''),) + self.fields def _add_type_field(self): """ Add type field if not configured and at least one mapping has a type field. """ if 'type' not in self.fields and any(m.with_type_field for m in self.mappings): self.fields += (('type', None), ) class DropElem(Exception): pass class FieldType(object): def extra_fields(self): """ List with names of fields (keys) that should be processed during read-phase. Return ``None`` to use the field name from the mapping. Return ``[]`` if no extra fields (keys) are required. """ return None def value(self, val, osm_elem): return val class Type(FieldType): """ Field for type values (i.e. the *value* of the mapped key/value). Use this in combination with ``with_type_field=False`` of the mapping class, if you want to store the value of the mapped key/value in a different column. For example, to get a column ``road_class`` instead of ``type``:: roads = LineStrings( with_type_field = False, name = 'roads', mapping = { 'highway': ( 'motorway', 'trunk', 'secondary', ), }, fields = ( ('road_class', Type(),), ), ) :PostgreSQL datatype: VARCHAR(255) .. versionadded:: 2.4.0 """ column_type = "VARCHAR(255)" def extra_fields(self): return [] def value(self, val, osm_elem): return osm_elem.type class Class(FieldType): """ Field for class values (i.e. the *key* of the mapped key/value). Use this if you want to store the key that was used for this mapping. For example, the following mapping will create a column ``class`` that will have the value ``landuse`` or ``natural``, depending on the feature. :: landusages = Polygons( name = 'landusages', fields = ( ('class', Class()), ), mapping = { 'landuse': ( 'wood', ), 'natural': ( 'wood', ), } ) :PostgreSQL datatype: VARCHAR(255) .. versionadded:: 2.4.0 """ column_type = "VARCHAR(255)" def extra_fields(self): return [] def value(self, val, osm_elem): return osm_elem.cls class String(FieldType): """ Field for string values. :PostgreSQL datatype: VARCHAR(255) """ column_type = "VARCHAR(255)" class Name(String): """ Field for name values. Filters out common FixMe values. :PostgreSQL datatype: VARCHAR(255) .. versionadded:: 2.3.0 """ filter_out_names = set(( 'fixme', 'fix me', 'fix-me!', '0', 'none', 'n/a', 's/n', 'kein name', 'kein', 'unbenannt', 'unbekannt', 'noch unbekannt', 'noch ohne namen', 'noname', 'unnamed', 'namenlos', 'no_name', 'no name', 'editme', '_edit_me_', )) def value(self, val, osm_elem): if val and val.lower() in self.filter_out_names: osm_elem.name = '' val = '' return val class LocalizedName(Name): """ Field for localized name values. Checks different name keys and uses the first key with a valid value. :param coalesce: list of name keys to check :PostgreSQL datatype: VARCHAR(255) .. versionadded:: 2.3.0 """ def __init__(self, coalesce=['name', 'int_name']): self.coalesce_keys = coalesce def extra_fields(self): return self.coalesce_keys def value(self, val, osm_elem): for key in self.coalesce_keys: val = osm_elem.tags.get(key) if val and val.lower() not in self.filter_out_names: osm_elem.name = val return val else: osm_elem.name = '' return '' class Bool(FieldType): """ Field for boolean values. Converts false, no, 0 to False and true, yes, 1 to True. :PostgreSQL datatype: SMALLINT """ # there was a reason this is not BOOL # something didn't supported it, cascadenik? don't remember column_type = "SMALLINT" aliases = { True: set(['false', 'no', '0', 'undefined']), False: set(['true', 'yes', '1', 'undefined']), } def __init__(self, default=True, neg_aliases=None): self.default = default self.neg_aliases = neg_aliases or self.aliases[default] def value(self, val, osm_elem): if val is None or val.strip().lower() in self.neg_aliases: return 0 # not self.default return 1 # self.default def filter(self, val, osm_elem): if self.value(val, osm_elem): raise DropElem class Direction(FieldType): """ Field type for one-way directions. Converts `yes`, `true` and `1` to ``1`` for one ways in the direction of the way, `-1` to ``-1`` for one ways against the direction of the way and ``0`` for all other values. :PostgreSQL datatype: SMALLINT """ column_type = "SMALLINT" def value(self, value, osm_elem): if value: value = value.strip().lower() if value in ('yes', 'true', '1'): return 1 if value == '-1': return -1 return 0 class PseudoArea(FieldType): """ Field for the (pseudo) area of a polygon in square meters. The value is just an approximation since the geometries are in EPSG:4326 and not in a equal-area projection. The approximation is good for smaller polygons (<1%) and should be precise enough to compare geometries for rendering order (larger below smaller). The area of the geometry is multiplied by the cosine of the mid-latitude to compensate the reduced size towards the poles. :PostgreSQL datatype: REAL .. versionadded:: 2.3.0 """ column_type = "REAL" def value(self, val, osm_elem): area = osm_elem.geom.area if not area: return None extent = osm_elem.geom.bounds mid_lat = extent[1] + (abs(extent[3] - extent[1]) / 2) sqr_deg = area * math.cos(math.radians(mid_lat)) # convert deg^2 to m^2 sqr_m = (math.sqrt(sqr_deg) * (40075160 / 360))**2 return sqr_m def extra_fields(self): return [] class OneOfInt(FieldType): """ Field type for integer values. Converts values to integers, drops element if is not included in ``values``. :PostgreSQL datatype: SMALLINT """ column_type = "SMALLINT" def __init__(self, values): self.values = set(values) def value(self, value, osm_elem): if value in self.values: return int(value) raise DropElem class Integer(FieldType): """ Field type for integer values. Converts values to integers, defaults to ``NULL``. :PostgreSQL datatype: INTEGER """ column_type = "INTEGER" def value(self, value, osm_elem): try: return int(value) except: return None class ZOrder(FieldType): """ Field type for z-ordering based on the feature type. :param types: list of mapped feature types, from highest to lowest ranking :PostgreSQL datatype: SMALLINT """ column_type = "SMALLINT" def __init__(self, types): self.rank = {} for i, t in enumerate(types[::-1]): self.rank[t] = i def extra_fields(self): return [] def value(self, val, osm_elem): return self.rank.get(osm_elem.type, 0) class WayZOrder(FieldType): """ Field type for z-ordered based on highway types. Ordering based on the osm2pgsql z-ordering: From ``roads`` = 3 to ``motorways`` = 9, ``railway`` = 7 and unknown = 0. Ordering changes with ``tunnels`` by -10, ``bridges`` by +10 and ``layer`` by 10 * ``layer``. :PostgreSQL datatype: SMALLINT """ column_type = "SMALLINT" rank = { 'minor': 3, 'road': 3, 'unclassified': 3, 'residential': 3, 'tertiary_link': 3, 'tertiary': 4, 'secondary_link': 3, 'secondary': 5, 'primary_link': 3, 'primary': 6, 'trunk_link': 3, 'trunk': 8, 'motorway_link': 3, 'motorway': 9, } brunnel_bool = Bool() def extra_fields(self): return [] def value(self, val, osm_elem): tags = osm_elem.tags z_order = 0 l = self.layer(tags) z_order += l * 10 r = self.rank.get(osm_elem.type, 0) if not r: r = 7 if 'railway' in tags else 0 z_order += r if self.brunnel_bool.value(tags.get('tunnel'), {}): z_order -= 10 if self.brunnel_bool.value(tags.get('bridge'), {}): z_order += 10 return z_order def layer(self, tags): l = tags.get('layer', 0) try: return int(l) except ValueError: return 0 class Options(dict): def __setattr__(self, name, value): self[name] = value def __getattr__(self, name): try: return self[name] except KeyError: raise AttributeError('%s not in %r' % (name, self)) imposm-2.5.0/imposm/merge.py0000644000076500000240000000551711766043214015734 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import difflib def merge(a, b): sqm = difflib.SequenceMatcher(None, a, b) matching_blocks = sqm.get_matching_blocks() matching_blocks.pop(-1) if not matching_blocks: return None a_idx = b_idx = 0 result = [] for block in matching_blocks: if a_idx < block[0]: result.extend(a[a_idx:block[0]]) if b_idx < block[1]: result.extend(b[b_idx:block[1]]) a_idx = block[0]+block[-1] b_idx = block[1]+block[-1] result.extend(a[block[0]:block[0]+block[-1]]) if a_idx < len(a): result.extend(a[a_idx:]) if b_idx < len(b): result.extend(b[b_idx:]) return result def multimerge(candidates, merge_func=merge): candidates = list(candidates) while len(candidates) > 1: a, b, res = multimerge_(candidates, merge_func) if res is None: return candidates candidates.remove(b) if a is not res: candidates.remove(a) candidates.append(res) # else: in place merge return candidates[0] def multimerge_(candidates, merge_func): for a, b in permutations(candidates, 2): res = merge_func(a, b) if res is not None: return a, b, res return None, None, None try: from itertools import permutations permutations # prevent warning except ImportError: def permutations(iterable, r=None): # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC # permutations(range(3)) --> 012 021 102 120 201 210 pool = tuple(iterable) n = len(pool) r = n if r is None else r if r > n: return indices = range(n) cycles = range(n, n-r, -1) yield tuple(pool[i] for i in indices[:r]) while n: for i in reversed(range(r)): cycles[i] -= 1 if cycles[i] == 0: indices[i:] = indices[i+1:] + indices[i:i+1] cycles[i] = n - i else: j = cycles[i] indices[i], indices[-j] = indices[-j], indices[i] yield tuple(pool[i] for i in indices[:r]) break else: returnimposm-2.5.0/imposm/multipolygon.py0000644000076500000240000003472211766043214017377 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import division import os import time from imposm.geom import ( PolygonBuilder, LineStringBuilder, InvalidGeometryError, IncompletePolygonError, ) from imposm.merge import merge import imposm.base import imposm.geom import imposm.config import shapely.geometry import shapely.ops import shapely.geos import shapely.prepared import logging log = logging.getLogger(__name__) def RelationBuilder(*args, **kw): if imposm.config.relation_builder == 'contains': return ContainsRelationBuilder(*args, **kw) if imposm.config.relation_builder == 'union': return UnionRelationBuilder(*args, **kw) raise ValueError('unknown relation_builder "%s"' % (imposm.config.relation_builder, )) class RelationBuilderBase(object): validate_rings = True def __init__(self, relation, ways_cache, coords_cache): self.relation = relation self.polygon_builder = PolygonBuilder() self.linestring_builder = LineStringBuilder() self.ways_cache = ways_cache self.coords_cache = coords_cache def fetch_ways(self): ways = [] for member in self.relation.members: # skip label nodes, relations of relations, etc if member[1] != 'way': continue way = self.ways_cache.get(member[0]) if way is None: log.debug('way not found %s:%s', self.relation.osm_id, member[0]) if imposm.config.import_partial_relations: continue else: raise IncompletePolygonError('way not found %s:%s' % (self.relation.osm_id, member[0])) if way.partial_refs: log.warn('multiple linestrings in way %s (relation %s)', member[0], self.relation.osm_id) raise IncompletePolygonError() way.coords = self.fetch_way_coords(way) if way.coords is None: if not imposm.config.import_partial_relations: raise IncompletePolygonError() else: ways.append(way) return ways def build_rings(self, ways): rings = [] incomplete_rings = [] for ring in (Ring(w) for w in ways): if ring.is_closed(): ring.geom = self.polygon_builder.build_checked_geom(ring, validate=self.validate_rings) rings.append(ring) else: incomplete_rings.append(ring) merged_rings = self.build_ring_from_incomplete(incomplete_rings) if len(rings) + len(merged_rings) == 0: raise IncompletePolygonError('linestrings from relation %s have no rings' % (self.relation.osm_id, )) return rings + merged_rings def build_ring_from_incomplete(self, incomplete_rings): rings = merge_rings(incomplete_rings) for ring in rings[:]: if not ring.is_closed(): if imposm.config.import_partial_relations: rings.remove(ring) continue else: raise InvalidGeometryError('linestrings from relation %s do not form a ring' % self.relation.osm_id) ring.geom = self.polygon_builder.build_checked_geom(ring, validate=self.validate_rings) return rings def fetch_way_coords(self, way): """ Fetch all coordinates of way.refs. """ coords = self.coords_cache.get_coords(way.refs) if coords is None: log.debug('missing coord from way %s in relation %s', way.osm_id, self.relation.osm_id) return None return coords def build_relation_geometry(self, rings): """ Build relation geometry from rings. """ raise NotImplementedError() def mark_inserted_ways(self, inserted_ways_queue): for w in self.relation.ways: if w.inserted: inserted_ways_queue.put(w.osm_id) def build(self): try: time_start = time.time() ways = self.fetch_ways() time_ways = time.time() - time_start if not ways: raise IncompletePolygonError('no ways found') time_start = time.time() rings = self.build_rings(ways) time_rings = time.time() - time_start if (imposm.config.imposm_multipolygon_max_ring and len(rings) > imposm.config.imposm_multipolygon_max_ring): log.warn('skipping relation %d with %d ways (%.1fms) and %d rings (%.1fms): too many rings', self.relation.osm_id, len(ways), time_ways*1000, len(rings), time_rings*1000) raise IncompletePolygonError('skipping too large multipolygon') time_start = time.time() self.build_relation_geometry(rings) time_relations = time.time() - time_start if time_ways + time_rings + time_relations > imposm.config.imposm_multipolygon_report: log.warn('building relation %d with %d ways (%.1fms) and %d rings (%.1fms) took %.1fms', self.relation.osm_id, len(ways), time_ways*1000, len(rings), time_rings*1000, time_relations*1000) except InvalidGeometryError, ex: log.debug(ex) raise IncompletePolygonError(ex) except IncompletePolygonError: raise except Exception, ex: log.warn('error while building multipolygon:') log.exception(ex) raise IncompletePolygonError(ex) class UnionRelationBuilder(RelationBuilderBase): def build_relation_geometry(self, rings): """ Build relation geometry from rings. """ rings.sort(key=lambda x: x.geom.area, reverse=True) # add/subtract all rings from largest polygon = rings[0] rel_tags = relation_tags(self.relation.tags, polygon.tags) polygon.mark_as_inserted(rel_tags) geom = polygon.geom for r in rings[1:]: if geom.contains(r.geom): # inside -> hole -> subtract geom = geom.difference(r.geom) r.mark_as_inserted(rel_tags) else: # outside or overlap -> merge(union) to multipolygon or to polygon try: geom = geom.union(r.geom) except shapely.geos.TopologicalError: raise InvalidGeometryError('multipolygon relation (%s) result is invalid' ' (topological error)' % self.relation.osm_id) r.mark_as_inserted(rel_tags) if not geom.is_valid: raise InvalidGeometryError('multipolygon relation (%s) result is invalid' % self.relation.osm_id) self.relation.geom = geom self.relation.tags = rel_tags all_ways = polygon.ways for r in rings: all_ways.extend(r.ways) self.relation.ways = all_ways class ContainsRelationBuilder(RelationBuilderBase): validate_rings = False def _ring_is_hole(self, rings, idx): """ Returns True if rings[idx] is a hole, False if it is a shell (also if hole in a hole, etc) """ contained_counter = 0 while True: idx = rings[idx].contained_by if idx is None: break contained_counter += 1 return contained_counter % 2 == 1 def build_relation_geometry(self, rings): """ Build relation geometry from rings. """ rings.sort(key=lambda x: x.geom.area, reverse=True) total_rings = len(rings) shells = set([rings[0]]) for i in xrange(total_rings): test_geom = shapely.prepared.prep(rings[i].geom) for j in xrange(i+1, total_rings): if test_geom.contains(rings[j].geom): # j in inside of i if rings[j].contained_by is not None: # j is inside a larger ring, remove that relationship # e.g. j is hole inside a hole (i) rings[rings[j].contained_by].holes.discard(rings[j]) shells.discard(rings[j]) # remember parent rings[j].contained_by = i # add ring as hole or shell if self._ring_is_hole(rings, j): rings[i].holes.add(rings[j]) else: shells.add(rings[j]) if rings[i].contained_by is None: # add as shell if it is not a hole shells.add(rings[i]) rel_tags = relation_tags(self.relation.tags, rings[0].tags) # build polygons from rings polygons = [] for shell in shells: shell.mark_as_inserted(rel_tags) exterior = shell.geom.exterior interiors = [] for hole in shell.holes: hole.mark_as_inserted(rel_tags) interiors.append(hole.geom.exterior) polygons.append(shapely.geometry.Polygon(exterior, interiors)) if len(polygons) == 1: geom = polygons[0] else: geom = shapely.geometry.MultiPolygon(polygons) geom = imposm.geom.validate_and_simplify(geom) if not geom.is_valid: raise InvalidGeometryError('multipolygon relation (%s) result is invalid' % self.relation.osm_id) self.relation.geom = geom self.relation.tags = rel_tags all_ways = [] for r in rings: all_ways.extend(r.ways) self.relation.ways = all_ways def relation_tags(rel_tags, way_tags): result = dict(rel_tags) if 'type' in result: del result['type'] if 'name' in result: del result['name'] if not result: # use way_tags result.update(way_tags) else: if 'name' in rel_tags: # put back name result['name'] = rel_tags['name'] return result def tags_differ(a, b): a_ = dict(a) a_.pop('name', None) b_ = dict(b) b_.pop('name', None) return a_ != b_ def tags_same_or_empty(a, b): return ( not b or not tags_differ(a, b) ) def merge_rings(rings): """ Merge rings at the endpoints. """ endpoints = {} for ring in rings: left = ring.refs[0] right = ring.refs[-1] orig_ring = None if left in endpoints: orig_ring = endpoints.pop(left) if left == orig_ring.refs[-1]: orig_ring.refs = orig_ring.refs + ring.refs[1:] orig_ring.coords = orig_ring.coords + ring.coords[1:] else: orig_ring.refs = orig_ring.refs[::-1] + ring.refs[1:] orig_ring.coords = orig_ring.coords[::-1] + ring.coords[1:] orig_ring.ways.extend(ring.ways) orig_ring.tags.update(ring.tags) if right in endpoints and endpoints[right] is not orig_ring: # close gap ring = endpoints.pop(right) if right == ring.refs[0]: orig_ring.refs = orig_ring.refs + ring.refs[1:] orig_ring.coords = orig_ring.coords + ring.coords[1:] else: orig_ring.refs = orig_ring.refs[:-1] + ring.refs[::-1] orig_ring.coords = orig_ring.coords[:-1] + ring.coords[::-1] orig_ring.ways.extend(ring.ways) orig_ring.tags.update(ring.tags) right = orig_ring.refs[-1] endpoints[right] = orig_ring else: endpoints[right] = orig_ring elif right in endpoints: orig_ring = endpoints.pop(right) if right == orig_ring.refs[0]: orig_ring.refs = ring.refs[:-1] + orig_ring.refs orig_ring.coords = ring.coords[:-1] + orig_ring.coords else: orig_ring.refs = orig_ring.refs[:-1] + ring.refs[::-1] orig_ring.coords = orig_ring.coords[:-1] + ring.coords[::-1] orig_ring.ways.extend(ring.ways) orig_ring.tags.update(ring.tags) endpoints[left] = orig_ring else: endpoints[left] = ring endpoints[right] = ring return list(set(endpoints.values())) class Ring(object): """ Represents a ring (i.e. polygon without holes) build from one or more ways. Stores references to the building ways. """ def __init__(self, way): self.ways = [way] self.osm_id = way.osm_id self.refs = way.refs self.coords = way.coords self.tags = dict(way.tags) self.inserted = way.inserted self.contained_by = None self.holes = set() def __repr__(self): return 'Ring(%r, %r, %r)' % (self.osm_id, self.tags, self.ways) def merge(self, ring, without_refs=False): """ Try to merge `ring.refs` with this ring. Returns `self` on success, else `None`. """ if without_refs: result = None else: result = merge(self.refs, ring.refs) if result is None: return None self.ways.extend(ring.ways) self.refs = [result] self.tags.update(ring.tags) return self def is_closed(self): return len(self.refs) >= 4 and self.refs[0] == self.refs[-1] def mark_as_inserted(self, tags): for w in self.ways: if tags_same_or_empty(tags, w.tags): w.inserted = True if tags_same_or_empty(tags, self.tags): self.inserted = True imposm-2.5.0/imposm/psqldb.py0000644000076500000240000001145012000021303016064 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import optparse import string from os.path import join, dirname, exists db_create_template = """ # run this as postgres user, eg: # imposm-psqldb > create_db.sh; sudo su postgres; sh ./create_db.sh set -xe createuser --no-superuser --no-createrole --createdb ${user} createdb -E UTF8 -O ${user} ${dbname} createlang plpgsql ${dbname} ${postgis} echo "ALTER TABLE spatial_ref_sys OWNER TO ${user};" | psql -d ${dbname} echo "ALTER USER ${user} WITH PASSWORD '${password}';" |psql -d ${dbname} echo "host\t${dbname}\t${user}\t127.0.0.1/32\tmd5" >> ${pg_hba} set +x echo "Done. Don't forget to restart postgresql!" """.strip() postgis_create_template_15 = """ psql -d ${dbname} -f ${postgis_sql} psql -d ${dbname} -f ${spatial_ref_sys_sql} psql -d ${dbname} -f ${epsg900913_sql} echo "ALTER TABLE geometry_columns OWNER TO ${user};" | psql -d ${dbname} """.strip() postgis_create_template_20 = """ echo "CREATE EXTENSION postgis;" | psql -d ${dbname} echo "ALTER TABLE geometry_columns OWNER TO ${user};" | psql -d ${dbname} psql -d ${dbname} -f ${epsg900913_sql} """.strip() def find_sql_files(version, postgis_version, mapping): pg_hba = '/path/to/pg_hba.conf \t# <- CHANGE THIS PATH' postgis_sql = '/path/to/postgis.sql \t\t\t\t# <- CHANGE THIS PATH' spatial_ref_sys_sql = '/path/to/spatial_ref_sys.sql \t\t\t# <- CHANGE THIS PATH' if version in ('8.3', 'auto'): p = '/usr/share/postgresql-8.3-postgis/lwpostgis.sql' if exists(p): postgis_sql = p p = '/usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql' if exists(p): spatial_ref_sys_sql = p p = '/etc/postgresql/8.3/main/pg_hba.conf' if exists(p): pg_hba = p if version in ('8.4', 'auto'): p = '/usr/share/postgresql/8.4/contrib/postgis.sql' if exists(p): postgis_sql = p p = '/usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql' if exists(p): postgis_sql = p p = '/usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql' if exists(p): spatial_ref_sys_sql = p p = '/usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql' if exists(p): spatial_ref_sys_sql = p p = '/etc/postgresql/8.4/main/pg_hba.conf' if exists(p): pg_hba = p if version in ('9.1', 'auto'): p = '/usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql' if exists(p): postgis_sql = p p = '/usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql' if exists(p): spatial_ref_sys_sql = p p = '/etc/postgresql/9.1/main/pg_hba.conf' if exists(p): pg_hba = p if postgis_version == '2.0': postgis_sql = None spatial_ref_sys_sql = None mapping['postgis_sql'] = postgis_sql mapping['spatial_ref_sys_sql'] = spatial_ref_sys_sql mapping['pg_hba'] = pg_hba mapping['pg_version'] = postgis_version def main(): usage = '%prog [options]' desc = 'Outputs shell commands to create a PostGIS database.' parser = optparse.OptionParser(usage=usage, description=desc) parser.add_option('--database', dest='dbname', metavar='osm', default='osm') parser.add_option('--user', dest='user', metavar='osm', default='osm') parser.add_option('--password', dest='password', metavar='osm', default='osm') parser.add_option('--pg-version', dest='pg_version', metavar='8.3|8.4|9.1|auto', default='auto') parser.add_option('--postgis-version', dest='postgis_version', metavar='1.5|2.0', default='1.5') (options, args) = parser.parse_args() mapping = { 'user': options.user, 'dbname': options.dbname, 'password': options.password, } mapping['epsg900913_sql'] = join(dirname(__file__), '900913.sql') find_sql_files(options.pg_version, options.postgis_version, mapping) if options.postgis_version == '2.0': mapping['postgis'] = string.Template(postgis_create_template_20).substitute(mapping) else: mapping['postgis'] = string.Template(postgis_create_template_15).substitute(mapping) template = string.Template(db_create_template) print template.substitute(mapping) if __name__ == '__main__': main() imposm-2.5.0/imposm/reader.py0000644000076500000240000001175011777042442016077 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from functools import partial from multiprocessing import Process, JoinableQueue from imposm.parser import OSMParser from imposm.util import setproctitle class ImposmReader(object): def __init__(self, mapping, cache, pool_size=2, merge=False, logger=None): self.pool_size = pool_size self.mapper = mapping self.merge = merge self.cache = cache self.reader = None self.logger = logger self.estimated_coords = 0 def read(self, filename): nodes_queue = JoinableQueue(128) coords_queue = JoinableQueue(512) ways_queue = JoinableQueue(128) relations_queue = JoinableQueue(128) log_proc = self.logger() log_proc.start() marshal = True if self.merge: # merging needs access to unmarshaled data marshal = False estimates = { 'coords': self.estimated_coords, 'nodes': self.estimated_coords//50, 'ways': self.estimated_coords//7, 'relations': self.estimated_coords//1000, } coords_writer = CacheWriterProcess(coords_queue, self.cache.coords_cache, estimates['coords'], log=partial(log_proc.log, 'coords'), marshaled_data=marshal) coords_writer.start() nodes_writer = CacheWriterProcess(nodes_queue, self.cache.nodes_cache, estimates['nodes'], log=partial(log_proc.log, 'nodes'), marshaled_data=marshal) nodes_writer.start() ways_writer = CacheWriterProcess(ways_queue, self.cache.ways_cache, estimates['ways'], merge=self.merge, log=partial(log_proc.log, 'ways'), marshaled_data=marshal) ways_writer.start() relations_writer = CacheWriterProcess(relations_queue, self.cache.relations_cache, estimates['relations'], merge=self.merge, log=partial(log_proc.log, 'relations'), marshaled_data=marshal) relations_writer.start() log_proc.message('coords: %dk nodes: %dk ways: %dk relations: %dk (estimated)' % ( estimates['coords']/1000, estimates['nodes']/1000, estimates['ways']/1000, estimates['relations']/1000) ) # keep one CPU free for writer proc on hosts with 4 or more CPUs pool_size = self.pool_size if self.pool_size < 4 else self.pool_size - 1 parser = OSMParser(pool_size, nodes_callback=nodes_queue.put, coords_callback=coords_queue.put, ways_callback=ways_queue.put, relations_callback=relations_queue.put, marshal_elem_data=marshal) parser.nodes_tag_filter = self.mapper.tag_filter_for_nodes() parser.ways_tag_filter = self.mapper.tag_filter_for_ways() parser.relations_tag_filter = self.mapper.tag_filter_for_relations() parser.parse(filename) coords_queue.put(None) nodes_queue.put(None) ways_queue.put(None) relations_queue.put(None) coords_writer.join() nodes_writer.join() ways_writer.join() relations_writer.join() log_proc.stop() log_proc.join() class CacheWriterProcess(Process): def __init__(self, queue, cache, estimated_records=None, merge=False, log=None, marshaled_data=False): Process.__init__(self) self.daemon = True setproctitle('imposm writer') self.queue = queue self.cache = cache self.merge = merge self.log = log self.marshaled_data = marshaled_data self.estimated_records = estimated_records def run(self): # print 'creating %s (%d)' % (self.filename, self.estimated_records or 0) cache = self.cache(mode='w', estimated_records=self.estimated_records) if self.marshaled_data: cache_put = cache.put_marshaled else: cache_put = cache.put while True: data = self.queue.get() if data is None: self.queue.task_done() break if self.merge: for d in data: if d[0] in cache: elem = cache.get(d[0]) elem.merge(*d[1:]) d = elem.to_tuple() cache_put(*d) else: for d in data: cache_put(*d) if self.log: self.log(len(data)) self.queue.task_done() cache.close() imposm-2.5.0/imposm/test/0000755000076500000240000000000012060141076015223 5ustar oltstaff00000000000000imposm-2.5.0/imposm/test/__init__.py0000644000076500000240000000000011766043214017331 0ustar oltstaff00000000000000imposm-2.5.0/imposm/test/test_cache.py0000644000076500000240000000732611766043214017716 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import tempfile from imposm.cache.tc import NodeDB, CoordDB, DeltaCoordsDB from nose.tools import eq_, assert_almost_equal class TestNodeDB(object): def setup(self): fd_, self.fname = tempfile.mkstemp('.db') self.db = NodeDB(self.fname) def teardown(self): os.unlink(self.fname) def test_insert(self): assert self.db.put(1000, {'foo': 2}, (123, 456)) assert self.db.put(2**40, {'bar': 2}, (123, 456)) nd = self.db.get(1000) eq_(nd.osm_id, 1000) eq_(nd.tags, {'foo': 2}) eq_(nd.coord, (123, 456)) nd = self.db.get(2**40) eq_(nd.osm_id, 2**40) def test_read_only(self): assert self.db.put(1000, {'foo': 2}, (123, 456)) assert self.db.put(2**40, {'bar': 2}, (123, 456)) self.db.close() self.db = NodeDB(self.fname, 'r') nd = self.db.get(1000) eq_(nd.osm_id, 1000) eq_(nd.tags, {'foo': 2}) eq_(nd.coord, (123, 456)) nd = self.db.get(2**40) eq_(nd.osm_id, 2**40) assert not self.db.put(1001, {'foo': 2}, (123, 456)) assert not self.db.get(1001) def test_iter(self): assert self.db.put(1000, {'foo': 2}, (123, 456)) nds = list(self.db) eq_(len(nds), 1) nd = nds[0] eq_(nd.osm_id, 1000) eq_(nd.tags, {'foo': 2}) eq_(nd.coord, (123, 456)) class TestCoordDB(object): testclass = CoordDB def setup(self): fd_, self.fname = tempfile.mkstemp('.db') self.db = self.testclass(self.fname) def teardown(self): os.unlink(self.fname) def test_insert(self): assert self.db.put(1000, 123, 179.123456789) assert self.db.put(2**40, 123, 179.123456789) assert self.db.put(2**40+1, 123, 179.123456789) pos = self.db.get(1000) assert_almost_equal(pos[0], 123.0, 6) assert_almost_equal(pos[1], 179.123456789, 6) assert self.db.get(2**40) assert self.db.get(2**40+1) def test_read_only(self): assert self.db.put(1000, 123, 0) assert self.db.put(1001, -180.0, -90) assert self.db.put(1010, 180, 90) assert self.db.put(2**40, 123, 179.123456789) assert self.db.put(2**40+1, 123, 179.123456789) self.db.close() self.db = self.testclass(self.fname, 'r') pos = self.db.get(1000) assert_almost_equal(pos[0], 123.0, 6) assert_almost_equal(pos[1], 0.0, 6) pos = self.db.get(1001) assert_almost_equal(pos[0], -180.0, 6) assert_almost_equal(pos[1], -90.0, 6) pos = self.db.get(1010) assert_almost_equal(pos[0], 180.0, 6) assert_almost_equal(pos[1], 90.0, 6) assert self.db.get(2**40) assert self.db.get(2**40+1) assert not self.db.put(2001, 123, 456) assert not self.db.get(2001) class TestDeltaCoordDB(TestCoordDB): testclass = DeltaCoordsDB def setup(self): fd_, self.fname = tempfile.mkstemp('.db') self.db = DeltaCoordsDB(self.fname) imposm-2.5.0/imposm/test/test_dbimporter.py0000644000076500000240000000737211777043510021024 0ustar oltstaff00000000000000# Copyright 2012 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from imposm.dbimporter import DictBasedImporter, TupleBasedImporter from imposm import defaultmapping from nose.tools import eq_, assert_almost_equal class TestDictBasedImporter(object): def setup(self): dummy_db = None mapper = None self.importer = DictBasedImporter(None, dummy_db, mapper, None, dry_run=False) def test_insert(self): mappings = [ (('highway', 'secondary'), [defaultmapping.mainroads]), (('railway', 'tram'), [defaultmapping.railways]), (('landusage', 'grass'), [defaultmapping.landusages]), ] assert self.importer.insert(mappings, 1234, [(0, 0), (1, 0), (1, 1), (0, 0)], {'highway': 'secondary', 'railway': 'tram', 'oneway': '1', 'name': 'roundabout', } ) # get items, sort by mapping_names so that landusages comes first queue_items = [self.importer.db_queue.get(), self.importer.db_queue.get()] queue_items.sort(key=lambda x: x['mapping_names']) polygon_item = queue_items[0] linestring_item = queue_items[1] eq_(linestring_item['mapping_names'], ['mainroads', 'railways']) eq_(linestring_item['osm_id'], 1234) eq_(linestring_item['fields'], { 'highway': 'secondary', 'railway': 'tram', 'oneway': 1, 'z_order': 7, 'bridge': 0, 'tunnel': 0, 'name': 'roundabout', 'ref': None }) eq_(polygon_item['mapping_names'], ['landusages']) eq_(polygon_item['osm_id'], 1234) assert_almost_equal(polygon_item['fields']['area'], 6195822904.182782) del polygon_item['fields']['area'] eq_(polygon_item['fields'], { 'z_order': 27, 'landusage': 'grass', 'name': 'roundabout', }) class TestTupleBasedImporter(object): def setup(self): dummy_db = None mapper = None self.importer = TupleBasedImporter(None, dummy_db, mapper, None, dry_run=False) def test_insert(self): mappings = [ (('highway', 'secondary'), [defaultmapping.mainroads]), (('railway', 'tram'), [defaultmapping.railways]), (('landusage', 'grass'), [defaultmapping.landusages]), ] assert self.importer.insert(mappings, 1234, [(0, 0), (1, 0), (1, 1), (0, 0)], {'highway': 'secondary', 'railway': 'tram', 'oneway': '1', 'name': 'roundabout', } ) mainroads_item = self.importer.db_queue.get() eq_(mainroads_item[0], defaultmapping.mainroads) eq_(mainroads_item[1], 1234) eq_(mainroads_item[3], ['roundabout', 'secondary', 0, 0, 1, None, 5]) railways_item = self.importer.db_queue.get() eq_(railways_item[0], defaultmapping.railways) eq_(railways_item[1], 1234) eq_(railways_item[3], ['roundabout', 'tram', 0, 0, 7]) landusages_item = self.importer.db_queue.get() eq_(landusages_item[0], defaultmapping.landusages) eq_(landusages_item[1], 1234) eq_(landusages_item[3], ['roundabout', 'grass', 6195822904.182782, 27]) imposm-2.5.0/imposm/test/test_field_types.py0000644000076500000240000000325111766043214021153 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import imposm from imposm.base import OSMElem from imposm.mapping import Name, LocalizedName def test_name_field(): name = Name() elem = OSMElem(1, [], 'test', tags={'name': 'fixme'}) assert name.value('fixme', elem) == '' assert elem.name == '' elem = OSMElem(1, [], 'test', tags={'name': 'Foo Street'}) assert name.value('Foo Street', elem) == 'Foo Street' assert elem.name == 'Foo Street' def test_localized_name_field(): name = LocalizedName(['name:de', 'name:en', 'foo']) elem = OSMElem(1, [], 'test', tags={'name': 'Foo'}) assert name.value(None, elem) == '' assert elem.name == '' elem = OSMElem(1, [], 'test', tags={'name:de': 'Foo', 'name:en': 'Bar'}) assert name.value(None, elem) == 'Foo' assert elem.name == 'Foo' elem = OSMElem(1, [], 'test', tags={'name:es': 'Foo', 'name:en': 'Bar'}) assert name.value(None, elem) == 'Bar' assert elem.name == 'Bar' elem = OSMElem(1, [], 'test', tags={'name:es': 'Foo', 'foo': 'Bar'}) assert name.value(None, elem) == 'Bar' assert elem.name == 'Bar' imposm-2.5.0/imposm/test/test_imported.py0000644000076500000240000000735212041753537020500 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import os import tempfile import shutil from contextlib import contextmanager import imposm.app import imposm.db.config import imposm.mapping from nose.tools import eq_ from nose.plugins import skip temp_dir = None old_cwd = None try: from imposm_test_conf import db_conf db_conf = imposm.mapping.Options(db_conf) except ImportError: raise skip.SkipTest('no imposm_test_conf.py with db_conf found') def setup_module(): global old_cwd, temp_dir old_cwd = os.getcwd() temp_dir = tempfile.mkdtemp() os.chdir(temp_dir) test_osm_file = os.path.join(os.path.dirname(__file__), 'test.out.osm') with capture_out(): print db_conf.password imposm.app.main(['--read', test_osm_file, '--write', '--proj', db_conf.proj, '--table-prefix', db_conf.prefix, '--connect', 'postgis://%(user)s:%(password)s@%(host)s:%(port)s/%(db)s' % db_conf]) class TestImported(object): def __init__(self): self.db = imposm.db.config.DB(db_conf) def test_point(self): cur = self.db.cur cur.execute('select osm_id, name, ST_AsText(geometry) from %splaces where osm_id = 1' % db_conf.prefix) results = cur.fetchall() eq_(len(results), 1) eq_(results[0], (1, 'Foo', 'POINT(13 47.5)')) def test_way(self): cur = self.db.cur cur.execute('select osm_id, name, ST_AsText(geometry) from %slandusages where osm_id = 1001' % db_conf.prefix) results = cur.fetchall() eq_(len(results), 1) eq_(results[0][:-1], (1001, 'way 1001',)) eq_(roundwkt(results[0][-1]), 'POLYGON((13.0 47.5,14.5 50.0,16.5 49.0,17.0 47.0,14.5 45.5,13.0 47.5),(14.0 47.5,15.0 47.0,15.5 48.0,14.5 48.5,14.0 47.5))') cur.execute('select osm_id, name, ST_AsText(geometry) from %slandusages where osm_id = 2001' % db_conf.prefix) results = cur.fetchall() eq_(len(results), 1) eq_(results[0][:-1], (2001, 'way 2001',)) eq_(roundwkt(results[0][-1]), 'POLYGON((23.0 47.5,24.5 50.0,26.5 49.0,27.0 47.0,24.5 45.5,23.0 47.5),(24.5 47.0,25.5 46.5,26.0 47.5,25.0 47.5,24.5 47.0),(24.2 48.25,25.25 47.7,25.7 48.8,24.7 49.25,24.2 48.25))') cur.execute('select osm_id, name, ST_AsText(geometry) from %slandusages where osm_id = 3001' % db_conf.prefix) results = cur.fetchall() eq_(len(results), 1) eq_(results[0][:-1], (3001, 'way 3002',)) eq_(roundwkt(results[0][-1]), 'POLYGON((33.0 47.5,34.5 50.0,36.5 49.0,37.0 47.0,34.5 45.5,33.0 47.5),(34.0 47.5,35.0 47.0,35.5 48.0,34.5 48.5,34.0 47.5))') def roundwkt(wkt): def round_num(num_str): return str(round(float(num_str.group(0)), 2)) return re.sub('\d+(\.\d+)?', round_num, wkt) def teardown_module(): if old_cwd: os.chdir(old_cwd) if temp_dir and os.path.exists(temp_dir): shutil.rmtree(temp_dir) @contextmanager def capture_out(): import sys from cStringIO import StringIO old_stdout = sys.stdout old_stderr = sys.stderr try: sys.stdout = StringIO() sys.stderr = StringIO() yield sys.stdout, sys.stderr finally: sys.stdout = old_stdout sys.stderr = old_stderr imposm-2.5.0/imposm/test/test_limit_to.py0000644000076500000240000000743612037722237020476 0ustar oltstaff00000000000000# Copyright 2012 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from imposm.geom import LimitPolygonGeometry, EmtpyGeometryError from shapely.wkt import loads from nose.tools import raises class TestLimitPolygonGeometry(object): @raises(EmtpyGeometryError) def test_linestring_no_intersection(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) limit_to.intersection(loads('LINESTRING(-100 -100, -50 -50)')) def test_linestring(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) geom = limit_to.intersection(loads('LINESTRING(-10 -10, 20 20)')) assert geom.almost_equals(loads('LINESTRING(0 0, 10 10)')) def test_linestring_contained(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) test_geom = loads('LINESTRING(1 1, 9 9)') geom = limit_to.intersection(test_geom) # should return unmodified input geometry assert geom is test_geom def test_linestring_multilinestring_result(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) geom = limit_to.intersection(loads('LINESTRING(-10 -20, 5 10, 20 -20)')) assert isinstance(geom, list) assert geom[0].almost_equals(loads('LINESTRING(0 0, 5 10)')) assert geom[1].almost_equals(loads('LINESTRING(5 10, 10 0)')) @raises(EmtpyGeometryError) def test_linestring_point_result(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) geom = limit_to.intersection(loads('LINESTRING(-10 -10, 0 0)')) def test_linestring_mixed_result(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) geom = limit_to.intersection(loads('LINESTRING(0 0, 5 -10, 5 10)')) # point and linestring, point not returned assert isinstance(geom, list) assert len(geom) == 1 assert geom[0].almost_equals(loads('LINESTRING(5 0, 5 10)')) def test_polygon_mixed_result(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) test_geom = loads('POLYGON((0 -10, 0 5, 2.5 -5, 5 0, 7.5 -5, 10 5, 10 -10, 0 -10))') geom = limit_to.intersection(test_geom) # point and two polygons, point not returned assert isinstance(geom, list) assert len(geom) == 2 assert geom[0].almost_equals(loads('POLYGON((1.25 0, 0 0, 0 5, 1.25 0))')) assert geom[1].almost_equals(loads('POLYGON((10 0, 8.75 0, 10 5, 10 0))')) def test_polygon_multipolygon_result(self): geom = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))' limit_to = LimitPolygonGeometry(loads(geom)) test_geom = loads('POLYGON((0 -10, 0 5, 2.5 -5, 5 -1, 7.5 -5, 10 5, 10 -10, 0 -10))') geom = limit_to.intersection(test_geom) # similar to above, but point does not touch the box, so we should get # a single multipolygon assert geom.almost_equals(loads( 'MULTIPOLYGON(((1.25 0, 0 0, 0 5, 1.25 0)),' '((10 0, 8.75 0, 10 5, 10 0)))')) imposm-2.5.0/imposm/test/test_multipolygon.py0000644000076500000240000003277211766043214021420 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from imposm.base import Relation, Way from imposm.multipolygon import UnionRelationBuilder, ContainsRelationBuilder, Ring, merge_rings from nose.tools import eq_, assert_almost_equal class RelationBuilderTestBase(object): def test_broken_polygon_self_intersect(self): # 2##3 6##7 # # # #### # 1##4____5##8 w1 = Way(1, {}, [1, 2, 3, 4, 5, 6, 7, 8, 1]) w1.coords = [(0, 0), (0, 10), (10, 10), (10, 0), (20, 0), (20, 10), (30, 10), (30, 0), (0, 0)] w2 = Way(2, {}, [15, 16, 17, 18, 15]) w2.coords = [(2, 2), (8, 2), (8, 8), (2, 8), (2, 2)] yield self.check_broken_polygon, w1, w2 # 2##3 6##7 # # # #### # 1##4____5##8 w1 = Way(1, {}, [4, 1, 2, 3, 4, 5, 6, 7, 8, 4]) w1.coords = [(10, 0), (0, 0), (0, 10), (10, 10), (10, 0), (20, 0), (20, 10), (30, 10), (30, 0), (10, 0)] yield self.check_broken_polygon, w1, w2 def check_broken_polygon(self, w1, w2): r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) eq_(len(rings), 2) eq_(rings[0].geom.area, 200) eq_(rings[1].geom.area, 36) builder.build_relation_geometry(rings) eq_(r.geom.area, 200-36) def test_broken_polygon_self_intersect_triangle(self): # 2### # # ###4 # # ###3 # 1### # triangle with four points, minor overlapping w1 = Way(1, {}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (0, 100), (100, 50 - 0.00001), (100, 50 + 0.00001), (0, 0)] w2 = Way(2, {}, [15, 16, 17, 18, 15]) w2.coords = [(10, 45), (10, 55), (20, 55), (20, 45), (10, 45)] r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) eq_(len(rings), 2) assert_almost_equal(rings[0].geom.area, 100 * 100 / 2, 2) eq_(rings[1].geom.area, 100) builder.build_relation_geometry(rings) assert_almost_equal(r.geom.area, 100 * 100 / 2 - 100, 2) # larger overlapp w1 = Way(1, {}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (0, 100), (100, 50 - 1), (100, 50 + 1), (0, 0)] w2 = Way(2, {}, [15, 16, 17, 18, 15]) w2.coords = [(10, 45), (10, 55), (20, 55), (20, 45), (10, 45)] r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) eq_(len(rings), 2) assert_almost_equal(rings[0].geom.area, 100 * 100 / 2, -3) eq_(rings[1].geom.area, 100) builder.build_relation_geometry(rings) assert_almost_equal(r.geom.area, 100 * 100 / 2 - 100, -3) # # 2### ###4 # # # ### # # # # ### # # # 1### ###3 # # hourglass # w1 = Way(1, {}, [1, 2, 3, 4, 1]) # w1.coords = [(0, 0), (0, 100), (100, 0), (100, 100), (0, 0)] # w2 = Way(2, {}, [15, 16, 17, 18, 15]) # w2.coords = [(10, 45), (10, 55), (20, 55), (20, 45), (10, 45)] # w3 = Way(3, {}, [25, 26, 27, 28, 25]) # w3.coords = [(80, 45), (80, 55), (90, 55), (90, 45), (80, 45)] # # r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) # builder = self.relation_builder(r, None, None) # rings = builder.build_rings([w1, w2, w3]) # eq_(len(rings), 3) # print rings[0].geom.wkt, rings[0].geom.simplify(0.000001, False).wkt # eq_(rings[0].geom.area, 100 * 100 / 2) # eq_(rings[1].geom.area, 100) # eq_(rings[2].geom.area, 100) # # builder.build_relation_geometry(rings) # assert_almost_equal(r.geom.area, 100 * 100 / 2 - 100, -3) def test_simple_polygon_w_hole(self): w1 = Way(1, {}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)] w2 = Way(2, {}, [5, 6, 7, 8, 5]) w2.coords = [(2, 2), (8, 2), (8, 8), (2, 8), (2, 2)] r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) eq_(len(rings), 2) eq_(rings[0].geom.area, 100) eq_(rings[1].geom.area, 36) builder.build_relation_geometry(rings) eq_(r.geom.area, 100-36) def test_polygon_w_multiple_holes(self): w1 = Way(1, {'landusage': 'forest'}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)] w2 = Way(2, {'water': 'basin'}, [1, 2, 3, 4, 1]) w2.coords = [(1, 1), (2, 1), (2, 2), (1, 2), (1, 1)] w3 = Way(3, {'landusage': 'scrub'}, [1, 2, 3, 4, 1]) w3.coords = [(3, 3), (4, 3), (4, 4), (3, 4), (3, 3)] r = Relation(1, {'landusage': 'forest'}, [ (1, 'way', 'outer'), (2, 'way', 'inner'), (3, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2, w3]) eq_(len(rings), 3) eq_(rings[0].geom.area, 100) eq_(rings[1].geom.area, 1) eq_(rings[2].geom.area, 1) builder.build_relation_geometry(rings) eq_(rings[0].inserted, True) eq_(rings[1].inserted, False) eq_(rings[2].inserted, False) eq_(r.geom.area, 100-1-1) def test_polygon_w_nested_holes(self): w1 = Way(1, {'landusage': 'forest'}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)] w2 = Way(2, {'landusage': 'scrub'}, [1, 2, 3, 4, 1]) w2.coords = [(1, 1), (9, 1), (9, 9), (1, 9), (1, 1)] w3 = Way(3, {}, [5, 6, 7, 8, 5]) # with no tags w3.coords = [(2, 2), (8, 2), (8, 8), (2, 8), (2, 2)] w4 = Way(4, {'landusage': 'scrub'}, [9, 10, 11, 12, 9]) w4.coords = [(3, 3), (7, 3), (7, 7), (3, 7), (3, 3)] w5 = Way(5, {'landusage': 'forest'}, [9, 10, 11, 12, 9]) w5.coords = [(4, 4), (6, 4), (6, 6), (4, 6), (4, 4)] r = Relation(1, {'landusage': 'forest'}, [ (1, 'way', 'outer'), (2, 'way', 'inner'), (3, 'way', 'inner'), (4, 'way', 'inner'), (5, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2, w3, w4, w5]) eq_(len(rings), 5) eq_(rings[0].geom.area, 100) eq_(rings[1].geom.area, 64) eq_(rings[2].geom.area, 36) eq_(rings[3].geom.area, 16) eq_(rings[4].geom.area, 4) builder.build_relation_geometry(rings) eq_(rings[0].inserted, True) eq_(rings[1].inserted, False) eq_(rings[2].inserted, True) eq_(rings[3].inserted, False) eq_(rings[4].inserted, True) eq_(r.geom.area, 100-64+36-16+4) def test_polygon_w_touching_holes(self): w1 = Way(1, {'landusage': 'forest'}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)] w2 = Way(2, {'landusage': 'scrub'}, [1, 2, 3, 4, 1]) w2.coords = [(1, 1), (5, 1), (5, 9), (1, 9), (1, 1)] w3 = Way(3, {'water': 'basin'}, [1, 2, 3, 4, 1]) w3.coords = [(5, 1), (9, 1), (9, 9), (5, 9), (5, 1)] r = Relation(1, {'landusage': 'forest'}, [ (1, 'way', 'outer'), (2, 'way', 'inner'), (3, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2, w3]) eq_(len(rings), 3) eq_(rings[0].geom.area, 100) eq_(rings[1].geom.area, 32) eq_(rings[2].geom.area, 32) builder.build_relation_geometry(rings) eq_(rings[0].inserted, True) eq_(rings[1].inserted, False) eq_(rings[2].inserted, False) eq_(r.geom.area, 100-64) def test_touching_polygons_w_hole(self): w1 = Way(1, {'water': 'riverbank'}, [1, 2, 3, 4, 1]) w1.coords = [(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)] w2 = Way(2, {'water': 'riverbank'}, [2, 5, 6, 3, 2]) w2.coords = [(10, 0), (30, 0), (30, 10), (10, 10), (10, 0)] w3 = Way(3, {'landusage': 'forest'}, [7, 8, 9, 10, 7]) w3.coords = [(2, 2), (8, 2), (8, 8), (2, 8), (2, 2)] r = Relation(1, {'water': 'riverbank'}, [ (1, 'way', 'outer'), (2, 'way', 'outer'), (3, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2, w3]) eq_(len(rings), 3) eq_(rings[0].geom.area, 100) eq_(rings[1].geom.area, 200) eq_(rings[2].geom.area, 36) builder.build_relation_geometry(rings) eq_(rings[0].inserted, True) eq_(rings[1].inserted, True) eq_(rings[2].inserted, False) eq_(r.geom.area, 100+200-36) def test_simple_polygon_from_two_lines(self): w1 = Way(1, {}, [1, 2, 3]) w1.coords = [(0, 0), (10, 0), (10, 10)] w2 = Way(2, {}, [3, 4, 1]) w2.coords = [(10, 10), (0, 10), (0, 0)] r = Relation(1, {}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) eq_(len(rings), 1) eq_(rings[0].geom.area, 100) builder.build_relation_geometry(rings) eq_(r.geom.area, 100) def test_inserted_ways_different_tags(self): w1 = Way(1, {'landusage': 'forest'}, [1, 2, 3]) w1.coords = [(0, 0), (10, 0), (10, 10)] w2 = Way(2, {'highway': 'secondary'}, [3, 4, 1]) w2.coords = [(10, 10), (0, 10), (0, 0)] r = Relation(1, {'landusage': 'forest'}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) builder.build_relation_geometry(rings) eq_(w1.inserted, True) eq_(w2.inserted, False) def test_inserted_multiple_tags(self): w1 = Way(1, {'landusage': 'forest', 'highway': 'secondary'}, [1, 2, 3]) w1.coords = [(0, 0), (10, 0), (10, 10)] w2 = Way(2, {'highway': 'secondary'}, [3, 4, 1]) w2.coords = [(10, 10), (0, 10), (0, 0)] r = Relation(1, {'landusage': 'forest'}, [(1, 'way', 'outer'), (2, 'way', 'inner')]) builder = self.relation_builder(r, None, None) rings = builder.build_rings([w1, w2]) builder.build_relation_geometry(rings) eq_(w1.inserted, False) # also highway=secondary eq_(w2.inserted, False) class TestUnionRelationBuilder(RelationBuilderTestBase): relation_builder = UnionRelationBuilder class TestContainsRelationBuilder(RelationBuilderTestBase): relation_builder = ContainsRelationBuilder def test_merge_rings(): w1 = Way(1, {}, [1, 2, 3]) w1.coords = [(0, 0), (10, 0), (10, 10)] r1 = Ring(w1) w2 = Way(2, {}, [3, 4, 1]) w2.coords = [(10, 10), (0, 10), (0, 0)] r2 = Ring(w2) rings = merge_rings([r1, r2]) eq_(len(rings), 1) r = rings[0] eq_(r.is_closed(), True) # eq_(r.ways, [w1, w2]) def test_merge_rings_reverse_endpoint(): w1 = Way(1, {'name': 'foo'}, [1, 2, 3, 4]) w1.coords = [] r1 = Ring(w1) w2 = Way(2, {'building': 'true'}, [6, 5, 4]) w2.coords = [] r2 = Ring(w2) w3 = Way(3, {}, [1, 7, 6]) w3.coords = [] r3 = Ring(w3) rings = merge_rings([r1, r2, r3]) eq_(len(rings), 1) r = rings[0] eq_(r.tags, {'name': 'foo', 'building': 'true'}) eq_(r.is_closed(), True) # eq_(r.ways, [w1, w2, w3]) class W(Way): # way without coords coords = [] from imposm.merge import permutations def test_merge_rings_permutations(): """ Test all possible permutations of 4 ring segments. """ for i in range(16): # test each segment in both directions f1 = i & 1 == 0 f2 = i & 2 == 0 f3 = i & 4 == 0 f4 = i & 8 == 0 for i1, i2, i3, i4 in permutations([0, 1, 2, 3]): ways = [ W(1, {}, [1, 2, 3, 4] if f1 else [4, 3, 2, 1]), W(2, {}, [4, 5, 6, 7] if f2 else [7, 6, 5, 4]), W(3, {}, [7, 8, 9, 10] if f3 else [10, 9, 8, 7]), W(4, {}, [10, 11, 12, 1] if f4 else [1, 12, 11, 10]), ] ways = [ways[i1], ways[i2], ways[i3], ways[i4]] rings = [Ring(w) for w in ways] merged_rings = merge_rings(rings) eq_(len(merged_rings), 1) r = merged_rings[0] eq_(r.is_closed(), True, (ways, r.refs)) eq_(set(r.ways), set(ways)) # check order of refs prev_x = r.refs[0] for x in r.refs[1:]: if not abs(prev_x - x) == 1: assert ( (prev_x == 1 and x == 12) or (prev_x == 12 and x == 1) ), 'not in order %r' % r.refs prev_x = ximposm-2.5.0/imposm/test/test_tag_mapper.py0000644000076500000240000001641311766043214020767 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import imposm from imposm.mapping import TagMapper from nose.tools import eq_ class TestTagMapper(object): def __init__(self): mapping_file = os.path.join(os.path.dirname(__file__), '..', 'defaultmapping.py') mappings = {} execfile(mapping_file, mappings) self.tag_mapping = TagMapper([m for n, m in mappings.iteritems() if isinstance(m, imposm.mapping.Mapping)]) def test_tag_filter_nodes(self): tag_filter_for_nodes = self.tag_mapping.tag_filter_for_nodes() tagfilter = lambda x: tag_filter_for_nodes(x) or x eq_(tagfilter({'name': 'foo'}), {}) eq_(tagfilter({'name': 'foo', 'unknown': 'baz'}), {}) eq_(tagfilter({'name': 'foo', 'place': 'unknown'}), {}) eq_(tagfilter({'name': 'foo', 'place': 'village'}), {'name': 'foo', 'place': 'village'}) eq_(tagfilter({'name': 'foo', 'place': 'village', 'population': '1000'}), {'name': 'foo', 'place': 'village', 'population': '1000'}) eq_(tagfilter({'name': 'foo', 'place': 'village', 'highway': 'unknown'}), {'name': 'foo', 'place': 'village'}) eq_(tagfilter({'name': 'foo', 'place': 'village', 'highway': 'bus_stop'}), {'name': 'foo', 'place': 'village', 'highway': 'bus_stop'}) def test_tag_filter_ways(self): tag_filter_for_ways = self.tag_mapping.tag_filter_for_ways() tagfilter = lambda x: tag_filter_for_ways(x) or x eq_(tagfilter({'name': 'foo'}), {}) eq_(tagfilter({'name': 'foo', 'unknown': 'baz'}), {}) eq_(tagfilter({'name': 'foo', 'highway': 'unknown'}), {}) eq_(tagfilter({'name': 'foo', 'highway': 'track'}), {'name': 'foo', 'highway': 'track'}) eq_(tagfilter({'name': 'foo', 'highway': 'track', 'oneway': 'yes', 'tunnel': '1'}), {'name': 'foo', 'highway': 'track', 'oneway': 'yes', 'tunnel': '1'}) eq_(tagfilter({'name': 'foo', 'place': 'village', 'highway': 'track'}), {'name': 'foo', 'highway': 'track'}) eq_(tagfilter({'name': 'foo', 'railway': 'tram', 'highway': 'secondary'}), {'name': 'foo', 'railway': 'tram', 'highway': 'secondary'}) # with __any__ value eq_(tagfilter({'name': 'foo', 'building': 'yes'}), {'name': 'foo', 'building': 'yes'}) eq_(tagfilter({'name': 'foo', 'building': 'whatever'}), {'name': 'foo', 'building': 'whatever'}) def test_tag_filter_relations(self): tag_filter_for_relations = self.tag_mapping.tag_filter_for_relations() tagfilter = lambda x: tag_filter_for_relations(x) or x eq_(tagfilter({'name': 'foo'}), {}) eq_(tagfilter({'name': 'foo', 'unknown': 'baz'}), {}) eq_(tagfilter({'name': 'foo', 'landuse': 'unknown'}), {}) eq_(tagfilter({'name': 'foo', 'landuse': 'farm'}), {}) eq_(tagfilter({'name': 'foo', 'landuse': 'farm', 'type': 'multipolygon'}), {'name': 'foo', 'landuse': 'farm', 'type': 'multipolygon'}) # skip multipolygon with filtered tags, otherwise tags from longest way would be used eq_(tagfilter({'name': 'foo', 'landuse': 'unknown', 'type': 'multipolygon'}), {}) eq_(tagfilter({'name': 'foo', 'landuse': 'park', 'type': 'multipolygon'}), {'name': 'foo', 'type': 'multipolygon', 'landuse': 'park'}) eq_(tagfilter({'name': 'foo', 'landuse': 'farm', 'boundary': 'administrative', 'type': 'multipolygon'}), {'name': 'foo', 'landuse': 'farm', 'boundary': 'administrative', 'type': 'multipolygon'}) # boundary relation for boundary eq_(tagfilter({'name': 'foo', 'landuse': 'farm', 'boundary': 'administrative', 'type': 'boundary'}), {'name': 'foo', 'landuse': 'farm', 'boundary': 'administrative', 'type': 'boundary'}) # boundary relation for non boundary eq_(tagfilter({'name': 'foo', 'landuse': 'farm', 'type': 'boundary'}), {}) # skip boundary with filtered tags, otherwise tags from longest way would be used eq_(tagfilter({'name': 'foo', 'boundary': 'unknown', 'type': 'boundary'}), {}) eq_(tagfilter({'name': 'foo', 'boundary': 'administrative', 'type': 'boundary'}), {'name': 'foo', 'boundary': 'administrative', 'type': 'boundary'}) def test_mapping_for_nodes(self): for_nodes = self.tag_mapping.for_nodes eq_mapping(for_nodes({'unknown': 'baz'}), []) eq_mapping(for_nodes({'place': 'unknown'}), []) eq_mapping(for_nodes({'place': 'city'}), [(('place', 'city'), ('places',))]) eq_mapping(for_nodes({'place': 'city', 'highway': 'unknown'}), [(('place', 'city'), ('places',))]) eq_mapping(for_nodes({'place': 'city', 'highway': 'bus_stop'}), [(('place', 'city'), ('places',)), (('highway', 'bus_stop'), ('transport_points',))]) def test_mapping_for_ways(self): for_ways = self.tag_mapping.for_ways eq_mapping(for_ways({'unknown': 'baz'}), []) eq_mapping(for_ways({'highway': 'unknown'}), []) eq_mapping(for_ways({'highway': 'track'}), [(('highway', 'track'), ('minorroads',))]) eq_mapping(for_ways({'highway': 'secondary', 'railway': 'tram'}), [(('railway', 'tram'), ('railways',)), (('highway', 'secondary'), ('mainroads',))]) eq_mapping(for_ways({'highway': 'footway'}), [(('highway', 'footway'), ('minorroads',)), (('highway', 'footway'), ('landusages',))]) eq_mapping(for_ways({'highway': 'footway', 'landuse': 'park'}), [(('highway', 'footway'), ('minorroads',)), (('landuse', 'park'), ('landusages',))]) def test_mapping_for_relation(self): for_relations = self.tag_mapping.for_relations eq_mapping(for_relations({'unknown': 'baz'}), []) eq_mapping(for_relations({'landuse': 'unknown'}), []) eq_mapping(for_relations({'landuse': 'farm'}), [(('landuse', 'farm'), ('landusages',))]) eq_mapping(for_relations({'landuse': 'farm', 'highway': 'secondary'}), [(('landuse', 'farm'), ('landusages',))]) eq_mapping(for_relations({'landuse': 'farm', 'aeroway': 'apron'}), [(('aeroway', 'apron'), ('transport_areas',)), (('landuse', 'farm'), ('landusages',))]) eq_mapping(for_relations({'boundary': 'administrative', 'admin_level': '8'}), [(('boundary', 'administrative'), ('admin',))]) def eq_mapping(actual_mappings, expected_mappings): assert len(actual_mappings) == len(expected_mappings), '%s != %s' % (actual_mappings, expected_mappings) actual_mappings = [(tags, tuple(m.name for m in mappings)) for tags, mappings in actual_mappings] actual_mappings.sort() expected_mappings.sort() eq_(actual_mappings, expected_mappings) imposm-2.5.0/imposm/util/0000755000076500000240000000000012060141076015221 5ustar oltstaff00000000000000imposm-2.5.0/imposm/util/__init__.py0000644000076500000240000001560712037722237017353 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import sys import time import datetime import mmap import multiprocessing from multiprocessing import JoinableQueue from Queue import Empty import logging log = logging.getLogger(__name__) try: from setproctitle import setproctitle setproctitle except ImportError: setproctitle = lambda x: None class Timer(object): def __init__(self, title, logger): self.title = title self.logger = logger self.start_time = time.time() def stop(self): seconds = time.time() - self.start_time self.logger.message('%s took %s' % (self.title, format_total_time(seconds))) class ParserProgress(multiprocessing.Process): log_every_seconds = 0.2 def __init__(self): self.queue = multiprocessing.Queue() multiprocessing.Process.__init__(self) def run(self): last_log = time.time() counters = {'coords': 0, 'nodes':0, 'ways':0, 'relations':0} while True: log_statement = self.queue.get() if log_statement is None: break log_type, incr = log_statement counters[log_type] += incr if time.time() - last_log > self.log_every_seconds: last_log = time.time() self.print_log(counters) @staticmethod def message(msg): print >>sys.stderr, "[%s] %s" % (timestamp(), msg) sys.stderr.flush() def print_log(self, counters): print >>sys.stderr, "[%s] coords: %dk nodes: %dk ways: %dk relations: %dk\r" % ( timestamp(), int(counters['coords']/1000), int(counters['nodes']/1000), int(counters['ways']/1000), int(counters['relations']/1000) ), sys.stderr.flush() def log(self, log_type, incr): self.queue.put((log_type, incr)) def stop(self): sys.stderr.write('\n') sys.stderr.flush() self.queue.put(None) class QuietParserProgress(ParserProgress): log_every_seconds = 60 class ProgressLog(object): log_every_seconds = 0.2 def __init__(self, title=None, total=None): self.count = 0 self.total = total self._total = '/%dk' % (total/1000) if total else '' self.title = title self.start_time = time.time() self.last_log = time.time() self.print_log() @staticmethod def message(msg): print >>sys.stderr, "[%s] %s" % (timestamp(), msg) sys.stderr.flush() def log(self, value=None, step=1): before = self.count//1000 if value: self.count = value else: self.count += step if self.count//1000 > before: self.print_log() def print_log(self): if time.time() - self.last_log > self.log_every_seconds: self.last_log = time.time() print >>sys.stderr, "[%s] %s: %dk%s\r" % ( timestamp(), self.title, int(self.count/1000), self._total, ), sys.stderr.flush() def stop(self): print >>sys.stderr seconds = time.time() - self.start_time total_time = format_total_time(seconds) print >>sys.stderr, "[%s] %s: total time %s for %d (%d/s)" % ( timestamp(), self.title, total_time, self.count, self.count/seconds) sys.stderr.flush() class QuietProgressLog(ProgressLog): log_every_seconds = 60 def timestamp(): return datetime.datetime.now().strftime('%H:%M:%S') def format_total_time(seconds): h, m, s = seconds_to_hms(seconds) res = '%-02ds' % s if h or m: res = '%-02dm ' % m + res if h: res = '%-02dh ' % h + res return res def seconds_to_hms(seconds): h, s = divmod(seconds, 60*60) m, s = divmod(s, 60) return h, m, s class NullLog(object): def log_node(self): pass node = log_node def log_way(self): pass way = log_way def log_relation(self): pass relation = log_relation class MMapReader(object): def __init__(self, m, size): self.m = m self.m.seek(0) self.size = size def read(self, size=None): if size is None: size = self.size - self.m.tell() else: size = min(self.size - self.m.tell(), size) return self.m.read(size) def readline(self): cur_pos = self.m.tell() if cur_pos >= self.size: return nl_pos = self.m.find('\n') self.m.seek(cur_pos) return self.m.read(nl_pos-cur_pos) def seek(self, n): self.m.seek(n) class MMapPool(object): def __init__(self, n, mmap_size): self.n = n self.mmap_size = mmap_size self.pool = [mmap.mmap(-1, mmap_size) for _ in range(n)] self.free_mmaps = set(range(n)) self.free_queue = JoinableQueue() def new(self): if not self.free_mmaps: self.free_mmaps.add(self.free_queue.get()) self.free_queue.task_done() while True: try: self.free_mmaps.add(self.free_queue.get_nowait()) self.free_queue.task_done() except Empty: break mmap_idx = self.free_mmaps.pop() return mmap_idx, self.pool[mmap_idx] def join(self): while len(self.free_mmaps) < self.n: self.free_mmaps.add(self.free_queue.get()) self.free_queue.task_done() def get(self, idx): return self.pool[idx] def free(self, idx): self.free_queue.put(idx) def create_pool(creator, size): pool = [] for i in xrange(size): proc = creator() proc.start() pool.append(proc) return pool def shutdown_pool(procs, queue=None, sentinel=None): if queue: for _ in range(len(procs)): queue.put(sentinel) for p in procs: p.join(timeout=10*60) # 10 min if p.is_alive(): log.warn('could not join process %r, terminating process', p) p.terminate() def estimate_records(files): records = 0 for f in files: fsize = os.path.getsize(f) if f.endswith('.bz2'): fsize *= 11 # observed bzip2 compression factor on osm data if f.endswith('.pbf'): fsize *= 15 # observed pbf compression factor on osm data records += fsize/200 return int(records) imposm-2.5.0/imposm/util/geom.py0000644000076500000240000001051312037722237016532 0ustar oltstaff00000000000000# This file is part of the MapProxy project. # Copyright (C) 2010 Omniscale # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import division, with_statement import codecs from functools import partial import logging log = logging.getLogger(__name__) try: import shapely.wkt import shapely.geometry import shapely.ops import shapely.prepared geom_support = True except ImportError: geom_support = False def require_geom_support(): if not geom_support: raise ImportError('Shapely required for geometry support') def load_datasource(datasource, where=None): """ Loads polygons from any OGR datasource. Returns the bbox and a Shapely MultiPolygon with the loaded geometries. """ from imposm.util.ogr import OGRShapeReader polygons = [] for wkt in OGRShapeReader(datasource).wkts(where): geom = shapely.wkt.loads(wkt) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': for p in geom: polygons.append(p) else: log.info('skipping %s geometry from %s: not a Polygon/MultiPolygon', geom.type, datasource) return polygons def load_polygons(geom_files): """ Loads WKT polygons from one or more text files. Returns the bbox and a Shapely MultiPolygon with the loaded geometries. """ polygons = [] if isinstance(geom_files, basestring): geom_files = [geom_files] for geom_file in geom_files: # open with utf-8-sig encoding to get rid of UTF8 BOM from MS Notepad with codecs.open(geom_file, encoding='utf-8-sig') as f: polygons.extend(load_polygon_lines(f, source=geom_files)) return polygons def load_polygon_lines(line_iter, source=''): polygons = [] for line in line_iter: if not line.strip(): continue geom = shapely.wkt.loads(line) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': for p in geom: polygons.append(p) else: log.info('ignoring non-polygon geometry (%s) from %s', geom.type, source) return polygons def build_multipolygon(polygons, simplify=False): if polygons: mp = shapely.geometry.MultiPolygon(polygons) if simplify: mp = simplify_geom(mp) else: mp = shapely.geometry.Polygon() return mp.bounds, mp def simplify_geom(geom): bounds = geom.bounds w, h = bounds[2] - bounds[0], bounds[3] - bounds[1] tolerance = min((w/1e6, h/1e6)) return geom.simplify(tolerance, preserve_topology=True) def bbox_polygon(bbox): """ Create Polygon that covers the given bbox. """ return shapely.geometry.Polygon(( (bbox[0], bbox[1]), (bbox[2], bbox[1]), (bbox[2], bbox[3]), (bbox[0], bbox[3]), )) def transform_geometry(from_srs, to_srs, geometry): transf = partial(transform_xy, from_srs, to_srs) if geometry.type == 'Polygon': return transform_polygon(transf, geometry) if geometry.type == 'MultiPolygon': return transform_multipolygon(transf, geometry) raise ValueError('cannot transform %s' % geometry.type) def transform_polygon(transf, polygon): ext = transf(polygon.exterior.xy) ints = [transf(ring.xy) for ring in polygon.interiors] return shapely.geometry.Polygon(ext, ints) def transform_multipolygon(transf, multipolygon): transformed_polygons = [] for polygon in multipolygon: transformed_polygons.append(transform_polygon(transf, polygon)) return shapely.geometry.MultiPolygon(transformed_polygons) def transform_xy(from_srs, to_srs, xy): return list(from_srs.transform_to(to_srs, zip(*xy))) imposm-2.5.0/imposm/util/lib.py0000644000076500000240000000630712037722237016357 0ustar oltstaff00000000000000# This file is part of the MapProxy project. # Copyright (C) 2010 Omniscale # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ ctypes utilities. """ import sys import os from ctypes import CDLL from ctypes.util import find_library as _find_library default_locations = dict( darwin=dict( paths = ['/opt/local/lib'], exts = ['.dylib'], ), win32=dict( paths = [os.path.dirname(os.__file__) + '/../../../DLLs'], exts = ['.dll'] ), other=dict( paths = [], # MAPPROXY_LIB_PATH will add paths here exts = ['.so'] ), ) # TODO does this work for imposm too? additional_lib_path = os.environ.get('MAPPROXY_LIB_PATH') if additional_lib_path: additional_lib_path = additional_lib_path.split(os.pathsep) additional_lib_path.reverse() for locs in default_locations.values(): for path in additional_lib_path: locs['paths'].insert(0, path) def load_library(lib_names, locations_conf=default_locations): """ Load the `lib_name` library with ctypes. If ctypes.util.find_library does not find the library, different path and filename extensions will be tried. Retruns the loaded library or None. """ if isinstance(lib_names, basestring): lib_names = [lib_names] for lib_name in lib_names: lib = load_library_(lib_name, locations_conf) if lib is not None: return lib def load_library_(lib_name, locations_conf=default_locations): lib_path = find_library(lib_name) if lib_path: return CDLL(lib_path) if sys.platform in locations_conf: paths = locations_conf[sys.platform]['paths'] exts = locations_conf[sys.platform]['exts'] lib_path = find_library(lib_name, paths, exts) else: paths = locations_conf['other']['paths'] exts = locations_conf['other']['exts'] lib_path = find_library(lib_name, paths, exts) if lib_path: return CDLL(lib_path) def find_library(lib_name, paths=None, exts=None): """ Search for library in all permutations of `paths` and `exts`. If nothing is found None is returned. """ if not paths or not exts: lib = _find_library(lib_name) if lib is None and lib_name.startswith('lib'): lib = _find_library(lib_name[3:]) return lib for lib_name in [lib_name] + ([lib_name[3:]] if lib_name.startswith('lib') else []): for path in paths: for ext in exts: lib_path = os.path.join(path, lib_name + ext) if os.path.exists(lib_path): return lib_path return None if __name__ == '__main__': print load_library(sys.argv[1]) imposm-2.5.0/imposm/util/ogr.py0000644000076500000240000001030012037722237016364 0ustar oltstaff00000000000000# This file is part of the MapProxy project. # Copyright (C) 2010 Omniscale # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from imposm.util.lib import load_library import ctypes from ctypes import c_void_p, c_char_p, c_int def init_libgdal(): libgdal = load_library(['libgdal', 'libgdal1']) if not libgdal: return libgdal.OGROpen.argtypes = [c_char_p, c_int, c_void_p] libgdal.OGROpen.restype = c_void_p libgdal.CPLGetLastErrorMsg.argtypes = [] libgdal.CPLGetLastErrorMsg.restype = c_char_p libgdal.OGR_DS_GetLayer.argtypes = [c_void_p, c_int] libgdal.OGR_DS_GetLayer.restype = c_void_p libgdal.OGR_FD_GetName.argtypes = [c_void_p] libgdal.OGR_FD_GetName.restype = c_char_p libgdal.OGR_L_GetLayerDefn.argtypes = [c_void_p] libgdal.OGR_L_GetLayerDefn.restype = c_void_p libgdal.OGR_DS_Destroy.argtypes = [c_void_p] libgdal.OGR_DS_ExecuteSQL.argtypes = [c_void_p, c_char_p, c_void_p, c_char_p] libgdal.OGR_DS_ExecuteSQL.restype = c_void_p libgdal.OGR_DS_ReleaseResultSet.argtypes = [c_void_p, c_void_p] libgdal.OGR_L_ResetReading.argtypes = [c_void_p] libgdal.OGR_L_GetNextFeature.argtypes = [c_void_p] libgdal.OGR_L_GetNextFeature.restype = c_void_p libgdal.OGR_F_Destroy.argtypes = [c_void_p] libgdal.OGR_F_GetGeometryRef.argtypes = [c_void_p] libgdal.OGR_F_GetGeometryRef.restype = c_void_p libgdal.OGR_G_ExportToWkt.argtypes = [c_void_p, ctypes.POINTER(c_char_p)] libgdal.OGR_G_ExportToWkt.restype = c_void_p libgdal.VSIFree.argtypes = [c_void_p] libgdal.OGRRegisterAll() return libgdal libgdal = init_libgdal() class OGRShapeReaderError(Exception): pass class OGRShapeReader(object): def __init__(self, datasource): self.datasource = datasource self.opened = False self._ds = None def open(self): if self.opened: return self._ds = libgdal.OGROpen(self.datasource, False, None) if self._ds is None: msg = libgdal.CPLGetLastErrorMsg() if not msg: msg = 'failed to open %s' % self.datasource raise OGRShapeReaderError(msg) def wkts(self, where=None): if not self.opened: self.open() if where: if not where.lower().startswith('select'): layer = libgdal.OGR_DS_GetLayer(self._ds, 0) layer_def = libgdal.OGR_L_GetLayerDefn(layer) name = libgdal.OGR_FD_GetName(layer_def) where = 'select * from %s where %s' % (name, where) layer = libgdal.OGR_DS_ExecuteSQL(self._ds, where, None, None) else: layer = libgdal.OGR_DS_GetLayer(self._ds, 0) if layer is None: msg = libgdal.CPLGetLastErrorMsg() raise OGRShapeReaderError(msg) libgdal.OGR_L_ResetReading(layer) while True: feature = libgdal.OGR_L_GetNextFeature(layer) if feature is None: break geom = libgdal.OGR_F_GetGeometryRef(feature) res = c_char_p() libgdal.OGR_G_ExportToWkt(geom, ctypes.byref(res)) yield res.value libgdal.VSIFree(res) libgdal.OGR_F_Destroy(feature) if where: libgdal.OGR_DS_ReleaseResultSet(self._ds, layer) def close(self): if self.opened: libgdal.OGR_DS_Destroy(self._ds) self.opened = False def __del__(self): self.close() if __name__ == '__main__': import sys reader = OGRShapeReader(sys.argv[1]) where = None if len(sys.argv) == 3: where = sys.argv[2] for wkt in reader.wkts(where): print wktimposm-2.5.0/imposm/version.py0000644000076500000240000000115612060140727016310 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. __version__ = '2.5.0' imposm-2.5.0/imposm/writer.py0000644000076500000240000000701311777043510016143 0ustar oltstaff00000000000000# Copyright 2011 Omniscale (http://omniscale.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from multiprocessing import Process, JoinableQueue from imposm.dbimporter import NodeProcessTuple, WayProcessTuple, RelationProcessTuple from imposm.dbimporter import NodeProcessDict, WayProcessDict, RelationProcessDict from imposm.util import create_pool, shutdown_pool import_processes = { 'tuple': { 'node': NodeProcessTuple, 'way': WayProcessTuple, 'relation': RelationProcessTuple, }, 'dict': { 'node': NodeProcessDict, 'way': WayProcessDict, 'relation': RelationProcessDict, } } class ImposmWriter(object): def __init__(self, mapping, db, cache, pool_size=2, logger=None, dry_run=False): self.mapping = mapping self.db = db self.mapper = mapping self.cache = cache self.pool_size = pool_size self.logger = logger self.dry_run = dry_run def _write_elem(self, proc, elem_cache, log, pool_size, proc_args=[]): queue = JoinableQueue(16) importer = lambda: proc(queue, self.db, self.mapper, self.cache, self.dry_run, *proc_args) pool = create_pool(importer, pool_size) data = [] for i, elem in enumerate(elem_cache): if elem.tags: data.append(elem) if len(data) >= 128: queue.put(data) log.log(i) data = [] queue.put(data) shutdown_pool(pool, queue) log.stop() self.cache.close_all() def relations(self): self.cache.remove_inserted_way_cache() cache = self.cache.relations_cache() log = self.logger('relations', len(cache)) inserted_way_queue = JoinableQueue() way_marker = WayMarkerProcess(inserted_way_queue, self.cache, self.logger) way_marker.start() self._write_elem(import_processes[self.db.insert_data_format]['relation'], cache, log, self.pool_size, [inserted_way_queue]) inserted_way_queue.put(None) way_marker.join() def ways(self): cache = self.cache.ways_cache() log = self.logger('ways', len(cache)) self._write_elem(import_processes[self.db.insert_data_format]['way'], cache, log, self.pool_size) self.cache.remove_inserted_way_cache() def nodes(self): cache = self.cache.nodes_cache() log = self.logger('nodes', len(cache)) self._write_elem(import_processes[self.db.insert_data_format]['node'], cache, log, self.pool_size) class WayMarkerProcess(Process): def __init__(self, queue, cache, logger): Process.__init__(self) self.daemon = True self.queue = queue self.cache = cache self.logger = logger def run(self): inserted_ways = self.cache.inserted_ways_cache('w') while True: osmid = self.queue.get() if osmid is None: break inserted_ways.put(osmid) inserted_ways.close() imposm-2.5.0/imposm.egg-info/0000755000076500000240000000000012060141076015736 5ustar oltstaff00000000000000imposm-2.5.0/imposm.egg-info/dependency_links.txt0000644000076500000240000000000112060141076022004 0ustar oltstaff00000000000000 imposm-2.5.0/imposm.egg-info/entry_points.txt0000644000076500000240000000011712060141076021233 0ustar oltstaff00000000000000[console_scripts] imposm-psqldb = imposm.psqldb:main imposm = imposm.app:main imposm-2.5.0/imposm.egg-info/namespace_packages.txt0000644000076500000240000000000712060141076022266 0ustar oltstaff00000000000000imposm imposm-2.5.0/imposm.egg-info/PKG-INFO0000644000076500000240000001070012060141076017031 0ustar oltstaff00000000000000Metadata-Version: 1.0 Name: imposm Version: 2.5.0 Summary: OpenStreetMap importer for PostGIS. Home-page: http://imposm.org/ Author: Oliver Tonnhofer Author-email: olt@omniscale.de License: Apache Software License 2.0 Description: Imposm is an importer for OpenStreetMap data. It reads XML and PBF files and can import the data into PostgreSQL/PostGIS databases. It is designed to create databases that are optimized for rendering/WMS services. It is developed and supported by `Omniscale `_, runs on Linux or Mac OS X and is released as open source under the `Apache Software License 2.0 `_. See http://imposm.org/ for more information. Changelog --------- 2.5.0 2012-12-06 ~~~~~~~~~~~~~~~~ - PostGIS 2 support - new --limit-to option to limit imports to polygons - added --quiet option that only logs progress once per minute - add StringIndex and Index mappings for PostgreSQL - always drop tables _and_ views with same name before creating new table/view. allows to change mappings from views to tables and vice versa. - internal refactoring to make support for non SQL databases easier 2.4.0 2012-03-30 ~~~~~~~~~~~~~~~~ - new Class and Type field types - add support to disable automatic ``type`` column - new --connection option - support for PostGIS Trigram indices - do not try to simplify empty geometries - limit progress logging to 5 times per second - use SERIAL as primary key to support multiple features with the same OSM ID - new optional splitting of long line strings - use BIGINT for OSM ID in Postgres to support 64bit OSM IDs 2.3.2 2011-09-05 ~~~~~~~~~~~~~~~~ - fixed --table-prefix - add --debug option for more verbose output - fixed way merging - fixed default_name_fields for UnionViews - improved (contains) relation builder 2.3.1 2011-07-05 ~~~~~~~~~~~~~~~~ - DROP views instead of REPLACE to prevent errors when columns changed 2.3.0 2011-07-05 ~~~~~~~~~~~~~~~~ - new PseudoArea field type - new Name and LocalizedName field type - update SRS in GeneralizedTables and UnionTables - new waterareas_gen0|1 in default style - new area field in landusages table - new meter_to_mapunit function to use same mapping for EPSG:4326 and projected SRS 2.2.0 2011-06-01 ~~~~~~~~~~~~~~~~ - support for Shapely speedups (>=1.2.10) - new --port option for PostgreSQL port - reduced size of nodes cache by ~40% - store inserted ways in extra cache - support for relations type=boundary - new faster relation builder that supports relations with >1000 rings - set import options in mapping file - import_partial_relations=True/False - relation_builder=contains(new)/union(old) - imposm_multipolygon_report=60(seconds) - imposm_multipolygon_max_ring=0 2.1.3 2011-04-19 ~~~~~~~~~~~~~~~~ - support for colons and other special chars in field and table names (e.g. de:name) 2.1.2 2011-04-13 ~~~~~~~~~~~~~~~~ - make it work on 32bit systems 2.1.1 2011-04-12 ~~~~~~~~~~~~~~~~ - new ``--proj`` option to change DB projection from EPSG:900913 - abort if there are existing cache files - new ``--merge-cache`` and ``--overwrite-cache`` options 2.1.0 2011-03-29 ~~~~~~~~~~~~~~~~ - first open source release Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: OS Independent Classifier: Programming Language :: C Classifier: Programming Language :: C++ Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Topic :: Scientific/Engineering :: GIS imposm-2.5.0/imposm.egg-info/requires.txt0000644000076500000240000000003612060141076020335 0ustar oltstaff00000000000000imposm.parser psycopg2 Shapelyimposm-2.5.0/imposm.egg-info/SOURCES.txt0000644000076500000240000000203312060141076017620 0ustar oltstaff00000000000000CHANGES LICENSE MANIFEST.in README.rst internal.proto setup.cfg setup.py imposm/900913.sql imposm/__init__.py imposm/app.py imposm/base.py imposm/config.py imposm/dbimporter.py imposm/defaultmapping.py imposm/geom.py imposm/mapping.py imposm/merge.py imposm/multipolygon.py imposm/psqldb.py imposm/reader.py imposm/version.py imposm/writer.py imposm.egg-info/PKG-INFO imposm.egg-info/SOURCES.txt imposm.egg-info/dependency_links.txt imposm.egg-info/entry_points.txt imposm.egg-info/namespace_packages.txt imposm.egg-info/requires.txt imposm.egg-info/top_level.txt imposm/cache/__init__.py imposm/cache/internal.cc imposm/cache/osm.py imposm/cache/tc.c imposm/cache/tc.pyx imposm/db/__init__.py imposm/db/config.py imposm/db/postgis.py imposm/test/__init__.py imposm/test/test_cache.py imposm/test/test_dbimporter.py imposm/test/test_field_types.py imposm/test/test_imported.py imposm/test/test_limit_to.py imposm/test/test_multipolygon.py imposm/test/test_tag_mapper.py imposm/util/__init__.py imposm/util/geom.py imposm/util/lib.py imposm/util/ogr.pyimposm-2.5.0/imposm.egg-info/top_level.txt0000644000076500000240000000000712060141076020465 0ustar oltstaff00000000000000imposm imposm-2.5.0/internal.proto0000644000076500000240000000040111766043214015643 0ustar oltstaff00000000000000package imposm.cache.internal; message DeltaCoords { repeated sint64 ids = 1 [packed = true]; repeated sint64 lats = 2 [packed = true]; repeated sint64 lons = 3 [packed = true]; } message DeltaList { repeated sint64 ids = 1 [packed = true]; } imposm-2.5.0/LICENSE0000644000076500000240000002613611766043214013764 0ustar oltstaff00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. imposm-2.5.0/MANIFEST.in0000644000076500000240000000036011766656660014523 0ustar oltstaff00000000000000include setup.py include README.rst include LICENSE include CHANGES include imposm/900913.sql include imposm/cache/tc.c include imposm/cache/tc.pyx include internal.proto include imposm/cache/internal.cc exclude imposm/cache/internal.pb.cc imposm-2.5.0/PKG-INFO0000644000076500000240000001070012060141076014033 0ustar oltstaff00000000000000Metadata-Version: 1.0 Name: imposm Version: 2.5.0 Summary: OpenStreetMap importer for PostGIS. Home-page: http://imposm.org/ Author: Oliver Tonnhofer Author-email: olt@omniscale.de License: Apache Software License 2.0 Description: Imposm is an importer for OpenStreetMap data. It reads XML and PBF files and can import the data into PostgreSQL/PostGIS databases. It is designed to create databases that are optimized for rendering/WMS services. It is developed and supported by `Omniscale `_, runs on Linux or Mac OS X and is released as open source under the `Apache Software License 2.0 `_. See http://imposm.org/ for more information. Changelog --------- 2.5.0 2012-12-06 ~~~~~~~~~~~~~~~~ - PostGIS 2 support - new --limit-to option to limit imports to polygons - added --quiet option that only logs progress once per minute - add StringIndex and Index mappings for PostgreSQL - always drop tables _and_ views with same name before creating new table/view. allows to change mappings from views to tables and vice versa. - internal refactoring to make support for non SQL databases easier 2.4.0 2012-03-30 ~~~~~~~~~~~~~~~~ - new Class and Type field types - add support to disable automatic ``type`` column - new --connection option - support for PostGIS Trigram indices - do not try to simplify empty geometries - limit progress logging to 5 times per second - use SERIAL as primary key to support multiple features with the same OSM ID - new optional splitting of long line strings - use BIGINT for OSM ID in Postgres to support 64bit OSM IDs 2.3.2 2011-09-05 ~~~~~~~~~~~~~~~~ - fixed --table-prefix - add --debug option for more verbose output - fixed way merging - fixed default_name_fields for UnionViews - improved (contains) relation builder 2.3.1 2011-07-05 ~~~~~~~~~~~~~~~~ - DROP views instead of REPLACE to prevent errors when columns changed 2.3.0 2011-07-05 ~~~~~~~~~~~~~~~~ - new PseudoArea field type - new Name and LocalizedName field type - update SRS in GeneralizedTables and UnionTables - new waterareas_gen0|1 in default style - new area field in landusages table - new meter_to_mapunit function to use same mapping for EPSG:4326 and projected SRS 2.2.0 2011-06-01 ~~~~~~~~~~~~~~~~ - support for Shapely speedups (>=1.2.10) - new --port option for PostgreSQL port - reduced size of nodes cache by ~40% - store inserted ways in extra cache - support for relations type=boundary - new faster relation builder that supports relations with >1000 rings - set import options in mapping file - import_partial_relations=True/False - relation_builder=contains(new)/union(old) - imposm_multipolygon_report=60(seconds) - imposm_multipolygon_max_ring=0 2.1.3 2011-04-19 ~~~~~~~~~~~~~~~~ - support for colons and other special chars in field and table names (e.g. de:name) 2.1.2 2011-04-13 ~~~~~~~~~~~~~~~~ - make it work on 32bit systems 2.1.1 2011-04-12 ~~~~~~~~~~~~~~~~ - new ``--proj`` option to change DB projection from EPSG:900913 - abort if there are existing cache files - new ``--merge-cache`` and ``--overwrite-cache`` options 2.1.0 2011-03-29 ~~~~~~~~~~~~~~~~ - first open source release Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: OS Independent Classifier: Programming Language :: C Classifier: Programming Language :: C++ Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Topic :: Scientific/Engineering :: GIS imposm-2.5.0/README.rst0000644000076500000240000000074211766656660014460 0ustar oltstaff00000000000000Imposm is an importer for OpenStreetMap data. It reads XML and PBF files and can import the data into PostgreSQL/PostGIS databases. It is designed to create databases that are optimized for rendering/WMS services. It is developed and supported by `Omniscale `_, runs on Linux or Mac OS X and is released as open source under the `Apache Software License 2.0 `_. See http://imposm.org/ for more information. imposm-2.5.0/setup.cfg0000644000076500000240000000021112060141076014553 0ustar oltstaff00000000000000[nosetests] cover-erase = 1 verbosity = 2 doctest-tests = 1 with-doctest = 1 [egg_info] tag_date = 0 tag_build = tag_svn_revision = 0 imposm-2.5.0/setup.py0000644000076500000240000001054011766656660014500 0ustar oltstaff00000000000000import os import errno import subprocess import sys from setuptools import setup, find_packages from setuptools.extension import Extension from setuptools.command.build_ext import build_ext from distutils.errors import DistutilsPlatformError install_requires = [ 'imposm.parser', 'psycopg2', 'Shapely', ] if sys.version_info < (2, 6): install_requires.append('multiprocessing') class build_ext_with_cython(build_ext): def generate_c_file(self): try: if (os.path.exists('imposm/cache/tc.c') and os.path.getmtime('imposm/cache/tc.pyx') < os.path.getmtime('imposm/cache/tc.c')): print 'imposm/cache/tc.c up to date' return print 'creating imposm/cache/tc.c' proc = subprocess.Popen( ['cython', 'imposm/cache/tc.pyx'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) except OSError, ex: if ex.errno == errno.ENOENT: print "Could not find cython command." raise DistutilsPlatformError("Failed to generate " "C files with cython.") else: raise out = proc.communicate()[0] result = proc.wait() if result != 0: print "Error during C files generation with cython:" print out raise DistutilsPlatformError("Failed to generate " "C files with cython.") def generate_protoc(self): try: if (os.path.exists('imposm/cache/internal.pb.cc') and os.path.getmtime('internal.proto') < os.path.getmtime('imposm/cache/internal.pb.cc')): print 'imposm/cache/internal.pb.cc up to date' return print 'creating protofiles' proc = subprocess.Popen( ['protoc', '--cpp_out', 'imposm/cache/', 'internal.proto'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) except OSError, ex: if ex.errno == errno.ENOENT: print ("Could not find protoc command. Make sure protobuf is " "installed and your PATH environment is set.") raise DistutilsPlatformError("Failed to generate protbuf " "CPP files with protoc.") else: raise out = proc.communicate()[0] result = proc.wait() if result != 0: print "Error during protbuf files generation with protoc:" print out raise DistutilsPlatformError("Failed to generate protbuf " "CPP files with protoc.") def run(self): self.generate_protoc() try: self.generate_c_file() except DistutilsPlatformError: if os.path.exists('imposm/cache/tc.c'): print 'Found existing C file. Ignoring previous error.' else: raise build_ext.run(self) import imposm.version version = imposm.version.__version__ setup( name = "imposm", version = version, description='OpenStreetMap importer for PostGIS.', long_description=open('README.rst').read() + open('CHANGES').read(), author = "Oliver Tonnhofer", author_email = "olt@omniscale.de", url='http://imposm.org/', license='Apache Software License 2.0', packages=find_packages(), namespace_packages = ['imposm'], include_package_data=True, package_data = {'': ['*.xml']}, install_requires=install_requires, classifiers=[ "Development Status :: 4 - Beta", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: C", "Programming Language :: C++", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering :: GIS", ], ext_modules=[ Extension("imposm.cache.tc", ["imposm/cache/tc.c"], libraries = ["tokyocabinet"]), Extension("imposm.cache.internal", ["imposm/cache/internal.cc", "imposm/cache/internal.pb.cc"], libraries = ["protobuf"]), ], entry_points = { 'console_scripts': [ 'imposm = imposm.app:main', 'imposm-psqldb = imposm.psqldb:main', ], }, cmdclass={'build_ext':build_ext_with_cython}, )